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

পাইথনে যাচাই করুন সবাই দুটি মেশিনে ভোট দিতে পারবে কিনা

ধরুন, n জন মানুষ এবং দুটি একই ভোটিং মেশিন আছে। time নামক একটি অ্যারে আছে যাতে time[i] হলো i-তম ব্যক্তির ভোট দিতে লাগা সময়। একবারে প্রতিটি মেশিনে একজনেরই ভোট দেওয়া যাবে। একটি মান x আছে যা মেশিন চালু থাকার সর্বোচ্চ সময়। আমাদের যাচাই করতে হবে যে সবাই নির্ধারিত সময়ের ভিতর ভোট দিতে পারবে কিনা।

যেমন, ইনপুট n = 3, x = 7, time = [3, 5, 3] হলে আউটপুট হবে True। কারণ: t=0-এ ০ নম্বর ব্যক্তি ১ নম্বর মেশিনে, ১ নম্বর ব্যক্তি ২ নম্বর মেশিনে যায়। t=3-এ ১ নম্বর মেশিন ফ্রি হয়, ২ নম্বর ব্যক্তি সেখানে যায়। t=5-এ ২ নম্বর মেশিন ফ্রি হয়, t=6-এ ১ নম্বর মেশিন ফ্রি হয় — সবাই সময়মতো ভোট দিয়েছে।

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

  • total_sum = sum(time)। যদি total_sum <= x হয়, তবে True ফেরত দিন (এক মেশিনে সবারই হয়ে যাবে)।
  • time সর্ট করুন।
  • prev_sum অ্যারে বানান যেখানে prev_sum[i] = time[0] + ... + time[i]।
  • দুটি নেস্টেড লুপ i এবং j (j > i) দিয়ে চেক করুন:
    • temp_sum = prev_sum[i] + (total_sum - prev_sum[j])।
    • যদি temp_sum <= x এবং total_sum - temp_sum <= x হয়, তবে True ফেরত দিন।
  • লুপ শেষ হলে False ফেরত দিন।

উদাহরণ কোড

def solve(n, x, time):
    total_sum = sum(time)
    if total_sum <= x:
        return True
    time.sort()
    prev_sum = [0] * len(time)
    prev_sum[0] = time[0]
    for i in range(1, len(prev_sum)):
        prev_sum[i] = prev_sum[i-1] + time[i]
    for i in range(len(prev_sum)):
        for j in range(i+1, len(prev_sum)):
            temp_sum = prev_sum[i] + (total_sum - prev_sum[j])
            if temp_sum <= x and total_sum - temp_sum <= x:
                return True
    return False

n = 3
x = 7
time = [3, 5, 3]
print(solve(n, x, time))

ইনপুট

3, 7, [3, 5, 3]

আউটপুট

True
  1. পাইথনে দুটি বাইনারি ট্রির সকল লেভেল যুগ्मানুকরণ (anagram) কিনা যাচাই

  2. পাইথনে দুটি ট্রি নোড স왪 করায় সমান হয় কিনা যাচাই করা (Flip Equivalent Trees)

  3. পাইথনে দুটি ডিকশনারি মার্জ (Merge) করা

  4. পাইথনে A কি B-র সুপারক্লাস তা কীভাবে চেক করবেন?