कोडबॉट्स 2: इवेंट ड्रिवेन डिज़ाइन


11

कोड बॉट 2 में आपका स्वागत है!

आपने अंतिम कोड बॉट के बाद से अपना सबक सीखा है। आपने कम लाइनों में अधिक कार्यों को फिट करने के लिए और अधिक तरीके जानने की कोशिश की है, और अब आपके पास आखिरकार यह है। आप एक इवेंट-संचालित कोड बॉट बनाने जा रहे हैं।

आपकी बॉट में 24 लाइनें होनी चाहिए। प्रत्येक पंक्ति दो स्वरूपों में से एक का अनुसरण करती है:

Condition:Action

या

Action

आपके बॉट के पास 5 पूर्णांकों के नाम Aसे स्टोर करने के लिए पर्याप्त स्टोरेज है E। एक पूर्णांक मान 0 से 23 तक संग्रहीत कर सकता है।

प्रत्येक मोड़ पर, आप लाइन निष्पादित करेंगे C, जब तक कि शर्तों में से एक सच न हो। यदि ऐसा है, तो Cफिर सशर्त की लाइन संख्या सही होगी, और फिर उस लाइन को निष्पादित किया जाएगा। प्रत्येक मोड़ के अंत में, Cवृद्धि की जाएगी।

उपलब्ध शर्तें हैं:

  1. Startकेवल पहली बारी पर सच है। आपके पास यह कोड एक बार अवश्य होना चाहिए
  2. BotAt(N) यह सच है अगर N द्वारा परिभाषित स्थान पर एक बॉट है
  3. Equals(A,B) यह सच है कि यदि A, B के बराबर है। वे भिन्न प्रकार के हो सकते हैं, यदि हां, तो वे समान नहीं होंगे।
  4. Modified(A)Aअंतिम मोड़ के दौरान कॉपी किया गया तो सच है । Aएक चर नाम, एक रेखा या एक शर्त होनी चाहिए
  5. Any(C1,C2,...) यदि कोई भी स्थिति सत्य है तो सत्य है
  6. None(C1,C2,...) यदि कोई भी स्थिति सत्य नहीं है तो सच है
  7. All(C1,C2,...) यदि सभी स्थितियाँ सत्य हैं तो सत्य है
  8. Not(C)सच है अगर सी गलत है। Cएक शर्त होनी चाहिए।

चर निम्नलिखित स्वरूपों में से एक में हो सकते हैं। पहले 9 संख्यात्मक हैं, और जब भी इस पृष्ठ में एन का उपयोग किया जाता है, तो इसका उपयोग किया जा सकता है।

  1. A, B, C, D,E
  2. 0 से 23 तक की संख्या
  3. This वर्तमान में वह लाइन नंबर वापस कर देगा
  4. Add(N1,N2,...) सभी मूल्यों का योग लौटाएगा
  5. Sub(N1,N2) एन 1 माइनस एन 2 लौटाएगा
  6. Mult(N1,N2,...) सभी मूल्यों का उत्पाद लौटाएगा
  7. Div(N1,N2) N2 द्वारा विभाजित N1 लौटाएगा
  8. Mod(N1,N2) N1 मॉड N2 लौटाएगा
  9. OVar(N) एक चर नाम को स्वीकार करेगा, और प्रतिद्वंद्वी के चर को वापस कर देगा
  10. Line(N) आपके कोड में Nth लाइन लौटाएगा
  11. Type(N) आपके कोड में Nth लाइन प्रकार लौटाएगा (प्रकार कार्रवाई के नाम हैं)
  12. Cond(N) Nth लाइन पर स्थिति लौटेगी
  13. CondType(N) Nth लाइन पर स्थिति प्रकार लौटाएगा (प्रकार शर्तों के नाम हैं)
  14. OLine(N) अपने प्रतिद्वंद्वी के कोड में Nth लाइन लौटाएगा
  15. OType(N) अपने प्रतिद्वंद्वी के कोड में Nth लाइन प्रकार लौटाएगा
  16. OCond(N) स्थिति को Nth लाइन पर लौटा देगा
  17. OCondType(N) Nth लाइन पर स्थिति प्रकार लौटाएगा

Aऔर Bआपके व्यक्तिगत उपयोग के लिए हैं, Cयह निर्धारित करने के लिए उपयोग किया जाता है कि आपके कोड में किस लाइन को निष्पादित किया जाए, और Dएक दिशा के रूप में उपयोग किया जाता है। से प्रत्येक मूल्य Dएक अलग वर्ग और दिशा जोड़ी को देखें। Eहर बार एक यादृच्छिक मूल्य पैदा करता है। Dऔर Eएक यादृच्छिक मूल्य के लिए इनिशियलाइज़ किया जाएगा, अन्यथा 0

उपयोग की दिशा होगी [North,East,South,West][D%4]। आपका प्रतिद्वंद्वी उस दिशा में तत्काल वर्ग में बॉट है।

आपके लिए 4 क्रियाएं उपलब्ध हैं:

  1. Moveआपको Dवें दिशा में 1 वर्ग आगे बढ़ाएगा । अगर वहाँ एक बॉट है, तो आप नहीं जाएंगे।
  2. Copy(A,B)Aकरने के लिए चर की नकल करेंगे BBएक चर नाम को छोड़कर, संख्यात्मक मान नहीं हो सकता है। Aऔर Bविभिन्न प्रकार के नहीं हो सकते। लाइन कॉपी करने से हालत कॉपी नहीं होती।
  3. Flagकुछ नहीं करता। आपके कोड में सबसे अधिक झंडे वाले बॉट को एक बिंदु मिलेगा। सबसे अधिक अंकों वाला बॉट जीतता है।
  4. If(C,L1,L2)L1अगर Cसच है, तो लाइन परफॉर्म करेगा L2Cएक स्थिति है, और L1और L2लाइनों होना चाहिए।

बड़ी तस्वीर

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

बॉट्स को इस प्रकार रखा जाएगा:

B...B...B...B...
..B...B...B...B.
B...B...B...B...

10 गेम चलेंगे, और सभी गेमों में अंक औसत होंगे, यह निर्धारित करते हुए कि विजेता कौन है।

साइड नोट्स

यदि कई शर्तें लागू होती हैं, तो जो सबसे अधिक अनुकरण करता है Start, उसे निष्पादित किया जाएगा

बॉट्स को बारीकी से पैक किया जाएगा लेकिन आप दूसरे बॉट की पड़ोसी को शुरू नहीं करेंगे। (यह आखिरी कोडबोट्स की तरह ही प्रारूपिक होगा)

चूंकि यह चुनौती सैंडबॉक्स में पोस्ट नहीं की गई थी (किसी को भी लाभ देने के लिए), मैं निष्पक्षता या अतिरिक्त क्षमताओं के लिए छोटे विवरण बदलने का अधिकार सुरक्षित रखता हूं। इसके अलावा, अगर CodeBots धावक में एक बग है, तो मैं इसे बदल दूंगा, भले ही कोई बॉट अपनी सफलता के लिए उस बग पर निर्भर हो। मैं यथासंभव निष्पक्ष रहने की कोशिश कर रहा हूं ।

पुनरावर्ती Ifकथनों को निष्पादित नहीं किया जाएगा

यदि आपकी बॉट 24 रेखाओं से छोटी है, तो शेष रेखाएं भर जाएंगी Flag

याद रखें जब अपनी खुद की नकल करते हैं C, तो Cआपकी बारी के अंत में वेतन वृद्धि होती है।

CodeBots दुभाषिया यहाँ पाया जा सकता है । इसमें आसान निष्पादन के लिए .jar फ़ाइल शामिल है। बस बॉट फ़ोल्डर में अपना बॉट जोड़ें

स्कोर

  1. 893.9 बोर्ग
  2. १.३ आलसी
  3. 0.9 डिफेंडर
  4. 0.5 ध्वजकार
  5. 0.4 CliqueBot
  6. 0.4 कपटी
  7. 0.3 हमलावर
  8. 0.3 गार्ड
  9. 0.3 सिंगलटार्गेट
  10. 0.2 फ्रीजबोट
  11. 0.2 प्रहरी
  12. 0.2 ड्राइवबी
  13. ०.० विरोधी
  14. ०.० मूवबॉट
  15. 0.0 क्लिकबोर्ग
  16. 0.0 कैलक्यूलेटर
  17. 0.0 टेस्टबोट
  18. ०.० इमीटेटर

अपडेट करें

जब आप अपने प्रतिद्वंद्वी के कोड को देखते हैं तो कोड की पंक्तियों को घुमाया जाता है। इसका मतलब है, आपके प्रतिद्वंद्वी की लाइन 1 लाइन 14 (या जो भी लाइन) हो सकती है। एक बॉट में एक निश्चित ऑफसेट होगा जो एक प्रतिद्वंद्वी द्वारा देखे जाने पर अपनी लाइनों को Xराशि से ऑफसेट करेगा । प्रतिद्वंद्वी के चर को भी उसी राशि से ऑफसेट किया जाएगा । एक ही खेल के भीतर नहीं बदलेगा, लेकिन यह खेल से खेल में बदल जाएगा।CXX


नाथन: क्या आप यह देखने के लिए "आलसी शेरनी" की जाँच कर सकते हैं कि क्या मेरे द्वारा बताए गए कीड़े वैध हैं (या अगर मैं सिर्फ दोपहर के भोजन के लिए बाहर हूं)? कोई जल्दी नहीं। बस यह सुनिश्चित करना कि आप सबमिशन के बारे में जानते हैं।
सीओटीओ

@ COTO क्षमा करें, स्कूल पागल हो गए थे। मैं इसे आज रात तक लाने की कोशिश करूँगा।
नाथन मेरिल

शर्तों के किसी भी अल्पविराम से अलग की गई सूची के लिए 'सभी' की स्थिति का अनुमान लगाया जा सकता है। यह प्रविष्टियों को पढ़ना थोड़ा आसान बना देगा।
ccarton

मुझे लगता है कि मुझे आपका बग मिल गया। FuctionParser ऑब्जेक्ट का उपयोग HashMap में कुंजियों के रूप में किया जा रहा है, जिसका अर्थ है कि आपको एक उचित समान विधि की आवश्यकता है। यह CliqueBot के साथ समस्या को ठीक करता है और साथ ही साथ Lazy Lioness की भी संभावना रखता है। मैंने आपको एक पुल अनुरोध भेजा है।
ccarton

@ हशर्टन केवल मूल्यों को याद करता है, इसका उपयोग समानता के परीक्षण के लिए नहीं किया जाता है
नाथन मेरिल

जवाबों:


13

बोर्ग

अन्य सभी बॉट को स्वयं के क्लोन में परिवर्तित करता है। प्रतिरोध व्यर्थ है।

Start:Copy(2,A)                               # Cloning will begin at line 2
All(Not(BotAt(D)),Not(Equals(2,A))):Copy(2,A) # Reset A if the opp left before we were done
Not(BotAt(D)):Move
All(Equals(Line(Sub(This,3)),OLine(0)),Equals(Line(Sub(This,2)),OLine(1)),Equals(Line(Sub(This,1)),OLine(2)),Equals(Line(This),OLine(3)),Equals(Line(Add(This,1)),OLine(4)),Equals(Line(Add(This,2)),OLine(5)),Equals(Line(Add(This,3)),OLine(6)),Equals(Line(Add(This,4)),OLine(7)),Equals(Line(Add(This,5)),OLine(8))):Copy(E,D) #  Check if cloning is complete
All(Equals(A,2),Not(Equals(OCond(1),Cond(Add(This,4))))):Copy(Cond(Add(This,4)),OCond(1)) # Copy freeze cond to OLine(1) before cloning starts
All(Equals(A,2),Not(Equals(OLine(1),Line(Add(This,3))))):Copy(Line(Add(This,3)),OLine(1)) # Copy freeze line
Not(Equals(Cond(Add(Sub(This,6),A)),OCond(A))):Copy(Cond(Add(Sub(This,6),A)),OCond(A))    # Copy Cond(A) to OCond(A)
Not(Equals(Line(Add(Sub(This,7),A)),OLine(A))):Copy(Line(Add(Sub(This,7),A)),OLine(A))    # Copy Line(A) to OLine(A)
Equals(A,A):Copy(Add(A,1),A) # Increment A. It will wrap around all 24 lines before the completion check matches

संपादित करें: यदि मैं उसके साथ काम कर रहा हूं, तो प्रतिद्वंद्वी को स्थानांतरित करने के लिए ए को रीसेट करने के लिए छोटा फिक्स। स्कोर को प्रभावित नहीं करता है, लेकिन यह मुझे बेहतर महसूस कराता है।

# 2 संपादित करें: क्लोनिंग प्रक्रिया को ठीक से पूरा करने के लिए एक अधिक संपूर्ण जांच जोड़ी गई (पंक्ति 3)

# 3 संपादित करें: नए यादृच्छिक ऑफसेट को संभालने के लिए अपडेट करें। यहां कठिनाई यह थी कि नए क्लोनों में उनका कोड यादृच्छिक ऑफ़सेट पर स्थित होता है, जिसका अर्थ है कि वे अपनी स्वयं की लाइनों का स्थान नहीं जानते हैं। इसका अर्थ है कि मेरी अपनी पंक्तियों के सभी संदर्भ सापेक्ष (से This) होने चाहिए । विरोधी लाइन नंबर अभी भी निरपेक्ष हो सकते हैं क्योंकि वे वैसे भी यादृच्छिक हैं।


अरे, क्या हम इस बॉट के बारे में बात कर सकते हैं? chat.stackexchange.com/rooms/17128/…
नाथन मेरिल

@ नथन, क्या आपने सबसे हाल के रन में इस प्रविष्टि के नवीनतम संस्करण का उपयोग किया है?
ccarton

मुझे आश्चर्य है कि यह बॉट अन्य बॉट्स को इतनी सफलतापूर्वक संक्रमित करने में सक्षम है। मैं यह देखना चाहता हूँ कि यह कैसे काम करता है।
शुक्राणु

@ सार्टन नं। मुझे महसूस नहीं हुआ कि इसे अपडेट किया गया था। पुनर्प्रसारण।
नाथन मेरिल

@ शेपर मैंने कुछ टिप्पणियां जोड़ी हैं। आशा है कि यह आसान का पालन करता है। मुझे लगता है कि क्लोनिंग के घातीय प्रभाव के कारण बॉट इतना प्रभावी है। प्रत्येक बॉट इसे संक्रमित करता है और दूसरों को संक्रमित करता है। इसके अलावा, वे स्वाभाविक रूप से क्षति होने पर एक-दूसरे को ठीक करने की कोशिश करेंगे।
ccarton


3

कैलकुलेटर

यह बॉट इस चुनौती के लक्ष्य को नहीं समझता है, इसलिए उसने दुश्मन के लिए कुछ संख्याओं की गणना करने का फैसला किया।

Equals(Mod(OVar(E),5),0):Copy(Add(OVar(A),OVar(B)),OVar(D))
Equals(Mod(OVar(E),5),1):Copy(Sub(OVar(A),OVar(B)),OVar(D))
Equals(Mod(OVar(E),5),2):Copy(Mult(OVar(A),OVar(B)),OVar(D))
Equals(Mod(OVar(E),5),3):Copy(Div(OVar(A),OVar(B)),OVar(D))
Equals(Mod(OVar(E),5),4):Copy(Mod(OVar(A),OVar(B)),OVar(D))
Start:Move

आपको परिणामों को OVar(D)नहीं डालना चाहिए A!
मेगाटॉम

@ मेगाटॉम डोन;)
कॉमनग्यू

3

CliqueBot

Flag
Start: Copy(11,B)
Not(Equals(Line(20),Line(21))): If(Equals(Line(21),Line(22)),Line(7),Line(8))
Not(Equals(Line(21),Line(22))): If(Equals(Line(20),Line(21)),Line(9),Line(10))
All(BotAt(D),Not(Equals(11,OVar(B)))): If(Equals(Line(20),OLine(OVar(C))),Line(10),Line(11))
Any(BotAt(D),Equals(E,B)): Copy(Add(D,1),D)
Equals(1,1): Move
Copy(Line(21),Line(20))
Copy(Line(20),Line(21))
Copy(Line(21),Line(22))
If(Equals(Line(20),OLine(Sub(OVar(C),1))),Line(5),Line(12))
Copy(Line(20),OLine(OVar(C)))
Copy(Line(20),OLine(E))

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

संपादित करें: अप्रत्याशित रूप से, कहीं न कहीं एक बग प्रतीत होता है, स्कोर को देखते हुए।

संदेह है कि लाइनें 0-अनुक्रमित हैं और मेरा कोड 1-अनुक्रमित है। वास्तव में जाँच होनी चाहिए कि पहले। शुरुआत में एक झंडे को जोड़ा ताकि सब कुछ एक-दूसरे से टकरा सके।


मुझे लगता है कि मुझे नियंत्रक में बग मिला। मैंने उसे एक अनुरोध भेजा। जब तक वह इसे स्वीकार नहीं करता, तब तक आप मेरे कांटे को आजमा सकते हैं यदि आप चाहें और मुझे बताएं कि क्या यह आपके लिए काम करता है।
20

बग को नवीनतम संस्करण में तय किया गया है।
नाथन मेरिल

2

रक्षक

Start:Copy(0,A)
Copy(0,B)
Flag
Flag
All(Modified(Line(2)),Equals(A,0)):Copy(1,A)
Copy(Line(3),Line(2))
Copy(0,A)
Copy(10,C)
All(Modified(Line(3)),Equals(B,0)):Copy(1,B)
Copy(Line(2),Line(3))
Copy(0,B)
BotAt(D):Copy(Line(2),OLine(E))


2

हमलावर

Start:Move
BotAt(D):Copy(Line(Add(Mod(E,6),4)),OLine(E))
Any(BotAt(0),BotAt(1),BotAt(2),BotAt(3)):Move
None(BotAt(0),BotAt(1),BotAt(2),BotAt(3)):Copy(E,D)

BotAt(D):Copy(Line(X),OLine(E))जहां लाइन X में शामिल है Equals(1,1):Flag... मनोरंजन के लिए
seequ

@ एसआईजी Lineकेवल कार्रवाई की नकल करता है, न कि शर्त की।
मेगाटॉम

मेरी प्रबल रणनीति :(

2

एकल लक्षय

Start:Move
All(BotAt(D),Not(Equals(OVar(D),D))): Copy(D,OVar(D))
BotAt(D):Copy(Line(E),OLine(E))
Equals(A,A):Move

आपको शिकार करेगा और आपको झंडे से भर देगा!


Allहालत एक की जरूरत है)
नाथन मेरिल

2

कपटी

Start:Flag           # comments -->                                                                                 # why move when we can fit another flag here?
Equals(E,0):Copy(Add(D,Sub(Mult(2,Mod(E,2)),1)),D)                                                                  # 1/24 chance to turn left or right
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),1)),Cond(Add(This,4))))):Copy(Cond(Add(This,4)),OCond(Sub(OVar(C),1)))    # Copy the freeze condition
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),1)),Line(Add(This,4))))):Copy(Line(Add(This,4)),OLine(Sub(OVar(C),1)))    # Copy the flag-copying line
All(BotAt(D),Not(Equals(OLine(Add(OVar(C),0)),Line(Add(This,Add(4,Mod(E,14))))))):Copy(Line(Add(This,Add(4,Mod(E,14)))),OLine(Add(OVar(C),0))) # copy one of my flags to them
BotAt(D):Copy(Add(D,Sub(Mult(2,Mod(E,2)),1)),D)                                                                     # turn left or right if we've infected our target
Equals(A,A):Move                                                                                                    # move if all else fails, also infection freeze condition
Copy(Line(Add(This,1)),Line(Add(This,Mod(E,22))))                                                                   # infection line 1
Flag                                                                                                                # first of many flags

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


Line(4)थोड़ा सा सरलीकृत किया जा सकता है। Add(OVar(C),0)रूप में ही है OVar(C)और Add(This,Add(4,Mod(E,14)))रूप में ही है Add(This,4,Mod(E,14))
मेगाटॉम

@MegaTom मैंने पहले अनावश्यक ऐड किया, जो पूर्ववर्ती लाइनों के तार्किक भागों को बनाने के लिए जोड़ा गया है। दूसरा यह जानने के कारण था कि ऐड कई पैरामीटर ले सकता है। धन्यवाद
Sparr

1

Gard

Start: Move
BotAt(D):IF(Equals(Line(7),OLine(C)),Line(6),Line(5))
BotAt(Add(D,1)):Copy(Add(D,1),D)
BotAt(Add(D,2)):Copy(Add(D,2),D)
BotAt(Add(D,3)):Copy(Add(D,3),D)
Copy(Line(7),OLine(OVar(C)))
Copy(Cond(7),OCond(Sub(OVar(C),1)))

इसके आगे किसी भी रोबोट को अटैक करता है।


आपकी अंतिम पंक्ति एक स्थिति से एक पंक्ति में कॉपी नहीं हो सकती।
नाथन मेरिल

@ NathanMerrill मैं अभी तय कर रहा था कि ...
MegaTom

OConजरूरत हैOCond
नाथन मेरिल

1

फ्रीज बॉट

Start:Move
All(BotAt(D),Not(Equals(OCond(1),Cond(5)))):Copy(Cond(5),OCond(1))
All(BotAt(D),Not(Equals(OLine(1),Line(6)))):Copy(Line(6),OLine(1))
All(BotAt(D),Equals(Mod(OVar(A),24),0)):Copy(Add(D,1),D)
BotAt(D):Copy(Line(20),OLine(OVar(A)))
Equals(A,A):Move
Copy(Add(A,1),A)

आपको एक लूप में फंसाता है, अपने स्वयं के Aचर को बढ़ाता है , फिर आपको झंडे से भरता है और अगले शिकार पर ले जाता है।


पंक्ति 3: कृपया D + 1 को Add (D, 1) से बदलें
नाथन मेरिल

आप मान रहे हैं कि प्रारंभ लाइन शून्य पर है। अब सभी को अपना स्टार्ट टू लाइन डालने के लिए प्रेरित किया जाता है। यह एक मूर्खतापूर्ण वृद्धि /
पुनरुत्थान की

1

नकलची

Start:Move
BotAt(D):If(OCond(0),OLine(0),Line(2))
If(OCond(1),OLine(1),Line(3))
If(OCond(2),OLine(2),Line(4))
If(OCond(3),OLine(3),Line(5))
If(OCond(4),OLine(4),Line(6))
If(OCond(5),OLine(5),OLine(OVar(C)))
Not(BotAt(D)):If(BotAt(Add(D,1)),Line(8),Line(0))
Copy(Add(D,1),D)

भविष्यवाणी करता है कि आप क्या करेंगे, फिर वह करता है।


कृपया D + 1 को Add (D, 1) से बदलें
Nathan Merrill

इसके अलावा, आप कमांड में एक पंक्ति के रूप में पास नहीं कर सकते। आपको या तो एक OLineया एकLine
नाथन मेरिल

@NathanMerrill जाने के लिए तैयार! (कम से कम मुझे लगता है कि यह है)
MegaTom

इस बॉट ने वास्तव में मेरे कोड को कुछ परेशानी में डाल दिया, लेकिन यह मेरी गलती थी, आपकी नहीं। कुछ कीड़े हैं, कृपया Lineआसपास रखें 2और Add(D,1)इसके बजायD+1
नाथन मेरिल

1

आलसी शेरनी

मूल रूप से सिर्फ "शेरनी", प्रतियोगिता के लिए मेरी पहली सबमिशन ने "आलसी" शीर्षक अर्जित किया, जो कि सिम्युलेटर में पेश किए जाने पर कुछ भी नहीं कर रहा था।

उसकी सुस्ती वास्तव में एक बग (या संभवतः मेरी गलतफहमी मॉडल घटना) के कारण है, जिसमें पहले तीन पंक्तियों में स्थितियां (यह सुनिश्चित करने के लिए एक साधारण समता की जाँच करें कि झंडे को अधिलेखित नहीं किया जाता है), कभी-कभी, अनावश्यक रूप से मूल्यांकन करते हैं true, एक लोमोनेट लूप में लॉकिंग लेओ। । कई अन्य स्थितियां (विशेषकर जो BotAt()स्थिति पर भरोसा करती हैं) भी trueकई बार मूल्यांकन करती हैं जब कोई आसन्न बॉट मौजूद नहीं होता है। सिम्युलेटर के माध्यम से कदम रखते समय अंत में, Moveऔर Copyनिर्देशों को स्पष्ट रूप से अनदेखा किया जाता है। चूंकि मेरी सशर्त तर्क श्रृंखलाएं कुछ हद तक महाकाव्य हैं, इसलिए मेरे कोड में बग के लिए बहुत जगह है और सिम्युलेटर में । ;)

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

इट डू नथिंग

All(Not(Equals(Line(18),Line(21))),Equals(Line(21),Line(22))):Copy(Line(21),Line(18))
All(Not(Equals(Line(21),Line(22))),Equals(Line(22),Line(18))):Copy(Line(22),Line(21))
All(Not(Equals(Line(22),Line(18))),Equals(Line(18),Line(21))):Copy(Line(18),Line(22))
All(Any(BotAt(Add(D,1)),BotAt(Add(D,2)),BotAt(Add(D,3))),Not(BotAt(D))):Move
All(Any(All(BotAt(D),BotAt(Add(D,2))),All(BotAt(D),BotAt(Add(D,1))),All(BotAt(Add(D,1)),BotAt(Add(D,2)))),Not(BotAt(Add(D,3)))):Copy(Add(D,3),D)
Any(All(Any(All(BotAt(D),BotAt(Add(D,2))),All(BotAt(D),BotAt(Add(D,3))),All(BotAt(Add(D,2)),BotAt(Add(D,3)))),Not(BotAt(Add(D,1)))),All(BotAt(Add(D,1)),BotAt(D),Any(Equals(OCond(2),Cond(20)),Equals(OLine(2),Line(19))))):Copy(Add(D,1),D)
All(BotAt(Add(D,3)),BotAt(D),Any(Equals(OCond(2),Cond(20)),Equals(OLine(2),Line(19)))):Copy(Add(D,3),D)
All(BotAt(D),Not(Equals(OCond(2),Cond(20))),Not(Equals(OLine(2),Line(19)))):Copy(Cond(20),OCond(2))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(3),Line(18)))):Copy(Line(18),OLine(3))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(4),Line(21)))):Copy(Line(21),OLine(4))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OCond(0),Cond(22)))):Copy(Cond(22),OCond(0))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(0),Line(17)))):Copy(Line(17),OLine(0))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OCond(1),Cond(21)))):Copy(Cond(21),OCond(1))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(1),Line(20)))):Copy(Line(20),OLine(1))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(2),Line(19)))):Copy(Line(19),OLine(2))
All(BotAt(D),Not(Equals(OCond(2),Cond(20))),Equals(OLine(2),Line(19))):Copy(Add(D,A),D)
Equals(E,1):Copy(Add(A,2),A)
Any(Equals(E,4),Equals(E,8)):Copy(Add(D,E,A),D)
Not(Equals(A,A)):Flag
Not(Equals(A,A)):Copy(Line(3),OLine(E))
Equals(A,A):Move
Any(Equals(E,4),Equals(E,5),Equals(E,6),Equals(E,7),Equals(E,8),Equals(E,9)):Flag
Any(Equals(E,10),Equals(E,11),Equals(E,12),Equals(E,13)):Flag
Start:Copy(1,A)

मैं एक बग नहीं देख सकता, लेकिन सिर्फ मामले में आपको शायद Modifiedकुछ के बजाय हालत का उपयोग करना चाहिएEquals
मेगाटॉम

cliqueBot ऐसा लगता है कि यह एक ही समस्या है। मुझे लगता है कि यह एक कंपाइलर बग है।
मेगाटॉम सिप

@MegaTom: Modifiedहालत एक अनंत लूप के लिए एक निमंत्रण है। अगर मैं समता जांच का उपयोग नहीं कर सकता, तो मैं पूरी तरह से लाइनों को हटा दूँगा। उन्हें बाहर लाने के लिए कुछ और उपयोगी चित्र। ;)
सीओटीओ

मुझे लगता है कि मुझे नियंत्रक में बग मिला। मैंने उसे एक अनुरोध भेजा। जब तक वह इसे स्वीकार नहीं करता, तब तक आप मेरे कांटे को आजमा सकते हैं यदि आप चाहें और मुझे बताएं कि क्या यह आपके लिए काम करता है।
ccarton

1

पहरेदार

पर सुधार Gard। पहले 8 लाइनों पर झंडे के साथ बॉट्स के पास हिट्स। (यह है, सभी सबसे अधिक इस्तेमाल किया)

flag
flag
Start:Copy(11,B)
All(BotAt(D),Not(Equals(OLine(Mod(E,8)),Line(0))),Not(BotAt(Add(D,1,Mod(E,3))))):If(Equals(OVar(D),Add(D,2)),Line(7),Line(8))
BotAt(Add(D,1)):Copy(Add(D,1),D)
BotAt(Add(D,2)):Copy(Add(D,2),D)
BotAt(Add(D,3)):Copy(Add(D,3),D)
copy(D,OVar(D))
copy(Line(Mod(E,2)),OLine(Mod(E,8)))
Not(Equals(Line(0),Line(1))):copy(Line(Add(9,Mod(E,16))),Line(Mod(E,2)))

मुझे लगता है कि आपके पास पंक्ति 3 पर एक गलत ब्रैकेट है। पहला नहीं ठीक से बंद नहीं हुआ है। मुझे लगता है कि यह होना चाहिएAll(BotAt(D),Not(Equals(OLine(Mod(E,8)),Line(0))),Not(BotAt(Add(D,1,Mod(E,3))))):
ccarton

1

CliqueBorg

Flag
BotAt(D): Copy(Line(Sub(This,1)),OLine(E))
Equals(1,1): Copy(Line(Sub(This,2)),Line(Add(This,Mod(E,21))))
Start: Move
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),1)),Line(3)))):Copy(Line(3),OLine(Sub(OVar(C),1)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),1)),Cond(3)))):Copy(Cond(3),OCond(Sub(OVar(C),1)))
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),2)),Line(2)))):Copy(Line(2),OLine(Sub(OVar(C),2)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),2)),Cond(2)))):Copy(Cond(2),OCond(Sub(OVar(C),2)))
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),3)),Line(1)))):Copy(Line(1),OLine(Sub(OVar(C),3)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),3)),Cond(4)))):Copy(Cond(4),OCond(Sub(OVar(C),3)))

एक ऑफसेट बनाने के लिए CliqueBot और Borg तकनीक को मिलाने की कोशिश करना जो लाइन ऑफ़सेट के बावजूद खुद की प्रतियों को पहचानता है। यह विरोधात्मक बॉट पर कोड 0 के बजाय अंतिम निष्पादित लाइन पर अपनी प्रतिलिपि बनाने की प्रक्रिया शुरू करता है, जो कि लाइन 0 के बजाय इसे फ्रीज करने की अधिक संभावना है, लेकिन एक दूषित कॉपी में परिणाम की अधिक संभावना है (वास्तव में, मैं नहीं हूं यकीन है कि यह भी काम करता है, मैंने इसका परीक्षण नहीं किया है और यह बहुत जटिल है)।


कृपया प्लस और मिनस के साथ उप
नाथन मेरिल

1

द्वारा ले जाया गया

अंतिम समय सीमा से पहले एक प्रयास करें।

Flag
Flag
BotAt(D):Copy(Line(Sub(This,1)),OLine(E))
Equals(1,1):Copy(Line(Sub(This,2)),Line(Add(This,Mod(E,21))))
Start:Move
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),1)),Line(3)))):Copy(Line(3),OLine(Sub(OVar(C),1)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),1)),Cond(3)))):Copy(Cond(3),OCond(Sub(OVar(C),1)))
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),2)),Line(2)))):Copy(Line(2),OLine(Sub(OVar(C),2)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),2)),Cond(2)))):Copy(Cond(2),OCond(Sub(OVar(C),2)))
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),3)),Line(1)))):Copy(Line(1),OLine(Sub(OVar(C),3)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),3)),Cond(4)))):Copy(Cond(4),OCond(Sub(OVar(C),3)))
BotAt(D):Copy(Add(D,1),D)
Equals(1,1):Move
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.