ยินดีต้อนรับกลับ! ฉันตื่นเต้นที่จะนำเสนอความท้าทาย 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สามารถทำให้แอคชันที่มีลำดับความสำคัญสูงกว่าถูกเพิ่มเข้าไป การกระทำที่มีความสำคัญสูงจะถูกดำเนินการก่อนที่จะย้ายที่ผ่านมาในขณะที่การกระทำที่มีความสำคัญที่ต่ำกว่าจะดำเนินการหลังจากที่IfIfย้าย. การเคลื่อนไหวหลายครั้งบนบอทเดียวกันจะย้ายบอทรวมของการเคลื่อนไหวทั้งหมด หากบอตหลายตัวจบลงที่จุดเดียวกันพวกมันจะกลับสู่จุดเริ่มต้น
กลับ. การหมุนหลายครั้งบนบอทเดียวกันจะรวมกัน
หยุด. คำสั่งหยุดหลายคำสั่งในตัวแปรเดียวกันจะนับเป็นการหยุดครั้งเดียว
รายละเอียดอื่น ๆ
เธรดเริ่มต้นของคุณเริ่มแนบกับ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