अब एंट्री बंद हो गई हैं। कोई भी नई प्रविष्टि या संपादन अंतिम रन में नहीं गिना जाएगा।
चैट में शामिल हों!
चुनौती
जितना संभव हो उतना कैनवास को भरने की कोशिश करें। अन्य बॉट्स से सावधान रहें जो आपकी कड़ी मेहनत के बावजूद पेंट कर सकते हैं!
नोट: इस चुनौती के विवरण में, पेंट का मतलब ग्रिड पर वर्ग के रंग को बदलने के लिए है और अप्रकाशित का मतलब है कि ग्रिड पर वर्ग का रंग 0 है और किसी भी बॉट के लिए जिम्मेदार नहीं है।
इनपुट
आपके फ़ंक्शन को चार तर्क दिए जाएंगे: स्वयं, ग्रिड, ग्रिड पर सभी बॉट की स्थिति और गेम की जानकारी।
खुद
यह 1 डी सरणी है जो ग्रिड पर आपके रंग और स्थिति को दर्शाता है [id, xpos, ypos]
:।
ग्रिड के ऊपरी बाएं कोने की स्थिति है (0, 0)
। स्थिति (1,0)
उस के दाईं ओर है और स्थिति (0,1)
नीचे है
आपकी आईडी एक पूर्णांक है जो आपके रंग का पर्याय है (नीचे देखें कि आपकी आईडी कैसे प्रभावित करती है कि आप ग्रिड को कैसे चित्रित करते हैं)। आपकी आईडी आपके बॉट के लिए अद्वितीय है।
ग्रिड
यह एक 2 डी सरणी है जिसमें पूर्णांक होते हैं जो आपको बताते हैं कि प्रत्येक सेल क्या रंग है। यदि ग्रिड सेल की संख्या है 0
, तो इसका मतलब है कि सेल अप्रकाशित है। यदि ग्रिड सेल की संख्या एक पूर्णांक है x
, तो इसका मतलब है कि सेल को आईडी के साथ बॉट द्वारा चित्रित किया गया है x
।
स्थिति पर ग्रिड का रंग प्राप्त करने के लिए (x, y)
, सरणी का उपयोग करें जैसे grid[x][y]
:।
बॉट
यह एक सरणी है जिसमें बॉट की स्थिति के बारे में जानकारी शामिल है। बॉट्स एरे का प्रत्येक तत्व एक एरे है जो प्रत्येक बॉट का वर्णन करता है और ऐसा दिखता है: बॉट की आईडी [id, xpos, ypos]
कहां id
है, बॉट xpos
की x स्थिति हैypos
की y स्थिति है।
इस सरणी में आपकी खुद की बॉट की स्थिति और आईडी शामिल है। इस एरे में एलिमिनेटेड बॉट्स को शामिल नहीं किया जाएगा।
खेल की जानकारी
यह एक सरणी है जिसमें वर्तमान गेम के बारे में जानकारी है और यह दिखता है: [roundNum, maxRounds]
जहां roundNum
वर्तमान राउंड की संख्या (1-अनुक्रमित) है और maxRounds
वर्तमान गेम में राउंड की संख्या है।
उत्पादन
आउटपुट आपके फ़ंक्शन द्वारा लौटाया गया स्ट्रिंग होना चाहिए। यह आंदोलन की आज्ञा है।
आंदोलन कमांड आपके अगले कदम को निर्धारित करता है। उपलब्ध आदेश हैं:
up
down
left
right
wait
जब भी तुम चलते हो, तुम उस चौक को रंग देते हो, जहां तुम जाते हो। (अधिक जानकारी के लिए नीचे देखें)
wait
मतलब आप कहाँ नहीं चलते। (लेकिन आप उस वर्ग को चित्रित करते हैं जिस पर आप रहते हैं)
यदि आप ग्रिड से बाहर जाने की कोशिश करते हैं, तो आपकी आज्ञा को नजरअंदाज कर दिया जाएगा और आप उसी स्थान पर रहेंगे।
ग्रिड को पेंट करना
जब भी आप किसी वर्ग में जाते हैं, तो आप इसे पेंट करते हैं, लेकिन ऐसे नियम हैं जो यह निर्धारित करते हैं कि उस वर्ग का रंग क्या होगा।
यदि वर्ग अप्रकाशित है (0), तो आप बस इसे उसी रंग में पेंट करते हैं जैसे आपकी आईडी। हालांकि, यदि वर्ग को पहले (गैर-शून्य) चित्रित किया गया है, तो वर्ग का परिणामी रंग निम्नलिखित जावास्क्रिप्ट कोड के अनुसार मिलेगा:
[botColour, 0, floorColour][Math.abs(botColour - floorColour)%3]
यह फार्मूला इसलिए बनाया गया है ताकि किसी बॉट को बिना रिपीट किए अपने ही रंग पर जाने दिया जा सके।
निकाल देना
यदि, 5 राउंड के बाद, आपके पास एक या एक से कम वर्ग पेंट किए गए हैं (ग्रिड पर वर्गों की संख्या जो आपके समान रंग हैं) तो आप समाप्त हो जाएंगे। इसका मतलब है कि आप अब खेल में नहीं होंगे और अपने आप हार जाएंगे।
नियम
- आपका कोड प्रकार का एक फ़ंक्शन होना चाहिए
function(myself, grid, bots, gameInfo) {
// Code here
return move;
}
- ग्रिड एक लम्बाई का एक वर्ग होगा
- विशिष्ट बॉट्स को निशाना बनाने से रोकने के लिए बॉट्स आईडी को यादृच्छिक किया जाएगा।
- जब दो बॉट एक ही स्थान पर कब्जा कर लेते हैं, तो उस स्थान का रंग अप्रकाशित हो जाएगा।
- आंदोलन एक दौर के दौरान बारी आधारित यानी है, सभी बोट्स समान के साथ आपूर्ति की जाती है
grid
,bots
औरgameInfo
तर्क
- आप अधिकतम तीन बॉट बना सकते हैं
- बॉट्स एक साथ काम कर सकते हैं, लेकिन एक दूसरे के साथ संवाद नहीं करना चाहिए और एक दूसरे को आईडी नहीं पता होना चाहिए। एक टीम के बजाय जीत व्यक्तिगत रूप से प्रदान की जाएगी।
- आपको एक बॉट नहीं बनाना चाहिए जो जानबूझकर एकल, पूर्व-चयनित बॉट को लक्षित करता है। हालाँकि, आप एक सामान्य वर्ग के बॉट्स की रणनीति को लक्षित कर सकते हैं।
- आपका बॉट डेटा को स्टोर कर सकता है
window.localStorage
। प्रत्येक बॉट को अपनी डेटा ऑब्जेक्ट का उपयोग करना चाहिए। यदि एक बॉट दूसरे बॉट के डेटा (गलती से या उद्देश्य पर) पढ़ता पाया जाता है, तो यह तब तक अयोग्य हो जाएगा जब तक कि समस्या हल नहीं हो जाती। - यदि आपका बॉट यादृच्छिक संख्या का उपयोग करता है, तो कृपया उपयोग करें
Math.random()
नियंत्रक
नियंत्रक यहां पाया जा सकता है:
https://gist.github.com/beta-decay/10f026b15c3babd63c004db1f937eb14
या आप इसे यहां चला सकते हैं: https://beta-decay.github.io/art_attack
ध्यान दें: मैं आपको सलाह दूंगा कि आप किसी भी परीक्षण को ऑफलाइन करें (जिस्ट से कंट्रोलर को डाउनलोड करें) क्योंकि वेबपेज किसी भी समय परिवर्तन के अधीन है।
जब सभी बॉट्स को जोड़ दिया गया है, तो मैं बिना किसी ग्राफ़िकल इंटरफ़ेस के ड्रिप किए गए नियंत्रक के साथ 10,000 गेम चलाऊंगा। आप इसे यहां चला सकते हैं: https://beta-decay.github.io/art_attack/fast
जीतना
जिस खिलाड़ी ने सबसे अधिक कैनवास भरा है, वह गेम जीतता है (एक गेम 2000 राउंड है)। ड्रॉ की स्थिति में, सभी ड्रॉ खिलाड़ी जीत जाते हैं।
जो खिलाड़ी 10,000 में से सबसे अधिक गेम जीतता है वह चुनौती जीतता है।
10,000 खेलों के अगले सोमवार (2018-08-27 को 23:00 यूटीसी + 1) पर चलने का अनुमान है।
[botColour, 0, floorColour][Math.abs(botColour - floorColour)%3]
सूत्र के साथ करना बहुत अधिक है , चाहे एक बोट भाग्यशाली हो या बड़े प्रतियोगियों पर पेंट करने के लिए (या पेंट हो जाता है)। ट्रॉल्स / हंटर्स को भी ध्यान में रखें जो अपने चयन के एक बॉट को नष्ट कर सकते हैं। किसी भी तरह से, यह 10000 के खेल पर औसत होगा।
[botColour, 0, floorColour][Math.abs(botColour - floorColour)%3]
में अनुवाद कर सकते हैं ?