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

পাইথনে ডেলিভারি অপারেশন ভ্যালিড কিনা চেক করা (P/D রুলস)

অর্ডার লিস্টে P (পিকআপ) এবং D (ডেলিভারি) অপারেশন থাকে। নিম্নলিখিত রুল মেনে চলতে হয়:

  • পিকআপের আগে ডেলিভারি করা যাবে না।
  • প্রতিটি পিকআপের ডেলিভারি হতে হবে।
  • একবার পিকআপ ও ডেলিভারি হলে আবার সেটি করা যাবে না।

ইনপুট উদাহরণ

orders = ["P1", "D1", "P2", "P3", "D3", "D2"]

আউটপুট: True

অ্যালগরিদম

  1. ডুপ্লিকেট অর্ডার চেক করুন (সেট লেংথ চেক)।
  2. ম্যাপ a দিয়ে ট্র্যাক করুন: পিকআপ হলে a[id]=1, ডেলিভারি হলে a[id]--।
  3. ডেলিভারির সময় আইডি ম্যাপে নাই তবে ইনভ্যালিড।
  4. শেষে সব ভ্যালু ০ হলে ভ্যালিড।

পাইথন কোড

def solve(orders):
    a = {}
    if len(set(orders)) != len(orders):
        return False
    for i in orders:
        if i[0] == "P":
            a[i[1:]] = 1
        elif i[0] == "D":
            if i[1:] not in a:
                return False
            else:
                a[i[1:]] -= 1
    return sum(a.values()) == 0

# টেস্ট
print(solve(["P1","D1","P2","P3","D3","D2"]))  # True

ব্যাখ্যা

স্ট্যাকের মতো LIFO বাধ্য নয়, শুধু পিকআপ-ডেলিভারি অর্ডার এবং ইউনিকনেস চেক। সময় জটিলতা O(n)।

  1. পাইথন প্রোগ্রাম - পয়েন্টগুলোর কনকেভ পলিগন গঠন করে কিনা তা যাচাই করুন

  2. পাইথন প্রোগ্রাম - পয়েন্টগুলোর কনভেক্স হাল গঠন করে কিনা তা যাচাই করুন

  3. পাইথন প্রোগ্রাম - ক্রেডিট কার্ড নম্বর বৈধ কিনা তা যাচাই করুন

  4. পাইথনে বাইনারি ট্রিয়ের সব নোডের মান একই কিনা যাচাই করা