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

পাইথনে ফুড প্যাকেট পাওয়া লোকের সংখ্যা বের করার প্রোগ্রাম


মান লিজিয়ে একটি কনফারেন্সে দুটি ধরণের মানুষ আছে। প্রথম ধরণ ভেজিটেরিয়ান লাঞ্চ পছন্দ করে, দ্বিতীয় ধরণ নন-ভেজিটেরিয়ান। কিন্তু প্যাকেট সীমিত। ভেজিটেরিয়ানকে নন-ভেজ প্যাকেট দিলে বা উল্টো হলে সে না নিয়ে নিজের পছন্দের প্যাকেটের জন্য কতেনে থাকবে। দুটি টাইপের প্যাকেট ও মানুষকে ০ (ভেজ) এবং ১ (নন-ভেজ) দিয়ে ডিনোট করা হয়েছে। এখন দুটি অ্যারে দেওয়া আছে: একটি n প্যাকেটের (০ ও ১), অন্যটি m মানুষের কিউ (০ ও ১)। যদি কেউ পছন্দের প্যাকেট না পায়, সে কিউর শেষে চলে যাবে এবং অপেক্ষা করবে। খাবার পাওয়া যেনি মানুষের সংখ্যা বের করতে হবে যাতে তাদের পছন্দের প্যাকেট বানানো যায়।

যেমন, ইনপুট হলে people = [0,1,1,0], packets = [0,1,0,0], তবে আউটপুট হবে 1। দুইজন নন-ভেজ পছন্দ করে কিন্তু প্যাকেট শুধু একটি। লাইনের প্রথম নন-ভেজ পছন্দকারী প্যাকেট পেল, বাকি একজন কেতে থাকল কোনো নন-ভেজ প্যাকেট নেই। তাই আউটপুট ১।

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

  • temp_arr := [0, 0]

  • people-এ প্রতিটি person এর জন্য: temp_arr[person] += 1

  • k := 0

  • k < len(packets) থাকা পর্যন্ত:

    • যদি temp_arr[packets[k]] > 0 হয়, তবে temp_arr[packets[k]] -= 1

    • অন্যথায়, ব্রেক করুন।

    • k += 1

  • len(packets) - k রিটার্ন করুন।

উদাহরণ

নিচের ইমপ্লিমেন্টেশনটি দেখুন:

def solve(people, packets):
    temp_arr = [0, 0]
    for person in people:
        temp_arr[person] += 1
    k = 0
    while k < len(packets):
        if temp_arr[packets[k]] > 0:
            temp_arr[packets[k]] -= 1
        else:
            break
        k += 1
    return len(packets) - k

print(solve([0,1,1,0], [0, 1, 0, 0]))

ইনপুট

[0,1,1,0], [0, 1, 0, 0]

আউটপুট

1

  1. Python দিয়ে বাইনারি ট্রিতে একটি নোডের ডানে অবস্থিত নোড বের করার প্রোগ্রাম

  2. Python দিয়ে একই লেবেল ওয়ালা সাব-ট্রি নোড সংখ্যা বের করার প্রোগ্রাম

  3. গোডাউনে বাম থেকে ডানে বক্স রাখার প্রোগ্রাম

  4. পাইথন প্রোগ্রাম লিস্টে সবচেয়ে ছোট সংখ্যা বের করা