युद्ध के खेल के परिणाम का पता लगाएं
जब मैं प्राथमिक विद्यालय में था, तो एक "रॉक-पेपर-कैंची" था-हम असेंबली के दौरान खेलेंगे, जब हम अपने शिक्षक की प्रतीक्षा कर रहे थे, अवकाश आदि पर हमने इसे "वॉर" कहा। हालांकि कुछ खोज के बाद, यह पता चलता है कि यह "शॉटगन गेम" (विकीहो के अनुसार) का बहुत सरल संस्करण है । मैं इसे "युद्ध" कहने जा रहा हूं क्योंकि नियम थोड़े अलग हैं:
2 लोग एक दूसरे से दूर बैठते हैं। खेल का लक्ष्य अन्य खिलाड़ी को "मार" करना है। प्रत्येक मोड़, आप 3 चालों में से एक खेल सकते हैं:
रीलोड : आपके पास एक बंदूक है जो एक ही शॉट रखती है। इससे पहले कि इसे हर बार निकाल दिया जाए, इसे फिर से लोड करना होगा। जब आपके पास पहले से ही बारूद है तो फिर से लोड करना कानूनी है, लेकिन कुछ भी नहीं करता है। आपके दोनों हाथों से मंदिरों को टैप करके एक रीलोड का प्रतीक बनाया गया था। प्रत्येक खिलाड़ी 0 बारूद के साथ शुरू होता है।
गार्ड : एकमात्र सुरक्षित चाल। यदि आपको रखवाली करते समय गोली मार दी जाती है, तो आप मरते नहीं हैं। आपकी छाती पर अपनी बाहों को पार करके गार्डिंग का प्रतीक था।
आग : अपनी बंदूक आग। सफलतापूर्वक फायर करने के लिए, आपको अंतिम शॉट के बाद पुनः लोड करना होगा। यदि आपका प्रतिद्वंद्वी पुनः लोड कर रहा है, तो आप जीत जाते हैं। यदि वे भी आग लगाते हैं, और आप दोनों के पास बारूद है, तो यह एक ड्रॉ है। यदि वे रखवाली कर रहे हैं, तो आप बारूद को बर्बाद कर रहे हैं। जबकि बारूद के बिना फायरिंग एक कानूनी कदम है, यह कुछ भी नहीं करता है और आपको पुन: लोड करने की तरह कमजोर बनाता है। दूसरे खिलाड़ी की ओर इशारा करके फायरिंग की गई।
यह आरपीएस के समान खेला गया था, जिसमें प्रत्येक खिलाड़ी एक साथ अपनी पसंद को फेंक देता है (हमने एक-दूसरे के साथ ताल में ताल मिलाने के लिए अपने पैरों को दो बार घुमाया, लेकिन यह चुनौती के लिए महत्वपूर्ण नहीं है)।
चुनौती:
आपका काम युद्ध के खेल का परिणाम खोजना है। यह एक फ़ंक्शन या पूर्ण कार्यक्रम हो सकता है।
इनपुट
प्रत्येक खिलाड़ी ने प्रत्येक मोड़ को चुना विकल्प को एक चरित्र / स्ट्रिंग द्वारा दर्शाया जाएगा:
r : पुनः लोड करें
जी : गार्ड
f : आग
इनपुट जोड़े की सूची होगी, इन लाइनों के साथ एक सीमांकित / undelimited स्ट्रिंग, या कुछ और।
पाइथन में एक उदाहरण इनपुट हो सकता है [("r", "g"), ("f", "r")], जिसका अर्थ है कि पहले खिलाड़ी को पुनः लोड किया जाए, और दूसरा खिलाड़ी पहरा दे। दूसरे मोड़ पर, पहला खिलाड़ी आग लगाता है, जबकि दूसरा खिलाड़ी पुनः लोड करता है। खिलाड़ी एक इस खेल को जीतता है। एक ही इनपुट वैकल्पिक के रूप में प्रतिनिधित्व किया जा सकता है "r g f r", "rgfr", "rg fr" "rg-fr"...
आप निम्नलिखित मान सकते हैं:
इनपुट आपके चुने हुए प्रारूप से मेल खाएगा, और यह कि इसमें केवल मान्य वर्ण होंगे।
कोई 100 मोड़ के भीतर मर जाएगा।
हालाँकि आप यह नहीं मान सकते हैं कि जब कोई मर जाता है तो मोड़ समाप्त हो जाते हैं।
उत्पादन
एक मान दर्शाता है कि कौन जीता (या, जो पहले जीता *)। आप चुन सकते हैं कि प्रत्येक परिदृश्य के लिए आउटपुट क्या है, लेकिन निम्नलिखित के लिए खाता होना चाहिए:
खिलाड़ी 1 जीतता है
खिलाड़ी 2 जीत
वे एक दूसरे को मारते हैं (ड्रा)
प्रत्येक परिणाम का एक जिला मान होना चाहिए, और हमेशा प्रत्येक परिदृश्य के लिए समान होना चाहिए।
एक उदाहरण के रूप में: 1जब खिलाड़ी 1 जीतता है, 2जब खिलाड़ी 2 जीतता है, और 0ड्रा की स्थिति में आप आउटपुट कर सकते हैं । आपको तब हमेशा आउटपुट करना चाहिए 1जब खिलाड़ी 1 जीतता है, 2जब खिलाड़ी 2 जीतता है, और 0ड्रा की स्थिति में।
इसे लौटाया जा सकता है, या स्टडआउट में मुद्रित किया जा सकता है। ट्रेलिंग व्हाट्सएप ठीक है।
बस इसलिए यह स्पष्ट है, एक ही परिदृश्य जो ड्रॉ की ओर जाता है यदि दोनों खिलाड़ी आग लगाते हैं, और दोनों में बारूद है।
*इस चुनौती के बाद से, किसी के मरने के बाद भी मोड़ जारी रह सकते हैं, यह संभव है कि 1 से अधिक खिलाड़ी अंततः जीत सकते हैं। आपको यह खोजना होगा कि इनपुट के अनुसार पहले कौन जीता।
टेस्ट मामले ( 1पी 1 जीतता है, 2जब पी 2 जीतता है, और 0ड्रॉ के लिए)
"rg fr" => 1 (P1 shot P2 while they were reloading)
"rg ff" => 1 (They both shot, but only P1 had ammo)
"rr ff" => 0 (Both had ammo and shot each other)
"rr ff rr fg" => 0 (Both had ammo and shot each other. Everything after the first win is ignored)
"rr fg rf" => 2 (P2 shot P1 while they were reloading)
"rf gg rr fg rr fr" => 1
(P2 tried to shoot but didn't have any ammo, then they both guarded, then they both reloaded, then P2 blocked a shot, then they both reloaded again [but P2 still only has 1 ammo!], then P1 shoots P2 while they're reloading.
"rr gf fr rf gg rg ff" => 1
^ Player 1 wins here. The rest to the right has no effect on the output
यह कोड गोल्फ है, इसलिए सबसे छोटी संख्या बाइट्स जीतती है!
ध्यान दें, जैसा कि परीक्षण के मामले दिखाते हैं, आपको "गूंगा" चाल को संभालना होगा। यह पूरी तरह से एक खिलाड़ी के लिए शूट करने का प्रयास करने के लिए मान्य है जब उनके पास बारूद नहीं है, या एक पंक्ति में 2 बदल जाता है (और केवल एक बारूद जमा होता है)।
{"rff","rgf"}?