मेटा टिक-टैक-टो का खेल खेलते हैं!
यह मेटा टिक-टैक-टू का एक पहाड़ी टूर्नामेंट है। मेटा टिक-टैक-टो के नियम इस प्रकार हैं:
टिक-टैक-टो के सभी नियमित नियम लागू होते हैं।
एक मास्टर बोर्ड बनाने के लिए नौ बोर्ड की व्यवस्था है। इस तरह:
0|1|2 || 0|1|2 || 0|1|2 ----- || ----- || ----- 3|4|5 || 3|4|5 || 3|4|5 ----- || ----- || ----- 6|7|8 || 6|7|8 || 6|7|8 ======================== 0|1|2 || 0|1|2 || 0|1|2 ----- || ----- || ----- 3|4|5 || 3|4|5 || 3|4|5 ----- || ----- || ----- 6|7|8 || 6|7|8 || 6|7|8 ======================== 0|1|2 || 0|1|2 || 0|1|2 ----- || ----- || ----- 3|4|5 || 3|4|5 || 3|4|5 ----- || ----- || ----- 6|7|8 || 6|7|8 || 6|7|8
बोर्ड 0 शीर्ष बाएं बोर्ड को संदर्भित करता है, बोर्ड 1 शीर्ष मध्य बोर्ड को संदर्भित करता है ... इस तरह
0|1|2 ----- 3|4|5 ----- 6|7|8
यदि मैं बोर्ड 3, टाइल 4 कहता हूं, तो इसका मतलब है कि मध्य बाईं ओर बोर्ड की केंद्र टाइल।
आपको केवल एक छोटे बोर्ड में जाने की अनुमति है।
यदि आप एक छोटे बोर्ड को जीतते हैं, तो वह पूरा बोर्ड आपकी टाइल के रूप में गिना जाता है।
यदि बॉट के जीतने से पहले उनमें से एक बोर्ड भर जाता है, तो इसे नोबॉडी टाइल के रूप में गिना जाता है।
जो भी मास्टर बोर्ड जीतता है वह जीतता है!
हालांकि, एक महत्वपूर्ण मोड़ है। मान लें कि मैं बोर्ड 7, टाइल 2 में जाता हूं। इसका मतलब है कि आपकी बारी है, आप केवल बोर्ड 2 में जा सकते हैं। फिर मान लें कि आप बोर्ड 2, टाइल 5 में चलते हैं। अब अपनी बारी पर, मैं केवल बोर्ड 5 में जा सकता हूं । मान लीजिए कि बोर्ड 1 भरा हुआ है। (अब और धब्बे नहीं बचे हैं, या हम में से एक ने पहले ही बोर्ड 1 जीत लिया है) अब अगर मैं बोर्ड 5, टाइल 1 में जाता हूं, तो आप जो भी बोर्ड चाहते हैं, उसमें जा सकते हैं।
इन नियमों को माना जा सकता है:
- आपको पिछले खिलाड़ी द्वारा खेली गई स्थिति के अनुसार बोर्ड में खेलना चाहिए।
- यदि X बोर्ड 2, टाइल 5 में खेलता है; ओ को बोर्ड 5 में खेलना चाहिए
- यदि लक्ष्य बोर्ड भरा हुआ है (एक टाई) या पहले से ही एक विजेता है, तो अगला कदम असंवैधानिक है।
- एक विजेता के साथ एक बोर्ड को एक असंवैधानिक कदम पर भी नहीं खेला जा सकता है।
यदि यह थोड़ा भ्रमित करने वाला है, तो आप इसे ऑनलाइन यहाँ आज़मा सकते हैं। ("पहली टाइल जीत" से "एक पंक्ति में 3 टाइलें" पर स्विच करना सुनिश्चित करें)
अब यहाँ चुनौती के नियम हैं।
आपको एक बॉट लिखना होगा जो इस गेम को खेलता है।
बॉट 1 एक्स है, और इसे पहले जाना है। इसे इन कमांड लाइन तर्कों (कोष्ठक में सामान के बिना) के साथ कहा जाएगा:
X (whose turn) --------- (board 0) --------- (board 1) --------- (board 2) --------- (board 3) --------- (board 4) --------- (board 5) --------- (board 6) --------- (board 7) --------- (board 8) --------- (master board) xx (last move)
पहला चरित्र दर्शाता है कि बॉट कौन है। इस स्थिति में, बॉट 1 एक्स के रूप में खेलता है। अगली 9 लाइनें 9 बोर्डों को संदर्भित करती हैं। 11 वीं पंक्ति मास्टर बोर्ड को संदर्भित करती है। "Xx" अंतिम चाल है। अब, bot1 को 0 और 8. के बीच दो नंबर प्रिंट करने चाहिए। नंबर 1 वह बोर्ड है जिसमें आपका bot चल रहा है और नंबर 2 उक्त बोर्ड में टाइल है। नियंत्रक इस कदम का ट्रैक रखेगा। मान लीजिए कि बॉट 1 प्रिंट 38 है। अब बोर्ड इस तरह दिखेगा:
| | || | | || | | ----- || ----- || ----- | | || | | || | | ----- || ----- || ----- | | || | | || | | ========================== | | || | | || | | ----- || ----- || ----- | | || | | || | | ----- || ----- || ----- | |X || | | || | | ========================== | | || | | || | | ----- || ----- || ----- | | || | | || | | ----- || ----- || ----- | | || | | || | |
और bot2 इन तर्कों के साथ बुलाया जाएगा:
O --------- --------- --------- --------X --------- --------- --------- --------- --------- --------- 38
अब बॉट 2 को बोर्ड 8 में ले जाना चाहिए (क्योंकि बॉट 1 ने टाइल 3 में एक एक्स रखा है)। मान लें कि bot2 प्रिंट 84 है। अब बोर्ड इस तरह दिखता है।
| | || | | || | | ----- || ----- || ----- | | || | | || | | ----- || ----- || ----- | | || | | || | | ========================== | | || | | || | | ----- || ----- || ----- | | || | | || | | ----- || ----- || ----- | |X || | | || | | ========================== | | || | | || | | ----- || ----- || ----- | | || | | || |O| ----- || ----- || ----- | | || | | || | |
अब bot1 को इन तर्कों के साथ बुलाया जा रहा है:
X --------- --------- --------- --------X --------- --------- --------- --------- ----0---- --------- 84
अब bot1 को बोर्ड 4 में ले जाना चाहिए। हालाँकि, bot1 एक शरारती छोटा बॉट है, और बोर्ड 3 में जाने का फैसला करता है। यह '30' प्रिंट करता है। बोर्ड बिल्कुल नहीं बदलता है। मास्टर बॉट इस पर नज़र रखता है। अब bot2 को इन तर्कों के साथ बुलाया जाएगा:
O --------- --------- --------- --------X --------- --------- --------- --------- ----0---- --------- xx
अब बॉट 2 कहीं भी जा सकता है (38 और 84 को छोड़कर, निश्चित रूप से)। यह तब तक जारी रहता है जब तक कि कोई एक पंक्ति में 3 मास्टर बोर्ड नहीं जीतता। फिर, दूसरा मैचअप होता है, जहां बॉट 2 एक्स होता है और पहले जाना होता है।
यह तब तक दोहराता है जब तक कि हर एक बॉट ने हर दूसरे बॉट को नहीं खेला।
स्कोरिंग
स्कोरिंग इस तरह काम करता है:
प्रत्येक मैच के विजेता को 100 + number of open spots
अंक मिलते हैं। इस तरह, यह अधिक मूल्यवान है अगर आपका बॉट जल्दी से जीतता है। जब भी आपका बॉट अमान्य कदम उठाता है, वह 1 अंक खो देता है। यदि 250 राउंड के बाद, न तो बॉट जीता है, प्रत्येक बॉट 10 अंक खो देता है, और हम अगले दौर में जाते हैं।
सब कुछ एक निर्देशिका में रखा जाएगा
नियंत्रक बॉट। यह एक C ++ प्रोग्राम है जो मैंने लिखा है। आप यहां कंट्रोलर बॉट सोर्स कोड देख सकते हैं। कृपया मुझे बताएं कि क्या आपको ऐसा कुछ दिखाई देता है जो नियंत्रक के साथ सही नहीं है।
इस फ़ाइल नाम की एक टेक्स्ट फ़ाइल
instructions.txt
कुछ इस तरह दिखाई देगी:[Total number of bots that are competing] [bot1Name] [bot1 command to run] [bot2Name] [bot2 command to run] ...
प्रत्येक बॉट के लिए एक फ़ोल्डर। यह फ़ोल्डर आपके प्रोग्राम (चाहे वह स्क्रिप्ट या बाइनरी हो) और वन टेक्स्ट फ़ाइल को रखेगा,
data.txt
जिसे आपका बॉट जो चाहे पढ़ और लिख सकता है।
तकनीकी विनिर्देश और नियम स्पष्टीकरण
कोई भी बॉट जो उसके अंदर से कहीं से भी कुछ पढ़ने / लिखने का प्रयास करता है, उसे गेम से हटा दिया जाएगा।
आपका प्रोग्राम योसमाइट चलाने वाली मैकबुक पर चलने में सक्षम होना चाहिए। वर्तमान में समर्थित भाषाएं पायथन (2.7.9 और 3.4.2), C / C ++, ऑब्जेक्टिव-सी, पर्ल, रूबी, बैश, PHP, जावा, C #, जावास्क्रिप्ट और हास्केल हैं। और भी बहुत कुछ हैं, लेकिन ये वही हैं जो मैं अभी सोच सकता हूं। समय बढ़ने पर मैं और जोड़ूंगा। यदि आप किसी विशिष्ट भाषा में प्रतिस्पर्धा करना चाहते हैं, तो मुझे संदेश या टिप्पणी दें, और यदि संभव हो तो मैं इसे सूची में जोड़ दूंगा।
यदि कोई बोर्ड जीता है, लेकिन अभी भी जगह है, तो आप अभी भी खुले स्थानों में से एक में नहीं जा सकते।
ध्यान दें कि आपके सबमिशन की कार्यशील निर्देशिका वह निर्देशिका होगी जिसमें कंट्रोलर और अन्य सभी बॉट शामिल होंगे, न कि वह निर्देशिका जिसमें आपका बॉट शामिल है।
कृपया अपने नियंत्रक बॉट कोड के साथ पोस्ट करें (यदि लागू हो) संकलन करने और अपने बॉट को चलाने के लिए सही कमांड। इसमें से अधिकांश ओएस एक्स टर्मिनल से किया जाएगा, जो काफी हद तक एक लिनक्स टर्मिनल के समान है।
बॉट को एक सेकंड के अंदर पूरा करना होगा। दुर्भाग्य से, मैं नियंत्रक बॉट में टाइमर जोड़ने के लिए पर्याप्त सक्षम नहीं हूं। हालाँकि, मैं मैन्युअल रूप से बॉट्स को समय दूंगा।
परिणाम!
खैर, मैं सही था। मैं मास्टर बोडर भरा हुआ है यह देखने के लिए नियंत्रक बॉट की जांच करना भूल गया। यदि मास्टरबोर्ड भरा हुआ है, तो हर कदम अमान्य है, लेकिन यह बॉट्स को कॉल करना जारी रखता है, जो संभवतः इसलिए कई अमान्य कदम थे। मैंने इसे अब ठीक कर दिया है। यहां सभी बॉट्स के सबसे वर्तमान संस्करण के साथ आधिकारिक परिणाम हैं।
Bot 1, goodRandBot, has 1 wins and made 0 illegal moves, for a total of 133 points.
Bot 2, naiveBot, has 3 wins and made 48 illegal moves, for a total of 361 points.
Bot 3, depthBot, has 5 wins and made 0 illegal moves, for a total of 664 points.
Bot 4, middleBot, has 1 wins and made 20 illegal moves, for a total of 114 points.
With 4 bots, This program took 477.471 seconds to finish.
डेप्थ बॉट राज करने वाला चैंपियन है! कम से कम, अभी के लिए।
XXX000---
प्रेषित कैसे किया जाता है? या यह है कि 'ओ के जीतने के बावजूद कोई भी इसे प्राप्त नहीं करता है'?