দুটি সংখ্যা দেওয়া আছে। কাজ হলো যাচাই করা যে বাইনারি রিপ্রেজেন্টেশনে তারা একে অপর অনুগ্রাম (anagram) কিনা। পাইথনে Counter(iterable) মেথড ও ডিকশনারি কম্পैरিজন দিয়ে দ্রুত সমাধান করা যায়।
উদাহরণ
ইনপুট: a = 8, b = 16 আউটপুট : হ্যাঁ দুই সংখ্যার বাইনারি রিপ্রেজেন্টেশনে সমান সংখ্যক ০ ও ১ রয়েছে।
অ্যালগরিদম
ধাপ ১: দুটি সংখ্যা দিন। ধাপ ২: উভয় সংখ্যাকে bin() ফাংশন দিয়ে বাইনারি রূপান্তর করুন এবং প্রথম দুটি ক্যারেক্টার বাদ দিন। ধাপ ৩: যেহেতু বাইনারি রিপ্রেজেন্টেশনের দৈর্ঘ্য ভিন্ন হতে পারে, ছোট স্ট্রিংয়ের শুরুতে শূন্য যোগ করে দৈর্ঘ্য সমান করুন। ধাপ ৪: উভয় ডিকশনারি তুলনা করুন, ০ ও ১-এর ভ্যালু সমান হলে বাইনারি রিপ্রেজেন্টেশন অনুগ্রাম।
উদাহরণ কোড
# দুটি সংখ্যার বাইনারি রিপ্রেজেন্টেশন অনুগ্রাম কিনা যাচাই
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 অনুগ্রাম সংখ্যা নয়