मान लीजिए कि हमारे पास ऑर्डर नामक स्ट्रिंग्स की एक सूची है। ऑर्डर सूची में प्रत्येक तत्व "पी" या "डी" से शुरू होता है। "पी" इंगित करता है कि उठाया गया है, और "डी" का अर्थ है "वितरण"। और इन अक्षरों के बाद ऑर्डर आईडी नंबर आता है। उदाहरण के लिए, "P6" पिकअप ऑर्डर 6 को इंगित करता है। हमें यह जांचना होगा कि इन नियमों के आधार पर ऑर्डर सूची मान्य है या नहीं -
- हम पिकअप से पहले ऑर्डर डिलीवरी नहीं कर सकते
- हर पिकअप डिलीवर होनी चाहिए
- एक ऑर्डर जो पहले ही उठा लिया गया है और डिलीवर भी किया जा चुका है, उसे फिर से उठाया या डिलीवर नहीं किया जा सकता है
इसलिए, यदि इनपुट ऑर्डर की तरह है =["P1", "D1", "P2", "P3", "D3", "D2"], तो आउटपुट ट्रू होगा, क्योंकि पहला ऑर्डर लेने के बाद दिया जाता है , और दूसरे और तीसरे क्रम के लिए उन्हें एक बार में उठाया जाता है और अंत में वितरित भी किया जाता है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- a :=एक नया नक्शा
- यदि आदेशों में कोई डुप्लिकेट प्रविष्टियां हैं, तो
- झूठी वापसी
- आदेश में प्रत्येक i के लिए, करें
- अगर मैं "P" से शुरू करता हूं, तो
- a[पिक अप ऑर्डर नंबर] =1
- अन्यथा जब मैं "D" से शुरू करता हूं, तब
- यदि आदेश संख्या a में नहीं है, तो
- झूठी वापसी
- अन्यथा,
- a[डिलीवरी ऑर्डर संख्या] 1 की कमी
- यदि आदेश संख्या a में नहीं है, तो
- अगर मैं "P" से शुरू करता हूं, तो
- सही लौटें जब सभी मानों की सूची में मौजूद सभी तत्वों का योग 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