आपका लक्ष्य वायथॉफ के निम के खेल के लिए एक आदर्श खिलाड़ी लिखना है ।
वीथॉफ के निम के नियम
वीथॉफ का निम एक नियतात्मक दो-खिलाड़ी खेल है जो समान काउंटरों के दो ढेर के साथ खेला जाता है। खिलाड़ी वैकल्पिक रूप से बदल जाते हैं, जिसमें वे इनमें से एक करते हैं:
- पहले ढेर से एक या एक से अधिक काउंटर निकालें
- दूसरे ढेर से एक या अधिक काउंटर निकालें
- पहले ढेर और दूसरे ढेर दोनों से, समान संख्या में काउंटर (एक या अधिक) निकालें।
बेशक, बवासीर नकारात्मक नहीं जा सकते हैं, लेकिन वे कर सकते हैं। 0. जो भी खिलाड़ी अंतिम काउंटर को हटाता है वह गेम जीतता है।
अधिक ज्यामितीय-दिमाग के लिए, यहाँ खेल का एक समान सूत्रीकरण है जिसे आप इस एप्लेट पर खेल सकते हैं । एक एकल रानी क्वार्टर-अनंत शतरंज के कुछ वर्ग पर शुरू होती है जिसका कोने नीचे-बाएँ में होता है। खिलाड़ी वैकल्पिक रूप से रानी को आगे बढ़ाते हैं, जो शतरंज की रानी की तरह चलती है लेकिन तीन दिशाओं तक सीमित रहती है:
- नीचे
- बाएं
- तिरछे नीचे और बाएँ
जो भी रानी को कोने में ले जाता है वह जीत जाता है।
रानी के निर्देशांक (कोने के साथ (0,0)
) को संबंधित बवासीर के आकार से जोड़कर, यह देखना आसान है कि दोनों खेल समान हैं।
सही खेल
(यदि आप सही खेल और जीतने की चाल की धारणाओं से परिचित हों तो आप इसे छोड़ सकते हैं।)
चूंकि वायथॉफ का निम एक परिमित और नियतात्मक खेल है, इसलिए इसमें सही नाटक की धारणा है । एक पूर्ण खिलाड़ी एक ऐसी रणनीति है जो हमेशा सैद्धांतिक रूप से जीते गए स्थान से जीतेगी, जिसका अर्थ ऐसी स्थिति है जिसमें ऐसी रणनीति मौजूद हो जो जीत की गारंटी दे।
एक विजेता रणनीति होने के लिए, यह हमेशा उस खिलाड़ी के लिए एक सैद्धांतिक जीतने की स्थिति में जाने के लिए आगे बढ़ता है, जो सिर्फ स्थानांतरित हो गया है, और इस प्रकार खिलाड़ी आगे नहीं जा रहा है। इनमें से पहली जीत की स्थिति (जिसे ठंडे स्थान भी कहा जाता है ) हैं (0,0), (1,2), (2,1), (3,5), (5,3)
। विकिपीडिया लेख देखेंवाइथॉफ की निम के लिए एक जीत की रणनीति खोजने के लिए एक एल्गोरिथ्म की व्याख्या के लिए , साथ ही साथ जीत की स्थिति उत्पन्न करने के लिए एक सूत्र।
कार्यक्रम की आवश्यकताएं
एक प्रोग्राम लिखें या फ़ंक्शन इनपुट के रूप में एक स्थिति लेता है और उस चाल के बाद स्थिति के रूप में एक विजेता चाल को आउटपुट करता है। सबसे कम बाइट्स जीतता है।
यदि कोई जीत की चाल मौजूद नहीं है, यानी, स्थिति एक सैद्धांतिक नुकसान है, तो आपके कार्यक्रम को संकेत देना चाहिए।
आपका कार्यक्रम उचित समय के भीतर चलना चाहिए। तो, एक घातीय पुनरावर्ती गेम ट्री खोज पर्याप्त नहीं होगी। यदि आप किसी रणनीति को कठिन बनाना चाहते हैं, तो यह ठीक है।
इनपुट
(i,j)
गैर-ऋणात्मक संख्याओं की एक जोड़ी जो ढेर के आकार का प्रतिनिधित्व करती है, प्रत्येक में सबसे अधिक 99
। यह दो नंबर हो सकता है, एक ट्यूपल, एक सूची, या जो भी कंटेनर आप पसंद करते हैं।
उत्पादन
अपनी चाल के बाद स्थिति को प्रिंट करें या आउटपुट करें, फिर से दो नंबर या एक कंटेनर। यह एक जीतने की स्थिति के लिए एक कानूनी कदम होना चाहिए। यदि इस तरह के कई कदम हैं, तो कोई भी ठीक है, लेकिन केवल एक ही है।
यदि कोई जीतने की चाल नहीं है, तो आपको आउटपुट में यह इंगित करना होगा। कोई भी आउटपुट False
, जैसे , None
0, या (-1,-1)
करेगा, जब तक कि यह कानूनी स्थिति नहीं है, और हर खोने वाले इनपुट के लिए समान है।
उदाहरण चलता है
f(5,0) = (0,0)
f(2,2) = (1,2) # Or (2,1) or (0,0)
f(1,2) = False
f(13,9) = (13,8) # Or (10,6)
f(10,6) = False
f(5,10) = (5,3)
f(25,30) = (8,13)