यहाँ एक दिलचस्प समस्या है जो मैंने दूसरे दिन के बारे में सोचा, जिसमें कोड के अन्य बिट्स के खिलाफ प्रतिस्पर्धा करने वाले कोड शामिल हैं, न केवल एक संपत्ति में जो कोड में है, बल्कि कोड के उन अन्य बिट्स के खिलाफ एक गेम खेलकर।
आपका कार्य एक ऐसे कार्यक्रम का निर्माण करना है जो एक गो बोर्ड की वर्तमान स्थिति लेता है, और यह निर्धारित करता है कि क्या बनाना है या पास करना है।
आपका कार्यक्रम निम्नलिखित को इनपुट के रूप में स्वीकार करेगा:
19 लाइनें, प्रत्येक 19 वर्णों के साथ, वर्तमान में गो बोर्ड पर टुकड़ों का प्रतिनिधित्व करती है। एक वर्ण
0
एक खाली वर्ग का प्रतिनिधित्व करता है,1
काला है, और2
सफेद है।प्रत्येक खिलाड़ी के पास कैदी के टुकड़ों की संख्या का प्रतिनिधित्व करने वाले दो नंबर (काले, फिर सफेद) हैं।
एक संख्या जिसका प्रतिनिधित्व यह मोड़ (काला या सफेद) ले जाने के लिए है। जैसा कि ऊपर,
1
काला है, और2
सफेद है।
और निम्न में से एक आउटपुट:
निर्देशांक की एक जोड़ी निर्देशांक का
a b
प्रतिनिधित्व करती है जिस पर स्थानांतरित करना है।1 1
शीर्ष-बाएँ वर्ग है, और पहली और दूसरी संख्या क्रमशः नीचे और दाईं ओर जाने का प्रतिनिधित्व करती है।स्ट्रिंग
pass
, जो पास करने के लिए एक चाल का प्रतिनिधित्व करता है।
उदाहरण के लिए, प्रोग्राम को निम्नलिखित इनपुट प्राप्त हो सकते हैं:
0000000000000000000
0000000000000000000
0000000000000000000
0001000000000002000
0000000000000000000
0000000000000000000
0001210000000000000
0000100000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0002000000000001000
0000000000000000000
0000000000000000000
0000000000000000000
0 0 1
जो एक खेल का प्रतिनिधित्व करता है जहां केवल कुछ चालें खेली गई हैं।
फिर कार्यक्रम आउटपुट हो सकता है 6 5
, जिसका अर्थ है "ऊपर से 6 वें बिंदु पर एक काला पत्थर और बाईं ओर से 5 वां पत्थर"। यह सफेद पत्थर पर कब्जा करेगा 7 5
। बोर्ड की स्थिति तब बदल जाएगी:
0000000000000000000
0000000000000000000
0000000000000000000
0001000000000002000
0000000000000000000
0000100000000000000
0001010000000000000
0000100000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0002000000000001000
0000000000000000000
0000000000000000000
0000000000000000000
1 0 2
(ध्यान दें कि यद्यपि एक सफेद पत्थर पर कब्जा कर लिया गया था, यह काले रंग के कैदी के रूप में गिना जाता है।)
आपके कोड को अतिरिक्त रूप से निम्नलिखित गुणों को पूरा करना होगा:
यदि आपके प्रोग्राम को समान इनपुट स्थिति दी गई है, तो उसे हमेशा उसी आउटपुट का उत्पादन करना चाहिए। यह गो एआई का दृढ़ संकल्प है। यह एक यादृच्छिक घटक नहीं होना चाहिए।
आपके कार्यक्रम को निर्धारित करने के लिए लगभग 60 सेकंड से अधिक नहीं लेना चाहिए कि क्या बनाना है। कंप्यूटिंग शक्ति में बदलाव के कारण इस नियम को कड़ाई से लागू नहीं किया जाएगा, लेकिन इसे उचित मात्रा में चलना चाहिए।
आपके प्रोग्राम का सोर्स कोड कुल 1 मेगाबाइट (1,048,576 बाइट्स) से अधिक नहीं होना चाहिए।
आपके कार्यक्रम को हमेशा कानूनी कदम उठाने चाहिए। आपका कार्यक्रम एक ऐसी जगह नहीं बना सकता जहां एक पत्थर पहले से मौजूद है, और एक टुकड़ा नहीं रख सकता है जिसके परिणामस्वरूप अपने स्वयं के पत्थरों के एक समूह पर कब्जा कर लिया जाएगा। (इस चुनौती के प्रयोजनों के लिए नियमों का एक अपवाद यह है कि एक कार्यक्रम को एक स्थिति बनाने की अनुमति है जो मूल रूप से वहां थी - क्योंकि यह केवल एक बोर्ड की वर्तमान स्थिति दी गई है, यह संग्रहीत करने की अपेक्षा नहीं की जा सकती है इससे पहले।)
आपका सबमिशन तब गो-गेम में, जहाँ बोर्ड की स्थिति खाली होने के बाद शुरू होती है, और अन्य प्रत्येक कार्यक्रम में बोर्ड की स्थिति को देखते हुए और एक कदम रखते हुए, सभी अन्य सबमिशन के खिलाफ एक ऑल-प्ले-ऑल-टूर्नामेंट में खेलेंगे। ।
सबमिशन की प्रत्येक जोड़ी दो राउंड खेलेगी - एक राउंड प्रत्येक खिलाड़ी के काले होने के साथ। क्योंकि इस समस्या में AI पूरी तरह से नियतात्मक हैं, एक ही AI के दो एक साथ खेलने के परिणामस्वरूप हमेशा एक ही गेम खेला जाएगा।
एक जीत के लिए शर्तें इस प्रकार हैं:
यदि आपका कार्यक्रम गेम के अंत में खेलता है, तो विजेता को निर्धारित करने के लिए गो के चीनी स्कोरिंग नियमों का उपयोग किया जाएगा। कोई कोमी नहीं लगाया जाएगा।
यदि आपका प्रोग्राम इस बिंदु पर खेलता है कि पहले की स्थिति तक पहुँच गया है, तो इस तरह एक अनंत लूप का कारण बनता है, दो कार्यक्रमों को बांधने की घोषणा की जाएगी।
आपका सबमिशन कितने अंकों का होगा, यह अन्य सबमिशन के मुकाबले स्कोर करता है। एक जीत 1 अंक के लायक है, और एक टाई आधा अंक के लायक है। सबसे अधिक अंकों के साथ प्रस्तुत करने वाला समग्र विजेता है।
यह एक पहाड़ी चुनौती है, जिसमें कोई भी किसी भी समय एक नई प्रविष्टि पोस्ट कर सकता है और ऐसा होने पर समय-समय पर स्टैंडों का पुनर्मूल्यांकन किया जाएगा।