वापसी पर स्वागत है! मैं 3rd CodeBots चुनौती पेश करने के लिए उत्साहित हूं। इसे बनाने में काफी समय लगा है। इस चुनौती को 3 खंडों में विभाजित किया जाएगा: लघु संस्करण, लंबा संस्करण और अतिरिक्त विवरण।
लघु संस्करण
प्रत्येक प्रतियोगी 24-कमांड प्रोग्राम लिखेगा। ये बॉट दुनिया भर में घूमेंगे और अपने कोड को अन्य बॉट्स में कॉपी करेंगे, जबकि अन्य बॉट्स को भी ऐसा करने से रोकने की कोशिश की जाएगी। संभावित आदेशों में से एक नो-ऑप है Flag
। यदि किसी बॉट में Flag
किसी अन्य बॉट की तुलना में अधिक है Flag
, तो आपको एक बिंदु मिलता है। आप सबसे अधिक अंक प्राप्त करके जीते।
उपरोक्त सभी पिछली दो चुनौतियों के लिए सही थे। इस बार, बॉट एक ही समय में कोड की कई लाइनें चलाने में सक्षम होंगे।
लंबे संस्करण
एपीआई
प्रत्येक बॉट में ठीक 24 लाइनें होंगी, जहां प्रत्येक पंक्ति निम्नलिखित प्रारूप में है:
$label command parameters //comments
लेबल और टिप्पणियां वैकल्पिक हैं, और प्रत्येक आदेश में मापदंडों की एक अलग संख्या है। सब कुछ मामला-असंवेदनशील है।
पैरामीटर
पैरामीटर टाइप किए गए हैं, और निम्न प्रारूप में हो सकते हैं:
- 0 से 23 तक का मान।
- एक चर:
A
,B
,C
,D
- जोड़ का उपयोग करके एक मान:
A+3
या2+C
- कोड की एक पंक्ति, जो
#
संकेत का उपयोग करके निर्दिष्ट है (#4
5 वीं पंक्ति का#C+2
प्रतिनिधित्व करेगा , जबकि द्वारा गणना की गई रेखा का प्रतिनिधित्व करेगाC+2
)। - आप
$label
कोड की एक लाइन नामित करने के बजाय उपयोग कर सकते हैं । - आपके प्रतिद्वंद्वी का चर या लाइन कोड, द्वारा निर्दिष्ट
*
। आपका विरोधी उस वर्ग में बॉट है जिसका आप सामना कर रहे हैं। (*B
आपके प्रतिद्वंद्वी केB
मूल्य का*#9
प्रतिनिधित्व करता है , जबकि आपके प्रतिद्वंद्वी की 10 वीं पंक्ति का प्रतिनिधित्व करता है)। यदि उस वर्ग में कोई नहीं है, तो कमांड निष्पादित नहीं किया जाता है।
आदेश
V को स्थानांतरित करें
बॉट ले जाता है North+(V*90 degrees clockwise)
। आंदोलन दिशा नहीं बदलता है।
V को चालू करें
बॉट को V*90 degrees
दक्षिणावर्त घुमाता है।
VW की प्रतिलिपि बनाएँ
प्रतियां जो कुछ भी है V
में W
। अगर V
एक लाइन नंबर है, तो W
एक लाइन नंबर होना चाहिए। यदि V
एक चर या मान है, तो W
एक चर होना चाहिए।
झंडा
कुछ नहीं करता।
स्टार टीवी
वैरिएबल से जुड़ा एक नया सूत्र शुरू करता है V
। तुरंत, और प्रत्येक भविष्य के मोड़ पर, थ्रेड लाइन पर कमांड निष्पादित करेगा V
।
यदि V
पहले से ही एक थ्रेड से जुड़ा हुआ है, तो यह कमांड नो-ऑप है। यदि V
प्रतिद्वंद्वी का चर है, तो प्रतिद्वंद्वी उस चर से जुड़ा एक सूत्र शुरू करेगा।
वी बंद करो
V
इस मोड़ के अंत में चर से जुड़े धागे को रोकता है ।
लॉक वी
उस थ्रेड को छोड़कर किसी भी तरहV
से इस्तेमाल होने वाली लाइन या वेरिएबल को रोकें । उसी थ्रेड द्वारा बाद की कॉल अनलॉक होती है । विरोधियों के चर या रेखाओं पर ताले नहीं लगाए जा सकते।Lock
Lock
V
अगर कॉन्ड VW
यह परीक्षण करेगा Cond
। यदि स्थिति सही है, तो वह थ्रेड पॉइंटर को लाइन नंबर पर ले जाएगा V
, अन्यथा लाइन नंबर पर W
। फिर उस लाइन को तुरंत निष्पादित किया जाएगा।
सशर्त, हो सकता है X=Y
, X<Y
, !X
, या ?X
:
X=Y
परीक्षण करता है कि क्या दो पंक्तियाँ एक ही प्रकार की हैं और एक ही बॉट से हैं, या आप परीक्षण करते हैं कि क्या दो मान एक ही राशि के बराबर हैं।X<Y
परीक्षण करता है कि मूल्य सेX
कम है या नहींY
।!X
परीक्षण कि क्या चर या रेखाX
बंद है (लौटाए जाने पर सही है)?X
यह जांचा जाता है कि किसी दिए गए चर में एक धागा है या नहीं
अतिरिक्त जानकारिया
मल्टी थ्रेडेड इंटरैक्शन
एक ही प्रकार के कार्यों को एक ही समय में निष्पादित किया जाता है। क्रियाओं को निम्नलिखित क्रम में निष्पादित किया जाता है:
ताला। यदि कई थ्रेड एक वैरिएबल को लॉक करने का प्रयास करते हैं, तो वे सभी विफल हो जाएंगे। यदि कोई थ्रेड किसी वैरिएबल को अनलॉक कर रहा है, जबकि दूसरा इसे लॉक करने का प्रयास कर रहा है, तो वैरिएबल अनलॉक रहेगा।
शुरू। यदि कई धागे एक चर पर एक धागा शुरू करने का प्रयास करते हैं, तो यह एक एकल शुरुआत के रूप में गिना जाएगा।
प्रति। यदि दो धागे दोनों एक ही चर में कॉपी होते हैं, तो चर एक यादृच्छिक मूल्य के रूप में समाप्त हो जाएगा। यदि वे दोनों एक ही पंक्ति में कॉपी करते हैं, तो भी काम नहीं करेगा। यदि एक थ्रेड एक ही वेरिएबल पर कॉपी करता है तो दूसरा थ्रेड कॉपी कर रहा है, तो बाद वाला थ्रेड एक रैंडम वैल्यू कॉपी करेगा। यदि दो धागे दोनों एक ही चर से नकल कर रहे हैं, तो वे दोनों ठीक काम करेंगे।
अगर। सभी सशर्तियों का एक साथ परीक्षण किया जाएगा, और फिर थ्रेड चर के बाद अपडेट किया जाएगा।
If
किसी कार्य को निष्पादित करने के लिए एक उच्च प्राथमिकता के साथ एक कार्रवाई को जोड़ा जा सकता है। उच्च प्राथमिकता वाली कार्रवाइयों को अतीत में जाने से पहले निष्पादित किया जाएगाIf
, जबकि निम्न प्राथमिकता वाली कार्रवाइयों को उसके बाद निष्पादित किया जाएगाIf
।ले जाएँ। एक ही बॉट पर एकाधिक चालें बॉट को सभी चालों का योग बनाएंगी। यदि एक ही स्थान पर कई बॉट समाप्त हो जाएंगे, तो उन्हें उनके शुरुआती स्थान पर लौटा दिया जाएगा।
मोड़। एक ही बॉट पर कई मोड़ आएंगे।
रूक जा। एक ही चर पर एकाधिक स्टॉप कमांड एक स्टॉप के रूप में गिना जाएगा।
अन्य जानकारी
आपका प्रारंभिक धागा D
चर से जुड़ा हुआ है
एक के साथ पुनरावृत्ति If
(एक If
बयान खुद को इंगित) होने के कारण आपके बॉट को कुछ नहीं करना होगा
यदि लॉक करने के बाद एक धागा बंद कर दिया जाता है, तो उन ताले को अनलॉक कर दिया जाएगा
एक बंद चर या रेखा का उपयोग करने की क्रिया कुछ नहीं करेगी।
यदि कोई बॉट 24 लाइनों से कम है, तो शेष लाइनें भरी जाएंगी Flag
एक चर पर एक लेखन प्रदर्शन करना जो एक शुरुआती धागे से भी जुड़ा हुआ है वास्तव में धागा नए निष्पादन पर अपना निष्पादन शुरू करेगा क्योंकि धागा निम्नलिखित मोड़ शुरू करता है।
बॉट्स को एक टॉरॉयडल वर्ल्ड में निम्नलिखित पैटर्न में रखा गया है:
B...B...B...
..B...B...B.
B...B...B...
मैंने कई नमूना बॉट्स जोड़े हैं जिन्हें भाषा के संदर्भ के रूप में टिप्पणी की जाती है।
नियंत्रक यहाँ स्थित है । मैंने इस पर एक लंबा समय काम किया है, लेकिन इसमें अभी भी कीड़े हैं। जब कल्पना और नियंत्रक विरोधाभास, कल्पना सही है।
स्कोरबोर्ड
1. 771 LockedScannerBot
2. 297 CopyAndSelfFlag
3. 289 DoubleTapBot
4. 197 ThreadCutterBot
5. 191 TripleThread
6. 180 ThickShelled
7. 155 Attacker
8. 99 RandomMover
9. 90 BananaBot
10. 56 LockedStationaryDoubleTap