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

পাইথনে জেনারেট করা লিস্ট থেকে নির্দিষ্ট উপাদানগুলোর XOR মান বের করার প্রোগ্রাম

মানবিক সংখ্যাগুলো ধারণকারী একটি লিস্ট দেওয়া আছে। এখন সেই লিস্ট থেকে যেসব সংখ্যার বাইনারি রিপ্রেজেন্টেশনে দুটি কমপ্যাক্ট ১ থাকে, সেগুলো বাদ দিয়ে একটি নতুন লিস্ট Z তৈরি করা হয়। আবার একটি 'input_list' দেওয়া থাকে যাতে কিছু পূর্ণসংখ্যা মান থাকে। আমাদের Z লিস্ট থেকে那些指定 indexes-এ থাকা উপাদানগুলোর XOR মান বের করতে হবে।

যেমন, যদি input_list = [3, 4, 5] হয়, তবে আউটপুট হবে 9।

Z-র ৩, ৪, এবং ৫ নম্বর ইন্ডেক্সে মানগুলো হল ৪, ৫, এবং ৮। সুতরাং, ৪ XOR ৫ XOR ৮ = ৯।

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

  • zeck_num() ফাংশন সংজ্ঞায়িত করুন। এটি k, f_list গ্রহণ করবে:
    • res := 0
    • i = (f_list এর আকার - 1) থেকে -1 পর্যন্ত ১ করে কমিয়ে যান:
      • যদি k >= f_list[i] হয়, তবে:
        • res := res + 2^i
        • k := k - f_list[i]
    • res ফেরত দিন
  • MOD := 10^9 + 7
  • max_val := 10^18
  • f_list := [1, 2] মান সহ একটি নতুন লিস্ট
  • f_list-এর শেষ উপাদান <= max_val থাকার동안:
    • f_list-এর শেষ দুটি উপাদানের যোগফল f_list-এর শেষে যোগ করুন
  • res := 0
  • input_list-এর প্রতিটি index-এর জন্য:
    • res := res XOR zeck_num(index, f_list)
  • res mod MOD ফেরত দিন

উদাহরণ

def zeck_num(k, f_list):
    res = 0
    for i in range(len(f_list)-1, -1, -1):
        if k >= f_list[i]:
            res += 2**i
            k -= f_list[i]
    return res

def solve(input_list):
    MOD = 10**9 + 7
    max_val = 10**18
    f_list = [1, 2]
    while f_list[-1] <= max_val:
        f_list.append(f_list[-1] + f_list[-2])
    res = 0
    for index in input_list:
        res ^= zeck_num(index, f_list)
    return res % MOD

print(solve([3, 4, 5]))

ইনপুট

[3, 4, 5]

আউটপুট

9
  1. পাইথনে ট্রি থেকে একটি এজ কাট করে দুটি সাবট্রিের নোড ভ্যালু সামের পার্থক্য মিনিমাইজ করা

  2. পাইথনে সর্টেড তালিকা থেকে k-তম অনুপস্থিত সংখ্যা খুঁজে বের করার প্রোগ্রাম

  3. পাইথনে নির্দিষ্ট অক্ষর দিয়ে শুরু হওয়া লিস্ট এলিমেন্ট বের করা (Find list elements starting with specific letter)

  4. পাইথনে লিস্ট থেকে N বড় এলিমেন্ট বের করা