यह चुनौती अपनी पसंद की भाषा में एक मिनैक्सैक्स फ़ंक्शन लिखने के लिए है , जो वर्तमान बोर्ड राज्य को दिए गए टिक-टैक-टो के एनएक्सएन गेम में अगले सबसे अच्छे कदम को आउटपुट करने के लिए है । बोर्ड इनपुट को एक मैट्रिक्स, 2 डी संग्रह या किसी अन्य चीज के रूप में स्वीकार किया जा सकता है जो आपको समझ में आता है, लेकिन नियमों का पालन करता है । आउटपुट जो भी वर्तमान में चालू हो , उसके लिए सबसे अच्छा कदम है , जहां एक्स को शुरू करने के लिए माना जाता है ।
मिनिमैक्स एल्गोरिथम पर त्वरित पृष्ठभूमि
मिनिमैक्स एल्गोरिथ्म का मूल विचार डीएजी के रूप में सभी संभावित परिणामों की गणना करना है, फिर उन्हें उस लाभ से वजन करना है जो चाल के अनुक्रम खिलाड़ी को किया है, पहले किए गए कदम से कुंजीबद्ध। सभी संभावित परिणाम तब पहली चाल से 'बकेटेड' होते हैं, और सभी परिणामों के योग के आधार पर बनाए जाते हैं (एक नुकसान के लिए -1, एक टाई के लिए 0 और एक जीत के लिए 1)। उन कार्यान्वयनों में जिन्हें खेलने के लिए कई खिलाड़ियों की आवश्यकता होती है, आप खिलाड़ी द्वारा सभी संभव कदमों की गणना करते हैं, और विरोधियों द्वारा सभी संभावित प्रतिक्रियाओं को भी। उदाहरण के लिए, टिक-टैक-टो के एक गेम में (पहली चाल के बाद) 8 संभावित पहली चालें हैं जो आप कर सकते हैं, और वे सभी समान लग सकते हैं जब केवल अगले मोड़ का विश्लेषण किया जाता है। लेकिन एक अंतिम परिणाम में परिणाम है कि चाल के प्रत्येक संभव सेट के लिए सभी संभावित परिणामों के माध्यम से पुनरावृत्ति करके और उन्हें सभी ऊपर संक्षेप,
टिक-टैक-टो के संदर्भ में मिनी-मैक्स एल्गोरिथ्म के एक बेहतर, अधिक गहराई और प्रासंगिक सारांश के लिए, यहां अधिक पढ़ें: http://neverstopbuilding.com/minimax
XKCD (केवल 3x3 समाधान)
नियम
- किसी भी भाषा का उपयोग किया जा सकता है, लेकिन किसी भी बाहरी न्यूनतम पुस्तकालयों की अनुमति नहीं है।
- आउटपुट एक समन्वय (0-n, 0-n) या एक संख्या (1-n * n) सबसे अच्छा अगले कदम का संकेत हो सकता है।
- इसके अलावा, आपको यह पहचानने में सक्षम होना चाहिए कि जीत के बजाय सबसे अच्छा मामला परिदृश्य एक नुकसान या एक टाई है।
- जिस तरह से आप एक नुकसान या एक टाई को दर्शाते हैं, एक बार फिर, आपके ऊपर है।
- इनपुट को पारंपरिक एक्स और ओ का उपयोग करना चाहिए, और आपको पहले एक्स चाल चलना चाहिए; रिक्त स्थानों को किसी भी चीज़ से दर्शाया जा सकता है।
- आप मान सकते हैं कि आपके प्रोग्राम में आने वाले किसी भी इनपुट में n O's और n + 1 X है, दूसरे शब्दों में आप मान सकते हैं कि आपको एक अच्छी तरह से गठित बोर्ड मिल रहा है।
- बोर्ड की वर्तमान स्थिति आपके कार्यक्रम का एकमात्र इनपुट होना चाहिए, यदि आप पुनरावृत्ति का उपयोग कर रहे हैं, तो इनपुट आवश्यकताओं को सुविधाजनक बनाने के लिए सहायक विधियाँ बनाई जानी चाहिए। स्पष्टीकरण के लिए /codegolf//a/92851/59376 देखें ।
- 10> = n> = 1 के किसी भी मूल्य का समर्थन किया जाना चाहिए; यदि आपका प्रोग्राम n> 10 के लिए "टाइम आउट" है, तो मुझे यह स्वीकार्य लगता है, साथ ही कुछ भाषाओं में प्रसंस्करण शक्ति काफी कम है (विशेषकर वेब-फेसिंग कंसोल का उपयोग करके)।
आंकना
- यह कोड-गोल्फ है, इसलिए कार्यक्रम की सबसे कम बाइट-गिनती जीतती है और मानक कमियां सार्वभौमिक रूप से अस्वीकृत हो जाती हैं।
- एक टाई के मामले में, सबसे बड़ा 'एन' का समर्थन करने वाला कार्यक्रम जीत जाएगा।
उदाहरण इनपुट
2x2
[[X,O]
[-,-]]
आउटपुट: 2 या [0,1] (3 या [1,1] भी यकीनन सही होगा) (स्थान के संकेत के कुछ रूप, जब तक आप आसानी से आपके द्वारा उपयोग किए गए प्रारूप को आसानी से समझा सकते हैं)
3x3
[[X,O,X]
[O,X,-]
[-,-,-]]
आउटपुट: -1 (हानि)
एक बार फिर से आप चाहते हैं कि किसी भी इनपुट प्रारूप की अनुमति दी जाए, लेकिन एक्स और ओ का उपयोग किया जाना चाहिए, प्रदान किए गए उदाहरण केवल उस प्रारूप में बाधा डालने के लिए नहीं थे।