CodeBots 2: การออกแบบที่ขับเคลื่อนด้วยเหตุการณ์


11

ยินดีต้อนรับสู่ Code Bots 2!

คุณได้เรียนรู้บทเรียนของคุณตั้งแต่รหัสบอทสุดท้าย คุณได้พยายามหาวิธีเพิ่มเติมเพื่อให้เหมาะกับการกระทำที่มากขึ้นโดยใช้บรรทัดน้อยลงและในที่สุดคุณก็มีมันแล้ว คุณกำลังจะสร้าง Code Bot ที่ขับเคลื่อนด้วยเหตุการณ์

บอตของคุณต้องประกอบด้วย 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 เป็นเท็จ Cต้องเป็นเงื่อนไข

ตัวแปรสามารถอยู่ในรูปแบบใดรูปแบบหนึ่งต่อไปนี้ 9 ตัวแรกเป็นตัวเลขและสามารถใช้ได้เมื่อใดก็ตามที่มีการใช้ N ในหน้านี้

  1. A, B, C, D,E
  2. ตัวเลขตั้งแต่ 0 ถึง 23
  3. This จะส่งคืนหมายเลขบรรทัดที่มีอยู่ในปัจจุบัน
  4. Add(N1,N2,...) จะส่งคืนผลรวมของค่าทั้งหมด
  5. Sub(N1,N2) จะกลับ N1 ลบ N2
  6. Mult(N1,N2,...) จะส่งคืนผลิตภัณฑ์ของค่าทั้งหมด
  7. Div(N1,N2) จะกลับ N1 หารด้วย N2
  8. Mod(N1,N2) จะกลับ N1 mod N2
  9. OVar(N) จะยอมรับชื่อตัวแปรและจะคืนค่าตัวแปรของคู่ต่อสู้
  10. Line(N) จะส่งคืนบรรทัดที่ N ในรหัสของคุณ
  11. Type(N) จะส่งคืนประเภทบรรทัด Nth ในรหัสของคุณ (ประเภทคือชื่อของการกระทำ)
  12. Cond(N) จะส่งคืนเงื่อนไขในบรรทัด Nth
  13. CondType(N) จะส่งคืนชนิดเงื่อนไขบนบรรทัด Nth (ชนิดคือชื่อของเงื่อนไข)
  14. OLine(N) จะส่งคืนบรรทัดที่ N ในโค้ดของคู่ต่อสู้ของคุณ
  15. OType(N) จะส่งคืนประเภทบรรทัด Nth ในรหัสของฝ่ายตรงข้าม
  16. OCond(N) จะส่งคืนเงื่อนไขในบรรทัด Nth
  17. OCondType(N) จะคืนค่าชนิดเงื่อนไขบนบรรทัด Nth

AและBเพื่อการใช้งานส่วนตัวของคุณใช้Cเพื่อกำหนดว่าบรรทัดใดที่จะดำเนินการในโค้ดของคุณและDใช้เป็นทิศทาง ค่าแต่ละค่าของการDอ้างอิงถึงสแควร์และทิศทางที่แตกต่างกัน Eสร้างค่าสุ่มในแต่ละครั้ง Dและจะได้รับการเริ่มต้นเป็นค่าสุ่มมิฉะนั้นE0

[North,East,South,West][D%4]ทิศทางที่ใช้จะเป็น ฝ่ายตรงข้ามของคุณคือบอทในจตุรัสทันทีในทิศทางนั้น

คุณสามารถดำเนินการได้ 4 การกระทำ:

  1. Moveจะย้ายคุณไปข้างหน้า 1 ตารางไปในDทิศทางที่ หากมีบอทอยู่ที่นั่นคุณจะไม่ย้าย
  2. Copy(A,B)จะคัดลอกตัวแปรที่จะ A ไม่สามารถเป็นค่าตัวเลขได้ยกเว้นชื่อตัวแปร และไม่สามารถเป็นประเภทที่แตกต่างกัน การคัดลอกบรรทัดไม่ได้คัดลอกเงื่อนไขBBAB
  3. Flagไม่ทำอะไรเลย บอทที่มีค่าสถานะมากที่สุดในรหัสของคุณจะได้รับคะแนน บอทที่มีคะแนนมากที่สุดชนะ
  4. If(C,L1,L2)จะดำเนินการในสายL1ถ้าเป็นจริงจะดำเนินการอื่นC ๆ เป็นเงื่อนไขและและจะต้องเป็นเส้นL2CL1L2

รูปภาพขนาดใหญ่

บอททุก 50 สำเนาจะถูกวางไว้ในโลก เป้าหมายของคุณคือการทำให้ธงของคุณเป็นบอทมากที่สุด สำหรับบ็อตแต่ละตัวที่มีประเภทธงของคุณมากกว่าประเภทธงอื่น ๆ คุณจะได้รับคะแนน

บอทจะถูกวางไว้ดังนี้:

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

จะมีการวิ่ง 10 เกมและคะแนนจะได้รับการเฉลี่ยในทุกเกมโดยพิจารณาว่าใครเป็นผู้ชนะ

หมายเหตุด้านข้าง

หากมีการใช้หลายเงื่อนไขStartจะมีการดำเนินการเงื่อนไขที่ immedately มากที่สุดดังนี้

บอทจะถูกบรรจุอย่างใกล้ชิด แต่คุณจะไม่เริ่มใกล้กับบ็อตอื่น (มันจะเป็นรูปแบบเดียวกับ CodeBots ล่าสุด)

เนื่องจากความท้าทายนี้ไม่ได้โพสต์ไว้ในกล่องทราย (เพื่อให้ไม่มีใครได้เปรียบ) ฉันขอสงวนสิทธิ์ในการเปลี่ยนแปลงรายละเอียดเล็กน้อยเพื่อความเป็นธรรมหรือความสามารถเพิ่มเติม นอกจากนี้หากมีข้อผิดพลาดในนักวิ่ง CodeBots ฉันจะเปลี่ยนมันแม้ว่าบอทจะขึ้นอยู่กับข้อบกพร่องนั้นเพื่อความสำเร็จ ฉันพยายามที่จะยุติธรรมเท่าที่จะทำได้

Ifงบเรียกซ้ำจะไม่ถูกดำเนินการ

หากบอทของคุณสั้นกว่า 24 บรรทัดบรรทัดที่เหลือจะถูกเติมด้วย Flag

จำไว้ว่าเมื่อคัดลอกไปยังของคุณเองCที่Cเพิ่มขึ้นในตอนท้ายของตาคุณ

ล่าม CodeBots สามารถพบได้ที่นี่ มันมีไฟล์. jar สำหรับการดำเนินการที่ง่าย เพียงเพิ่มบอตของคุณไปยังโฟลเดอร์บอท

คะแนน

  1. 893.9 Borg
  2. 1.3 LazyLioness
  3. 0.9 ผู้พิทักษ์
  4. 0.5 Flagger
  5. 0.4 CliqueBot
  6. 0.4 ร้ายกาจ
  7. 0.3 ผู้โจมตี
  8. 0.3 Gard
  9. 0.3 SingleTarget
  10. 0.2 แช่แข็ง
  11. 0.2 Sentinel
  12. 0.2 Driveby
  13. 0.0 AntiInsidious
  14. 0.0 MoveBot
  15. 0.0 CliqueBorg
  16. 0.0 เครื่องคิดเลข
  17. 0.0 TestBot
  18. 0.0 ผู้ลอกเลียนแบบ

UPDATE

เส้นรหัสหมุนตอนนี้เมื่อคุณดูรหัสของคู่ต่อสู้ นั่นหมายความว่าสาย 1 ของคู่ต่อสู้ของคุณอาจเป็นสาย 14 (หรือเส้นใดก็ได้) บอทจะได้คงชดเชยซึ่งจะชดเชยเส้นของเขาโดยXจำนวนเงินที่เมื่อมองจากฝ่ายตรงข้าม Cตัวแปรของฝ่ายตรงข้ามจะถูกชดเชยด้วยXจำนวน เดียวกัน Xจะไม่เปลี่ยนแปลงภายในเกมเดียวกัน แต่จะเปลี่ยนจากเกมเป็นเกม


นาธาน: คุณสามารถดู "Lazy Lioness" เพื่อดูว่าข้อผิดพลาดที่ฉันรายงานนั้นถูกต้องตามกฎหมายหรือไม่ ไม่รีบ. เพียงทำให้แน่ใจว่าคุณรับรู้ถึงการส่ง
COTO

@COTO ขออภัยโรงเรียนบ้าไปแล้ว ฉันจะพยายามไปให้ถึงคืนนี้
Nathan Merrill

เงื่อนไข 'ทั้งหมด' อาจถูกสร้างขึ้นโดยนัยสำหรับรายการเงื่อนไขใด ๆ ที่คั่นด้วยเครื่องหมายจุลภาค มันจะทำให้การอ่านรายการง่ายขึ้นเล็กน้อย
ccarton

ฉันคิดว่าฉันพบข้อผิดพลาดของคุณ มีการใช้วัตถุ FuctionParser เป็นคีย์ใน HashMap ซึ่งหมายความว่าคุณต้องการวิธีการที่เหมาะสม วิธีนี้จะช่วยแก้ไขปัญหากับ CliqueBot และ Less Lioness เช่นกัน ฉันส่งคำขอการดึงให้คุณ
ccarton

@ccarton the HashMap จดจำเฉพาะค่าเท่านั้นมันไม่ได้ใช้สำหรับการทดสอบความเท่าเทียมกัน
Nathan Merrill

คำตอบ:


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

แก้ไข: แก้ไขเล็กน้อยเพื่อรีเซ็ต A หากคู่ต่อสู้เคลื่อนที่ก่อนที่ฉันจะทำกับเขา ดูเหมือนจะไม่ส่งผลกระทบต่อคะแนน แต่มันทำให้ฉันรู้สึกดีขึ้น

แก้ไข # 2: เพิ่มการตรวจสอบที่สมบูรณ์มากขึ้นเพื่อให้แน่ใจว่ากระบวนการโคลนเสร็จสิ้นอย่างถูกต้อง (บรรทัดที่ 3)

แก้ไข # 3: อัปเดตเพื่อจัดการออฟเซ็ตแบบสุ่มใหม่ ความยากของที่นี่คือโคลนใหม่จะมีรหัสของพวกเขาอยู่ที่การสุ่มออฟเซ็ตซึ่งหมายความว่าพวกเขาไม่รู้ตำแหน่งของเส้นของตัวเอง นั่นหมายความว่าการอ้างอิงทั้งหมดไปยังบรรทัดของฉันต้องเป็นญาติ (ถึงThis) หมายเลขบรรทัดของฝ่ายตรงข้ามยังคงเป็นค่าสัมบูรณ์เนื่องจากเป็นแบบสุ่มอยู่ดี


เฮ้เราคุยเรื่องบ็อตนี้ได้ไหม chat.stackexchange.com/rooms/17128/…
Nathan Merrill

@Nathan คุณใช้เวอร์ชันล่าสุดของรายการนี้ในการรันล่าสุดหรือไม่?
ccarton

ฉันประหลาดใจที่บอทนี้สามารถแพร่กระจายบ็อตอื่นได้สำเร็จ ฉันชอบที่จะดูบทสรุปว่ามันทำงานอย่างไร
Sparr

@ กล่องหมายเลข ฉันไม่รู้ว่ามันได้รับการปรับปรุง rerunning
Nathan Merrill

@Sparr ฉันได้เพิ่มความคิดเห็นแล้ว หวังว่ามันจะง่ายต่อการติดตาม ฉันคิดว่าบอทนั้นมีประสิทธิภาพมากเพราะผลกระทบของการโคลนนิ่ง บอทแต่ละตัวมันจะออกไปและติดเชื้ออื่น ๆ พวกเขาจะพยายามซ่อมแซมซึ่งกันและกันตามธรรมชาติเมื่อพวกเขาได้รับความเสียหาย
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!
MegaTom

@MegaTom Done;)
สามัญซื้อ

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-indexed ควรตรวจสอบก่อนจริง ๆ ว่า เพิ่มธงในตอนต้นเพื่อชนทุกอย่าง


ฉันคิดว่าฉันพบข้อผิดพลาดในคอนโทรลเลอร์ ฉันส่งคำขอดึงให้เขา จนกว่าเขาจะยอมรับคุณสามารถลองใช้ส้อมของฉันถ้าคุณชอบและแจ้งให้เราทราบหากมันเหมาะกับคุณ
ccarton

ข้อผิดพลาดได้รับการแก้ไขในรุ่นล่าสุด
Nathan Merrill



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

@Sieg Lineคัดลอกเฉพาะการกระทำเท่านั้นไม่ใช่เงื่อนไข
MegaTom

ชั้นเชิงของฉันสู้ :(
seequ

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

@ 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)))

โจมตีหุ่นยนต์ใด ๆ ที่อยู่ข้างๆ


บรรทัดสุดท้ายของคุณไม่สามารถคัดลอกจากเงื่อนไขไปยังบรรทัด
Nathan Merrill

@NathanMerrill ฉันแค่ซ่อมมัน ...
MegaTom

OConต้องเป็นOCond
Nathan Merrill

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)
Nathan Merrill

คุณสมมติว่าการเริ่มต้นอยู่ที่บรรทัดที่ศูนย์ ตอนนี้ทุกคนมีแรงจูงใจที่จะทำให้การเริ่มต้นของพวกเขาในบรรทัดที่ 2 นี้จะนำไปสู่แนวโน้มที่เพิ่มขึ้นโง่ / ส่งใหม่ :(
Sparr

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

Lazy Lioness

เดิมทีเป็นเพียง "ไลโอเนส" การส่งครั้งแรกของฉันในการประกวดทำให้ได้รับชื่อ "ขี้เกียจ" โดยไม่ทำอะไรเลยเมื่อนำเข้าสู่การจำลอง

ความง่วงของเธอคือในความเป็นจริงเนื่องจากข้อผิดพลาด (หรืออาจจะเป็นความเข้าใจผิดของฉันแบบจำลองเหตุการณ์) ประเด็นเงื่อนไขในสามบรรทัดแรก (การตรวจสอบความเท่าเทียมกันง่ายสำหรับการสร้างความมั่นใจว่าธงไม่ได้ถูกเขียนทับ) เป็นครั้งคราวอย่างลึกลับประเมินtrueล็อคสิงห์ในวง lemniscate เหรอ . เงื่อนไขอื่น ๆ อีกมากมาย (โดยเฉพาะผู้ที่อาศัยBotAt()เงื่อนไข) ก็ประเมินtrueเวลาที่ไม่มีบอทที่อยู่ติดกัน ในที่สุดMoveและCopyคำสั่งจะถูกละเว้นอย่างชัดเจนเมื่อก้าวผ่านตัวจำลอง เนื่องจากเครือข่ายลอจิกแบบมีเงื่อนไขของฉันค่อนข้างใหญ่มีพื้นที่มากมายสำหรับข้อบกพร่องในรหัสของฉันและในโปรแกรมจำลอง ;)

ไม่ว่าในกรณีใดฉันส่ง Lazy Lioness เป็นกรณีทดสอบสำหรับการวินิจฉัยข้อผิดพลาดหรือการดีบักเครื่องจำลองซึ่งหวังว่าจะนำไปสู่การเกิดขึ้นของ Lioness ที่ไม่ขี้เกียจที่ว่าฉันสามารถจำลองและปรับแต่งได้ การแข่งขัน 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
MegaTom

cliqueBotดูเหมือนว่าจะมีปัญหาเดียวกัน ฉันคิดว่ามันเป็นข้อผิดพลาดของคอมไพเลอร์
MegaTom

@MegaTom: Modifiedเงื่อนไขเป็นคำเชิญสำหรับการวนซ้ำไม่สิ้นสุด หากฉันไม่สามารถใช้การตรวจสอบพาริตี้ฉันจะลบบรรทัดทั้งหมด คิดออกอย่างอื่นมีประโยชน์ที่จะใส่ใน 'em ;)
COTO

ฉันคิดว่าฉันพบข้อผิดพลาดในคอนโทรลเลอร์ ฉันส่งคำขอดึงให้เขา จนกว่าเขาจะยอมรับคุณสามารถลองใช้ส้อมของฉันถ้าคุณชอบและแจ้งให้เราทราบหากมันเหมาะกับคุณ
ccarton

1

แมวมอง

improvment 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 Not แรกไม่ปิดอย่างถูกต้อง ฉันคิดว่ามันควรจะเป็น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 เพื่อสร้างบอทที่รับรู้สำเนาของตัวเองแม้จะมีออฟเซ็ตบรรทัด นอกจากนี้ยังเริ่มกระบวนการคัดลอกที่บรรทัดสุดท้ายของโค้ดบน bot ตรงข้ามมากกว่าบรรทัด 0 ซึ่งมีแนวโน้มที่จะแช่แข็งไว้ในตำแหน่ง แต่ยังมีแนวโน้มที่จะทำให้สำเนาเสียหาย (ที่จริงแล้วฉันไม่ใช่ แน่ใจว่ามันใช้งานได้ดีฉันยังไม่ได้ทดสอบและมันค่อนข้างซับซ้อน)


โปรดแทนที่เครื่องหมายบวกด้วยส่วนเพิ่มและลบด้วย Sub
Nathan Merrill

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.