शतरंज इंजन बनाना, मशीन सीखना बनाम पारंपरिक इंजन?


17

मैं एक उत्साही शतरंज खिलाड़ी और कंप्यूटर प्रोग्रामर दोनों हूँ। मैं कहूंगा कि शतरंज खेलना और प्रोग्रामिंग दो चीजें हैं जो मैं सबसे ज्यादा समय बिताता हूं। स्वाभाविक रूप से, मैं अपना खुद का इंजन बनाना चाहता हूं और आखिरकार लिचेस बॉट।

पिछले साल स्टॉकफिश के खिलाफ अल्फ़ाज़ेरो के कुचलने के प्रदर्शन के मद्देनज़र, मैं विचार कर रहा हूं कि क्या मुझे मशीन लर्निंग (कुछ प्रकार के तंत्रिका नेटवर्क, संभवत: टेंसरफ़्लो का उपयोग करके) या पारंपरिक, कठोर कोडेड ह्यूरिस्टिक्स के साथ इस इंजन का निर्माण करना चाहिए।

मैं अन्य प्रकार के हार्ड-कोडिंग की तुलना में तंत्रिका नेटवर्क से कम परिचित हूं। फिर भी, मेरे लिए तंत्रिका नेटवर्क के साथ काम करना सीखना एक अच्छा तरीका हो सकता है।

एक और बात मैं इस पर विचार कर रहा हूं कि क्या यह महत्वपूर्ण है कि मैं इंजन को कोड करने के लिए किस भाषा का उपयोग करता हूं। मुझे पता है कि कई शतरंज इंजन सी ++ का उपयोग करते हैं, जो मैंने पहले कभी नहीं इस्तेमाल किया है। मैंने अन्य सी-आधारित भाषाओं का उपयोग किया है जो ज्यादातर समान वाक्यविन्यास के साथ एक ही काम करती हैं। मैं स्विफ्ट और जावास्क्रिप्ट से सबसे ज्यादा परिचित हूं, लेकिन पायथन से भी परिचित हूं और महसूस करता हूं कि यह मेरे लिए ट्रिक कर सकता है।

तो, सबसे मजबूत शतरंज इंजन बनाने के मामले में, क्या मुझे तंत्रिका नेटवर्क या हार्ड-कोडेड जाना चाहिए?


4
वे नए एआई इंजन की कुंजी एनएन इतना नहीं है जितना कि सुदृढीकरण सीखने। आरएल एक जटिल विषय है, लेकिन यूसीएल में डेविड सिल्वर के आरएल व्याख्यान (अपनी वेबसाइट पर स्लाइड और YouTube पर व्याख्यान) जैसे ऑनलाइन अच्छे संसाधन मौजूद हैं। उन्होंने दीपमिन्द के साथ काम किया और पारंपरिक रूप से अंतिम व्याख्यान में अल्फ़ागो को कवर किया। आप शायद एक दिलचस्प एआई विकसित कर सकते हैं। NN बिना हार्ड कोडेड हेयुरिस्टिक्स और आरएल का उपयोग करते हुए इंजन। इसी तरह से अल्फ़ाज़ो की शुरुआत हुई है!
asac

यह शतरंज नहीं है, लेकिन हालिया पुस्तक "डीप लर्निंग एंड द गेम गो" से पता चलता है कि गेम इंजन के लिए एनएन का उपयोग कैसे करें। अल्फा-गो और अल्फा-जीरो हुड के नीचे समान हैं।
जॉन कोलमैन

आपके पायथन अनुभव को देखते हुए यह निम
डैरेन एच

यदि आप NN पर जाना चाहते हैं, तो यह दिलचस्प है: arxiv.org/abs/1509.01549 github पर कोड भी है :)
चींटी

@ ध्यान दें कि जिराफ़ शीर्ष इंजनों की तुलना में बहुत मजबूत नहीं था। (~ 2800 एलो)
ऑस्कर स्मिथ

जवाबों:


8

पहला कदम: अपने लक्ष्यों / कारणों को परिभाषित करें

मुझे लगता है कि यह प्रमुख कारक है। इनमें से कौन आपको सबसे अच्छा लगता है? ( केवल एक को चुनें )

  1. आप एक मजेदार, चुनौतीपूर्ण कोडिंग कार्य का आनंद लेना चाहते हैं
  2. आप एक बहुत अच्छा शतरंज इंजन बनाना चाहते हैं
  3. आप जानना चाहते हैं कि शतरंज के इंजन कैसे काम करते हैं
  4. आप कोडिंग कौशल सीखना / अभ्यास करना चाहते हैं
  5. आप कंप्यूटर विज्ञान अवधारणाओं / सिद्धांत को सीखना / लागू करना चाहते हैं (जैसे मशीन सीखना)
  6. (अन्य)

IMO 2 के अलावा किसी भी चीज़ के लिए "सिक्का उछालना" ठीक है। अन्य सभी के लिए, आप अपने लक्ष्य को पूरा करेंगे चाहे आप ML या हार्ड-कोडिंग चुनें। हालाँकि आप शायद यह तय करने में मदद करने के विकल्पों के बीच तुलना करना चाहते हैं।

हार्ड-कोडिंग के लिए मामला

शतरंज खेलना (एक इंसान के रूप में) में तार्किक सोच शामिल है। आप संभावित कार्यों के स्थान का पता लगाते हैं जो आप और प्रतिद्वंद्वी ले सकते हैं। इसने खेल सिद्धांत नामक एक क्षेत्र को जन्म दिया है जिसमें सामान्य रूप से खेल का विश्लेषण करने के लिए सैद्धांतिक रूपरेखाएं हैं।

अगर आपको विवरण के साथ काम करने और चीजों के बारे में विशिष्ट और तर्कपूर्ण होने में मजा आता है तो यह आपके लिए अच्छा काम कर सकता है। इसकी तुलना में, मशीन लर्निंग में बहुत अधिक "ब्लैक बॉक्स" एल्गोरिदम शामिल हैं जो फजी और अपारदर्शी हैं। तुम नहीं जानते कि वास्तव में क्या चल रहा है।

इसके अलावा, मुझे लगता है कि अगर आप मशीन सीखने के बजाय हार्ड-कोडिंग मार्ग पर जाते हैं, तो आपके पास एक आसान समय होगा "इसे अपने दम पर समझ लेना"। कम कॉपी-पेस्ट करने वाला सामान जिसे आप पूरी तरह से नहीं समझते हैं।

मशीन सीखने का मामला

यह एक रचना को जन्म देने और इसे स्वयं के जीवन को देखने के लिए रोमांचक हो सकता है। हालांकि हार्ड-कोडिंग सभी सटीक और विवरण के बारे में है, मशीन सीखना लचीला है। कुछ न्यूरॉन्स को हटा दें और परिणाम संभवतः समान होगा।

हार्ड-कोडिंग शतरंज के अध्ययन के बारे में है। मशीन लर्निंग उस प्राणी के अध्ययन के बारे में है जिसे आपने बनाया है।

और मशीन लर्निंग, ज़ाहिर है, एक बहुत ही गर्म विषय है।

हार्ड-कोडेड के लिए भाषा विकल्प

मुझे यकीन नहीं है कि आप "अन्य सी-आधारित भाषाओं" से क्या मतलब है। C ++ केवल मुख्य धारा की भाषा है जो C की तरह कुछ भी है। C / C ++ का लाभ यह है कि वे तेज़ हैं । हालांकि अन्य भाषाओं ने वर्षों में पकड़ा है, सी ++ अभी भी उन्हें अपने पैसे के लिए एक रन देता है।

C ++ आसान नहीं है। आपको रूस्ट, गोलंग या स्विफ्ट जैसी अधिक आधुनिक संकलित भाषाओं में शानदार प्रदर्शन मिलेगा। लेकिन यह बहुत बुरा नहीं होना चाहिए यदि आप एक JIT भाषा के लिए जाते हैं। यानी CPython दुभाषिया का उपयोग न करें ; IronPython या Jython, या Node, या C # या Java का उपयोग करें।

GPU प्रोग्रामिंग के लिए एक अलग दृष्टिकोण की आवश्यकता होती है और मैं इस बिंदु पर इसके खिलाफ सलाह दूंगा।

मशीन सीखने के लिए भाषा विकल्प

TensorFlow के साथ समस्या यह है कि यह बहुत निम्न स्तर का है। यह मशीन लर्निंग के लिए समर्पित एक इंटरफेस की तुलना में संख्या-क्रंचिंग एल्गोरिदम (जो समानांतर हार्डवेयर की खेती की जा सकती है) लिखने के बारे में अधिक है।

बेशक, यह एक महान सीखने का अनुभव हो सकता है! और निश्चित रूप से आज बहुत सार्थक सीखने योग्य है। हालांकि, आप केरस या प्योरोच के साथ शुरू करना चाहते हैं।


1
यह एक अभूतपूर्व प्रतिक्रिया है, वास्तव में मेरे द्वारा उल्लिखित सभी बिंदुओं को हिट करता है। यह कहना कठिन है कि वास्तव में मैं एक इंजन क्यों बनाना चाहता हूं। वास्तविक रूप से, मुझे संभावना है कि स्टॉकफिश, कोमोडो और लीला (मैं केवल एक कॉलेज का छात्र ही हूं) की पसंद के साथ प्रतिस्पर्धा नहीं करूंगा। फिर भी, मेरे काम को अन्य इंजनों के मुकाबले पैर की अंगुली तक देखना मज़ेदार होगा और हर बार कुचला नहीं जाएगा। यहां तक ​​कि अगर मेरा प्राथमिक तर्क एक मजबूत इंजन बनाना है, तो मैं संभवतः एक नई प्रोग्रामिंग भाषा सीखूंगा और इंजन बनाने के साइड प्रोडक्ट के रूप में अपने शतरंज के ज्ञान में सुधार करूंगा।
डेविड चोपिन

1
मुझे लगता है कि मैं जितना कुछ कर सकता हूं, उससे कहीं अधिक मुझे लगता है कि मैं दीर्घावधि के दौरान कुछ भी बना सकता हूं, पोषण कर सकता हूं। मैं एक परियोजना भी चाहता हूं, जो मुझे बताएगी कि मेरा कोड कितना अच्छा है (जीत / ड्रा / नुकसान, ईएलओ, आदि)।
डेविड चोपिन

1
यह एक बहुत ही दिलचस्प जवाब है, लेकिन क्या आप गंभीर रूप से प्रदर्शन की चिंताओं के लिए कोडेथन पर नोड की सिफारिश कर रहे हैं?
एवपोक ऑक्ट

> "सी ++ केवल मुख्य धारा की भाषा है जो सी की तरह कुछ भी है।" सी#? जंग? जावा? ऐसी बहुत सी भाषाएँ हैं जो कम से कम "कुछ भी सी" जैसी हैं
Maaark

मैंने सी-स्टाइल सिंटैक्स के साथ एक संकलित, अत्यधिक अनुकूलित, कार्यान्वित-टू-मशीन भाषा होने के लिए "सी की तरह" लिया। C #, Java और PHP सभी वर्चुअल मशीन का उपयोग करते हैं, उनके कोड के साथ सीपीयू-विशिष्ट बायोटेक (और PHP का संकलन पूरी तरह से पारदर्शी है, जैसे कि पायथन और बैश) ओपकोड में संकलित है। और जंग मुख्यधारा नहीं है। केवल C ++ इन मामलों में "सी की तरह" है, कई अन्य मुख्यधारा की भाषाओं के साथ वाक्यविन्यास शैलियों को साझा करने के बावजूद।
घाघीपंक

24

यदि आप सबसे मजबूत इंजन को संभव बनाने की कोशिश कर रहे हैं, तो बिल्कुल एनएन इंजन के लिए जाएं।

पारंपरिक इंजन महान हैं - स्टॉकफिश यकीनन अभी भी आम सहमति हार्डवेयर पर ग्रह पर सबसे मजबूत इंजन है - लेकिन उन्हें लिखना मुश्किल है। ये इंजन वहाँ नहीं मिले जहाँ वे रात भर थे; उन्होंने सालों-साल काम किया। उदाहरण के लिए स्टॉकफिश लगातार छह वर्षों से एलो प्राप्त कर रही है । यदि आप खरोंच से शुरू करते हैं, तो आप स्टॉकफिश की ताकत के पास जल्दी से कहीं भी नहीं पहुंचेंगे; वास्तव में जहाँ आप स्टॉकफिश वर्तमान में हैं, वहां से कई सौ एलो स्टाल करने की संभावना है। तुलना के लिए सबसे मजबूत एकल-लेखक इंजनों में से कुछ अभी Ethereal , Laser और Xiphos हैं (मैं Houdini & Fire की उपेक्षा करता हूं क्योंकि वे खुले स्रोत नहीं हैं)। ये इंजन स्टॉकफिश की तुलना में काफी कमजोर हैं।

वे इतने कमजोर क्यों हैं? दो कारण:

  1. इस स्तर पर, एक इंजन विकसित करना बहुत अधिक कम्प्यूटेशनल शक्ति लेता है। आप जो करते हैं वह आपके कोड के माध्यम से दिखता है और एक विचार की पहचान करता है जो एलो प्राप्त कर सकता है। एक उदाहरण का विचार है, "अगर हम जानते हैं कि यह चाल शायद अच्छी है, तो उन शाखाओं की खोज न करें जो उस चाल को उलट देती हैं" (यदि यह आपको समझ में नहीं आता है, तो इसका मतलब है कि उच्च सीखने की अवस्था होने वाली है)। फिर आप एक पैच लिखते हैं जो विचार को लागू करता है, और पिछले संस्करण के खिलाफ संशोधित इंजन का परीक्षण करता है। इस स्तर पर, पैच के प्रभावी होने के बारे में बताने के लिए एक बड़े-पर्याप्त नमूने के आकार को प्राप्त करने के लिए दसियों हज़ार खेल लगते हैं। इन खेलों को खेलने से भारी मात्रा में कम्प्यूटेशनल शक्ति प्राप्त होती है। स्टॉकफिश के पास सुपर हार्डवेयर तक पहुंच है: लेखन के समय तक, स्टॉकफिश परीक्षण ग्राउंड फिशिंग1038 कोर के साथ चल रहा है। तुलना के लिए एक सामान्य डेस्कटॉप कंप्यूटर में 4-8 कोर हो सकते हैं।

  2. दूसरा कारण यह है कि स्टॉकफिश कई दिमागों द्वारा समर्थित है। लेखन के समय तक, 5 लोगों द्वारा परीक्षण किए जा रहे 8 पैच लिखे गए हैं। यदि आप पैच हिस्ट्री के माध्यम से देखते हैं तो आपको कई और डेवलपर मिलेंगे जिन्होंने पैच लिखा है। मैं नहीं जानता कि कितने सक्रिय स्टॉकफिश डेवलपर्स हैं, लेकिन यह निश्चित रूप से> 20 है।

दूसरी ओर, एनएन इंजन (अपेक्षाकृत) आसानी से एक ताकत तक पहुंचते हैं जो ईथर / लेजर / एक्सफोस से ऊपर है। नवीनतम टॉप शतरंज इंजन चैम्पियनशिप टूर्नामेंट में अपने लिए देखें । Ethereal / Laser / Xiphos लीग 1 में हैं, जो काफी विश्वसनीय है, लेकिन शीर्ष डिवीजन (डिवीजन पी) में इंजन निम्न हैं:

  • स्टॉकफिश (समुदाय समर्थित पारंपरिक इंजन, फिशिंग के साथ चलता है)
  • कोमोडो (वाणिज्यिक पारंपरिक इंजन, पूर्णकालिक डेवलपर्स है)
  • कोमोडो एमसीटीएस (वाणिज्यिक अर्ध-पारंपरिक इंजन, पूर्णकालिक डेवलपर्स है)
  • हौदिनी (वाणिज्यिक पारंपरिक इंजन, एक आदमी का प्रयास है, दो साल से अपडेट नहीं किया गया है)
  • लीला चेस ज़ीरो (समुदाय समर्थित एनएन इंजन, फिश्टिंग उर्फ ​​ए टन हार्डवेयर के एनालॉग के साथ चलता है)
  • AllieStein (2-मैन एनएन इंजन)
  • Stoofvlees (NN इंजन)
  • ScorpioNN (NN इंजन)

पिछले तीन इंजन - AllieStein, Stoofvlees और ScorpioNN - सभी छोटे लोग हैं, जो अब तक मुझे जानते हैं, आपके जैसे उत्साही हैं और पूर्णकालिक डेवलपर नहीं हैं। उन्होंने दो साल से भी कम समय के बाद Div P की ताकत हासिल कर ली है (ये सभी NN इंजन केवल AlphaZero के बाद दिखाई दिए)। तुलना के लिए, कंप्यूटर शतरंज के हालिया इतिहास में केवल एक ही व्यक्ति रहा है जिसने कभी एक पारंपरिक इंजन लिखा है जो अपने दम पर स्टॉकफिश और कोमोडो के साथ सफलतापूर्वक प्रतिस्पर्धा करता था (हुडिनी के लेखक रॉबर्ट हॉउडर्ट)।

यह सच है कि आपके पास शायद Lc0 के साथ प्रतिस्पर्धा करने के लिए हार्डवेयर नहीं होगा, लेकिन Lc0 में यह अधिक कम्प्यूटेशनल शक्ति है क्योंकि यह एक "शून्य" इंजन है - यह नियमों को छोड़कर किसी भी प्रकार के मानव ज्ञान के बिना शतरंज खेलने के लिए माना जाता है। आपको समान कार्यप्रणाली का उपयोग करने की आवश्यकता नहीं है। आप Stein पद्धति का उपयोग कर सकते हैं जो पर्यवेक्षित शिक्षण का उपयोग करता है। यकीनन यह "शून्य" होने से भी बेहतर है - आखिरकार यह ऑलस्टाइन सुपरफिनल में खेल रहा है, एलसी 0 नहीं।

अपशॉट है: यदि आपका उद्देश्य दुनिया के सर्वश्रेष्ठ इंजनों के साथ प्रतिस्पर्धा करना है, तो आप पारंपरिक लोगों के साथ एनएन इंजन के सफल होने की अधिक संभावना रखते हैं।


6
हो सकता है कि अपने निष्कर्ष के दूसरे पक्ष का उल्लेख करें: यदि आपका उद्देश्य कुछ प्रोग्रामिंग करते समय शतरंज की अपनी समझ को गहरा करना है, तो पारंपरिक के लिए जाएं।
ब्लूज़

1
मैं आपके निष्कर्ष से सहमत हूं, लेकिन मैं खरोंच से शुरू करने के बजाय एक शुरुआती बिंदु के रूप में एक मजबूत इंजन (पाठ्यक्रम की अनुमति के साथ) के हाल के नेटवर्क का उपयोग करने की सिफारिश करूंगा (लेकिन एक तरह से "ट्रेन से स्व-प्ले और अपडेट के माध्यम से जारी रखें) भार ", या तो परतों को जोड़कर या हटाकर, इनपुट सुविधाओं को जोड़कर, अतिरिक्त आउटपुट की मांग करते हुए, आदि)। मुझे याद नहीं है कि Lc0 सिंगल हेड या डुअल हेड है, लेकिन मेरा मानना ​​है कि 3 हेड ( ijcai.org/proceedings/2018/0523.pdf ) वर्तमान में किसी भी शतरंज इंजन द्वारा लागू नहीं किया गया है, और राज्य की स्थिति में सुधार कर सकता है। -कला।
स्टीवन जैक्सन

मुझे लगता है कि एली की खोज जो कमजोर इंजन (KMCST, स्टोफोलेवेस) के खिलाफ मजबूत बनाती है, न कि स्टीन नेटवर्क के।
मुझे '

मुझे लगता है कि शतरंज इंजन की प्रोग्रामिंग वास्तव में एक बेहतर शतरंज खिलाड़ी नहीं है - लैरी कॉफमैन (कोमोडो के डेवलपर्स में से एक) के अपवाद के साथ, शीर्ष इंजनों में से किसी ने भी खिलाड़ियों को डेवलपर्स के रूप में शीर्षक नहीं दिया है, या उनके डेवलपर्स बन गए थे शीर्षक वाले खिलाड़ी।
एल्योर

@me 'यह संभव है लेकिन Leelenstein Lc0 बाइनरी का उपयोग करके स्टीन नेटवर्क है, और यह chess.com के कंप्यूटर शतरंज चैम्पियनशिप में अच्छी तरह से किया है, इसलिए स्टीन नेटवर्क Lc0 नेटवर्क के लिए कम से कम तुलनीय हैं।
एल्योर

9

तो, सबसे मजबूत शतरंज इंजन बनाने के मामले में, क्या मुझे तंत्रिका नेटवर्क या हार्ड-कोडेड जाना चाहिए?

जब तक आपके पास हास्यास्पद (कुछ सौ एनवीडिया वी 100) तक पहुंच न हो, तब तक एनएन न चुनें। शतरंज खेलने के लिए एक एनएन को प्रशिक्षित करना बहुत अधिक हार्डवेयर लेता है। 200 मिलियन से अधिक खेलों को प्रशिक्षित करने के लिए Lc0 में योगदान करने वाले लोगों को देखें । चूंकि आपको शायद हार्डवेयर तक पहुंचने में परेशानी होगी (आप Google Colabatory पर कुछ प्राप्त करने का प्रयास कर सकते हैं , लेकिन केवल उसी के साथ, प्रशिक्षण बहुत धीमा होगा)।

संपादित करें: एक एनएन विद सुपरवाइज्ड लर्निंग का उपयोग करके, आप केवल Google Colab और संभवतः एक मजबूत GPU (2080, 2080Ti, Radeon VII) के साथ दूर हो जाएंगे।

एक और बात मैं इस पर विचार कर रहा हूं कि क्या यह महत्वपूर्ण है कि मैं इंजन को कोड करने के लिए किस भाषा का उपयोग करता हूं। मुझे पता है कि कई शतरंज इंजन सी ++ का उपयोग करते हैं, जो मैंने पहले कभी नहीं इस्तेमाल किया है। मैंने अन्य सी-आधारित भाषाओं का उपयोग किया है जो ज्यादातर समान वाक्यविन्यास के साथ एक ही काम करती हैं। मैं स्विफ्ट और जावास्क्रिप्ट से सबसे ज्यादा परिचित हूं, लेकिन पायथन से भी परिचित हूं और महसूस करता हूं कि यह मेरे लिए ट्रिक कर सकता है।

अजगर और जावास्क्रिप्ट शायद एक मजबूत शतरंज इंजन के लिए बहुत धीमी है। मैंने स्विफ्ट का उपयोग नहीं किया है, लेकिन यह शायद मैकओएस के अलावा अन्य प्लेटफार्मों को पसंद नहीं करेगा, इसलिए संभवतः सी या सी ++ का उपयोग करना बेहतर होगा। आप संभवतः रस्ट का उपयोग भी कर सकते हैं, लेकिन इसमें कई सुरक्षा विशेषताएं हैं जो कष्टप्रद हो जाती हैं और आपको वास्तव में आवश्यकता नहीं होती है, जो कष्टप्रद हो सकती है। निम्न स्तर के अनुकूलन करने के लिए कठिन हैं क्योंकि इससे अच्छा प्रदर्शन प्राप्त करना कठिन होता जा रहा है। बेशक, आप इसे हमेशा असेंबली में लिख सकते हैं लेकिन यह शायद बहुत काम आने वाला है। देख https://www.chessprogramming.org/Languages/


1
बहुत बढ़िया, जानकारी के लिए एक टन धन्यवाद! मैं शायद एक एपीआई बनाने की कोशिश करूंगा जो एक एफईएन स्थिति में होता है और गणना किए गए कदम को आउटपुट करता है। मुझे लगता है कि लिचेस बॉट्स के साथ एकीकरण करने का यह सबसे अच्छा तरीका है।
डेविड चोपिन


1
क्या यह एक अलग एनएन इंजन को लागू करने का विकल्प है जो सिर्फ lc0 के नेटवर्क का उपयोग करता है?
रेमकोगर्लिच

1
@RemcoGerlich जैसा कि मैं इसे समझता हूं, एनएन इंजन दो चीजों का उपयोग करते हैं: बाइनरी, और तंत्रिका नेटवर्क। बाइनरी लिखना आसान नहीं है, लेकिन एक तंत्रिका नेटवर्क को प्रशिक्षित करना अपेक्षाकृत आसान है। इस अर्थ में Lc0 डेरिवेटिव पहले से मौजूद है - लीलेनस्टीन और डेस एक्स (उर्फ। फैट फ्रिट्ज) ऐसे डेरिवेटिव हैं।
एल्योर

उस मामले में @RemcoGerlich जो वास्तव में एक अलग इंजन नहीं होगा, वह सिर्फ एक अलग रैपिंग / इंटरफ़ेस / जो भी है के साथ Ic0 इंजन होगा।
पीटरिस

3

मैंने एक विशुद्ध रूप से खिलौना शतरंज इंजन का उपयोग किया: अजगर शतरंज यह वास्तव में खेल के नियमों को खुद कोड करने और तर्क पर ध्यान केंद्रित नहीं करने के लिए अच्छा था; हालाँकि, मैं प्रति सेकंड मूल्यांकन कर सकने वाली स्थिति की संख्या बहुत कम है। यह एक अच्छा शुरुआती बिंदु हो सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.