কম্পিউটার টিউটোরিয়াল

পাইথনে দুটি সংখ্যার বাইনারি রিপ্রেজেন্টেশন অনুগ্রাম (anagram) কিনা যাচাই করা

দুটি সংখ্যা দেওয়া আছে। কাজ হলো যাচাই করা যে বাইনারি রিপ্রেজেন্টেশনে তারা একে অপর অনুগ্রাম (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 অনুগ্রাম সংখ্যা নয়
  1. প্রাইম নম্বর চেক করার পাইথন প্রোগ্রাম

  2. পাইথনে আর্মস্ট্রอง নম্বর চেক করা

  3. পাইথনে বাইনারি রিপ্রেজেন্টেশন প্যালিনড্রোম কিনা যাচাই করার প্রোগ্রাম

  4. পাইথনে বাইনারি সংখ্যায় K ক্রমাগত ১ আছে কিনা যাচাই করার প্রোগ্রাম