ধরুন আমরা অর্ডার নামক স্ট্রিং একটি তালিকা আছে. অর্ডার তালিকার প্রতিটি উপাদান "P" বা "D" দিয়ে শুরু হয়। "P" নির্দেশ করে যেটি তোলা হয়েছে, এবং "D" মানে "ডেলিভারি"। এবং এই অক্ষরগুলি অর্ডার আইডি নম্বর দ্বারা অনুসরণ করা হয়। উদাহরণ স্বরূপ, "P6" নির্দেশ করে অর্ডার 6 পিক আপ করুন৷ এই নিয়মগুলির উপর ভিত্তি করে অর্ডার তালিকা বৈধ কিনা তা আমাদের পরীক্ষা করতে হবে -
- পিকআপের আগে আমরা অর্ডার ডেলিভারি করতে পারি না
- প্রতিটি পিকআপ ডেলিভারি করতে হবে
- একটি অর্ডার যা ইতিমধ্যেই তোলা হয়েছে এবং ডেলিভারি করা হয়েছে তা আবার তোলা বা বিতরণ করা যাবে না
সুতরাং, যদি ইনপুট অর্ডারের মত হয় =["P1", "D1", "P2", "P3", "D3", "D2"], তাহলে আউটপুট হবে True, কারণ প্রথম অর্ডার পিক আপ করার পরে বিতরণ করা হয় , এবং দ্বিতীয় এবং তৃতীয় অর্ডারের জন্য সেগুলি একবারে তোলা হয় এবং শেষ পর্যন্ত বিতরণ করা হয়৷
৷এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- a :=একটি নতুন মানচিত্র
- যদি অর্ডারে কোনো ডুপ্লিকেট এন্ট্রি থাকে, তাহলে
- মিথ্যে ফেরত দিন
- প্রত্যেক i অর্ডারের জন্য, করুন
- যদি আমি "P" দিয়ে শুরু করি, তাহলে
- a[পিক আপ অর্ডার নম্বর] =1
- অন্যথায় যখন আমি "D" দিয়ে শুরু করি, তারপর
- যদি অর্ডার নম্বর a তে না থাকে, তাহলে
- মিথ্যে ফেরত দিন
- অন্যথায়,
- একটি [ডেলিভারি অর্ডার নম্বর] 1 কমে
- যদি অর্ডার নম্বর a তে না থাকে, তাহলে
- যদি আমি "P" দিয়ে শুরু করি, তাহলে
- সত্য প্রত্যাবর্তন করুন যখন a এর সমস্ত মানের তালিকায় উপস্থিত সমস্ত উপাদানের যোগফল 0 এর মতো হয়, অন্যথায় মিথ্যা হয়
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
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
orders = ["P1", "D1", "P2", "P3", "D3", "D2"]
print(solve(orders)) ইনপুট
["P1", "D1", "P2", "P3", "D3", "D2"]
আউটপুট
True