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

পাইথনে Nটি ভিন্ন সংখ্যা বের করা যাদের বিটওয়াইজ OR হলো K

ধরা যাক দুটি ইন্টিজার N এবং K দেওয়া আছে। আমাদের Nটি ইউনিক মান বের করতে হবে যাদের বিটওয়াইজ OR হলো K। যদি সম্ভব না হয় তবে -1 রিটার্ন করুন।

যেমন, N = 4 এবং K = 6 হলে আউটপুট হবে [6, 0, 1, 2]।

সমাধানের ধাপসমূহ

  • MAX := 32, visited := 32 আকারের বুলিয়ান অ্যারে (False দিয়ে ভরা)
  • res := খালি লিস্ট
  • add() ফাংশন ডিফাইন করুন যা num নেয় এবং বিট ম্যানিপুলেশন করে res-এ মান যোগ করে
  • মেইন ফাংশনে:
    • pow2 := 2^0 থেকে 2^31 পর্যন্ত অ্যারে
    • res-এ k যোগ করুন
    • cnt_k := k-তে সেট বিটের সংখ্যা
    • যদি pow2[cnt_k] < n হয়: return -1
    • count := 0
    • for i in range(pow2[cnt_k] - 1):
      • add(i)
      • count বাড়ান
      • যদি count == n হয়: ব্রেক
    • res রিটার্ন করুন

উদাহরণ

MAX = 32
visited = [False for i in range(MAX)]
res = []
def set_bit_count(n):
    if n == 0: return 0
    else: return (n & 1) + set_bit_count(n >> 1)
def add(num):
    point = 0
    value = 0
    for i in range(MAX):
        if visited[i]: continue
        else:
            if num & 1: value += (1 << i)
            num //= 2
    res.append(value)
def solve(n, k):
    pow2 = [2**i for i in range(MAX)]
    res.append(k)
    cnt_k = set_bit_count(k)
    if pow2[cnt_k] < n: return -1
    count = 0
    for i in range(pow2[cnt_k] - 1):
        add(i)
        count += 1
        if count == n: break
    return res
n = 4
k = 6
print(solve(n, k))

ইনপুট

4, 6

আউটপুট

[6, 0, 1, 2]
  1. পাইথনে তিনটি সংখ্যার মধ্যে সর্বোচ্চ মান বের করা

  2. পাইথনে কিথ (Keith) সংখ্যা খুঁজে বের করার প্রোগ্রাম

  3. পাইথনে হেক্সাডেসিমাল সংখ্যার বিটওয়াইজ XOR অপারেশন করার প্রোগ্রাম

  4. Python-এ সংখ্যাগুলোর লিস্টের যোগফল (Sum) বের করা