ยินดีต้อนรับกลับ! ฉันตื่นเต้นที่จะนำเสนอความท้าทาย CodeBots ที่ 3 อันนี้มีมานานแล้วในการทำ ความท้าทายนี้จะแบ่งออกเป็น 3 ส่วน ได้แก่ รุ่นสั้นรุ่นยาวและรายละเอียดเพิ่มเติม
เวอร์ชั่นสั้น
ผู้แข่งขันแต่ละคนจะเขียนโปรแกรม 24 คำสั่ง บอทเหล่านี้จะย้ายไปทั่วโลกและคัดลอกรหัสไปยังบอตอื่น ๆ ในขณะที่พยายามป้องกันไม่ให้บ็อตอื่นทำเช่นเดียวกัน Flag
หนึ่งในคำสั่งที่เป็นไปได้คือไม่มี-op หากบอทมีFlag
มากกว่าบอทอื่นFlag
คุณก็จะได้คะแนน คุณชนะโดยมีคะแนนมากที่สุด
ทั้งหมดที่กล่าวมาเป็นจริงสำหรับความท้าทายสองประการที่ผ่านมา คราวนี้บอทจะสามารถเรียกใช้โค้ดหลายบรรทัดในเวลาเดียวกันได้
รุ่นยาว
API
บอททุกคนจะมี 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
หยุดเธรดที่แนบกับตัวแปรV
เมื่อสิ้นสุดเทิร์นนี้
ล็อค V
ป้องกันไม่ให้เส้นหรือตัวแปรV
จากการถูกนำมาใช้ในทางใดทางหนึ่งLock
นอกจากด้ายที่เรียกว่า โทรตามมาโดยปลดล็อคหัวข้อเดียวกันLock
V
ล็อคไม่สามารถเรียกใช้กับตัวแปรหรือเส้นของคู่ต่อสู้
ถ้า Cond VW
Cond
นี้จะทดสอบ ถ้าเงื่อนไขเป็นจริงแล้วมันจะย้ายตัวชี้ด้ายจำนวนบรรทัดมิฉะนั้นจะหมายเลขบรรทัดV
W
บรรทัดนั้นจะถูกดำเนินการทันที
Conditionals สามารถX=Y
, X<Y
, !X
หรือ?X
:
X=Y
ทดสอบว่าสองบรรทัดเป็นประเภทเดียวกันและจากบอทเดียวกันหรือไม่หรือคุณทดสอบว่าสองค่ามีค่าเท่ากันหรือไม่X<Y
ทดสอบว่าค่าX
น้อยกว่าY
หรือไม่!X
ทดสอบว่าตัวแปรหรือบรรทัดX
ถูกล็อคหรือไม่ (คืนจริงถ้าล็อค)?X
ทดสอบว่าตัวแปรที่กำหนดมีเธรดติดอยู่หรือไม่
รายละเอียดเพิ่มเติม
การทำงานแบบมัลติเธรด
การกระทำประเภทเดียวกันจะดำเนินการในเวลาเดียวกัน การดำเนินการจะดำเนินการตามลำดับต่อไปนี้:
ล็อค. หากมีหลายเธรดพยายามล็อกตัวแปรทั้งหมดจะล้มเหลว หากเธรดกำลังปลดล็อกตัวแปรขณะที่อีกอันพยายามล็อกตัวแปรนั้นจะยังคงถูกปลดล็อค
เริ่มต้น หากมีหลายเธรดพยายามเริ่มเธรดกับตัวแปรมันจะนับเป็นการเริ่มต้นครั้งเดียว
สำเนา. หากทั้งสองเธรดคัดลอกทั้งสองไปยังตัวแปรเดียวกันตัวแปรจะจบลงด้วยค่าสุ่ม หากพวกเขาทั้งคู่คัดลอกไปยังบรรทัดเดียวกันจะไม่ทำงาน หากเธรดคัดลอกไปยังตัวแปรเดียวกันอีกเธรดหนึ่งกำลังคัดลอกจากเธรดหลังจะคัดลอกค่าแบบสุ่ม หากทั้งสองเธรดกำลังคัดลอกจากตัวแปรเดียวกันทั้งสองเธรดจะทำงานได้ดี
ถ้า. เงื่อนไขทั้งหมดจะถูกทดสอบพร้อมกันจากนั้นตัวแปรเธรดจะได้รับการอัปเดตหลังจากนั้น การเรียกใช้งาน
If
สามารถทำให้แอคชันที่มีลำดับความสำคัญสูงกว่าถูกเพิ่มเข้าไป การกระทำที่มีความสำคัญสูงจะถูกดำเนินการก่อนที่จะย้ายที่ผ่านมาในขณะที่การกระทำที่มีความสำคัญที่ต่ำกว่าจะดำเนินการหลังจากที่If
If
ย้าย. การเคลื่อนไหวหลายครั้งบนบอทเดียวกันจะย้ายบอทรวมของการเคลื่อนไหวทั้งหมด หากบอตหลายตัวจบลงที่จุดเดียวกันพวกมันจะกลับสู่จุดเริ่มต้น
กลับ. การหมุนหลายครั้งบนบอทเดียวกันจะรวมกัน
หยุด. คำสั่งหยุดหลายคำสั่งในตัวแปรเดียวกันจะนับเป็นการหยุดครั้งเดียว
รายละเอียดอื่น ๆ
เธรดเริ่มต้นของคุณเริ่มแนบกับD
ตัวแปร
Recursing กับIf
(มีIf
คำสั่งชี้ไปที่ตัวเอง) จะทำให้ ธ ปทของคุณจะทำอะไร
หากเธรดหยุดหลังจากล็อคการล็อคเหล่านั้นจะถูกปลดล็อค
การกระทำที่ใช้ตัวแปรหรือบรรทัดที่ถูกล็อคจะไม่ทำอะไรเลย
หากบอทสั้นกว่า 24 บรรทัดบรรทัดที่เหลือจะถูกเติมด้วย Flag
การดำเนินการเขียนในตัวแปรที่เชื่อมต่อกับเธรดเริ่มต้นจะทำให้เธรดเริ่มการทำงานโดยใช้ค่าใหม่เนื่องจากเธรดเริ่มการหมุนต่อไปนี้
บอทจะถูกวางไว้ในโลก toroidal ในรูปแบบต่อไปนี้:
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