กำหนดตัวเลขสองตัว งานคือตรวจสอบว่าเป็นอะนาการแกรมกันในรูปไบนารีหรือไม่ แก้ได้เร็วใน Python ด้วย Counter(iterable) และการเปรียบเทียบดิกชันนารี
ตัวอย่าง
Input: a = 8, b = 16 Output : Yes ไบนารีของทั้งสองตัวมี 0 และ 1 เท่ากัน
อัลกอริทึม
ขั้นตอนที่ 1: กำหนดตัวเลขสองตัว ขั้นตอนที่ 2: แปลงทั้งสองเป็นไบนารีด้วย bin() ลบสองตัวแรกเพราะ bin() ขั้นตอนที่ 3: เนื่องจากความยาวไบนารีอาจต่างกัน ให้เติมศูนย์หน้าสตริงที่สั้นกว่าให้เท่ากัน ขั้นตอนที่ 4: เปรียบเทียบดิกชันนารี ถ้าค่า 0 และ 1 ในทั้งสองเท่ากัน ไบนารีเป็นอะนาการแกรม
โค้ดตัวอย่าง
# ฟังก์ชันตรวจสอบว่าไบนารีของสองตัวเลขเป็นอะนาการแกรม
from collections import Counter
def anagramoftwonumber(p1, p2):
# แปลงเป็นไบนารีและลบสองตัวแรก
bno1 = bin(p1)[2:]
bno2 = bin(p2)[2:]
# เติมศูนย์หน้าสตริงที่สั้นกว่า
zeros = abs(len(bno1) - len(bno2))
if (len(bno1) > len(bno2)):
bno2 = zeros * '0' + bno2
else:
bno1 = zeros * '0' + bno1
# แปลงไบนารีเป็นดิกชันนารี
dict1 = Counter(bno1)
dict2 = Counter(bno2)
# เปรียบเทียบดิกชันนารี
if dict1 == dict2:
print(p1, p2, "เป็นคู่อะนาการแกรม")
else:
print(p1, p2, "ไม่ใช่คู่อะนาการแกรม")
# โปรแกรมหลัก
if __name__ == "__main__":
n1 = int(input("ป้อนตัวเลขแรก ::>"))
n2 = int(input("ป้อนตัวเลขที่สอง ::>"))
anagramoftwonumber(n1, n2)
ผลลัพธ์
ป้อนตัวเลขแรก ::>8 ป้อนตัวเลขที่สอง ::>16 8 16 เป็นคู่อะนาการแกรม ป้อนตัวเลขแรก ::>3 ป้อนตัวเลขที่สอง ::>2 3 2 ไม่ใช่คู่อะนาการแกรม