นี่เป็นปัญหาที่น่าสนใจที่ฉันนึกถึงเมื่อวันก่อนซึ่งเกี่ยวข้องกับบิตของโค้ดที่แข่งขันกับบิตของโค้ดอื่น ๆ ไม่ใช่แค่ในคุณสมบัติที่โค้ดมี แต่โดยการเล่นเกมกับบิตของโค้ดอื่น ๆ
งานของคุณคือการสร้างโปรแกรมที่ใช้สถานะปัจจุบันของกระดาน Go และกำหนดสิ่งที่จะทำหรือผ่าน
โปรแกรมของคุณจะยอมรับสิ่งต่อไปนี้เป็นอินพุต:
19 บรรทัดแต่ละตัวมี 19 ตัวอักษรเป็นตัวแทนของชิ้นส่วนปัจจุบันบนกระดานไป อักขระของ
0
หมายถึงสี่เหลี่ยมจัตุรัสที่ว่างเปล่า1
คือสีดำและ2
เป็นสีขาวตัวเลขสองหมายเลขแสดงถึงจำนวนชิ้นนักโทษที่ผู้เล่นแต่ละคนมี (สีดำและสีขาว)
หมายเลขหนึ่งที่แสดงถึงการหมุน (สีดำหรือสีขาว) ดังกล่าว
1
เป็นสีดำและ2
เป็นสีขาว
และส่งออกอย่างใดอย่างหนึ่งต่อไปนี้:
คู่ของพิกัดที่
a b
แสดงถึงพิกัดที่จะย้าย1 1
คือจตุรัสบนซ้ายและตัวเลขที่หนึ่งและที่สองหมายถึงการเลื่อนลงและไปทางขวาตามลำดับสตริง
pass
ซึ่งแสดงถึงการย้ายที่จะผ่าน
ตัวอย่างเช่นโปรแกรมอาจได้รับอินพุตต่อไปนี้:
0000000000000000000
0000000000000000000
0000000000000000000
0001000000000002000
0000000000000000000
0000000000000000000
0001210000000000000
0000100000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0002000000000001000
0000000000000000000
0000000000000000000
0000000000000000000
0 0 1
ซึ่งแสดงถึงเกมที่มีการเคลื่อนไหวเพียงไม่กี่ครั้ง
จากนั้นโปรแกรมอาจแสดงผล6 5
ซึ่งหมายถึง "วางหินดำที่จุดที่ 6 จากด้านบนและที่ 5 จากทางซ้าย" 7 5
นี้จะจับภาพหินสีขาวที่ สถานะของคณะกรรมการจะเปลี่ยนเป็น:
0000000000000000000
0000000000000000000
0000000000000000000
0001000000000002000
0000000000000000000
0000100000000000000
0001010000000000000
0000100000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0002000000000001000
0000000000000000000
0000000000000000000
0000000000000000000
1 0 2
(โปรดทราบว่าแม้ว่าจะมีก้อนหินสีขาวถูกจับ แต่ก็นับว่าเป็นนักโทษสำหรับคนผิวดำ)
รหัสของคุณจะต้องเป็นไปตามคุณสมบัติต่อไปนี้เพิ่มเติม:
หากโปรแกรมของคุณได้รับสถานะอินพุตเดียวกันมันจะต้องสร้างเอาต์พุตเดียวกันเสมอ นี่คือระดับของ Go AI มันจะต้องไม่มีองค์ประกอบแบบสุ่ม
โปรแกรมของคุณต้องไม่ใช้เวลานานกว่าประมาณ 60 วินาทีเพื่อพิจารณาว่าจะย้ายไปทางไหน กฎนี้จะไม่ถูกนำมาใช้อย่างเคร่งครัดเนื่องจากความแปรปรวนของกำลังการคำนวณ แต่จะต้องดำเนินการในเวลาที่เหมาะสม
ซอร์สโค้ดของโปรแกรมของคุณต้องไม่เกิน 1 เมกะไบต์ (1,048,576 ไบต์)
โปรแกรมของคุณจะต้องดำเนินการทางกฎหมายเสมอ โปรแกรมของคุณไม่สามารถเคลื่อนย้ายหินที่มีอยู่แล้วและไม่สามารถวางชิ้นส่วนที่จะส่งผลให้กลุ่มของหินถูกจับ (ข้อยกเว้นสำหรับกฎสำหรับวัตถุประสงค์ของการท้าทายนี้คือโปรแกรมอนุญาตให้สร้างตำแหน่งที่มีอยู่เดิม - เนื่องจากได้รับตำแหน่งปัจจุบันของบอร์ดเท่านั้นจึงไม่สามารถคาดหวังได้ว่าจะเก็บสิ่งที่เคลื่อนไหว ก่อน.)
การส่งของคุณจะเล่นในทัวร์นาเมนท์ที่เล่นได้ทั้งหมดกับการส่งอื่น ๆ ทั้งหมดในเกมโกที่สถานะของกระดานเริ่มว่างเปล่าและแต่ละโปรแกรมจะเปลี่ยนเป็นฟีดตำแหน่งของกระดานและเคลื่อนไหว .
การส่งแต่ละคู่จะเล่นสองรอบ - หนึ่งรอบโดยผู้เล่นแต่ละคนจะเป็นสีดำ เนื่องจาก AIs ในปัญหานี้ถูกกำหนดไว้อย่างสมบูรณ์ดังนั้นการเล่น AIs เดียวกันสองรายการด้วยกันจะส่งผลให้เกิดการเล่นเกมเดียวกันทุกครั้ง
เงื่อนไขสำหรับการชนะเป็นเช่นนี้:
หากโปรแกรมของคุณเล่นจนจบเกมกฎการให้คะแนนของจีนจะใช้เพื่อตัดสินผู้ชนะ จะไม่มีการใช้โคมิ
หากโปรแกรมของคุณเล่นจนถึงจุดที่ถึงสถานะก่อนหน้านี้ซึ่งก่อให้เกิดการวนซ้ำไม่สิ้นสุดโปรแกรมสองโปรแกรมจะถูกประกาศให้เชื่อมโยงกัน
การส่งของคุณจะได้รับคะแนนโดยคะแนนกี่คะแนนเทียบกับการส่งอื่น ๆ การชนะมีค่า 1 คะแนนและการเสมอมีค่าครึ่งคะแนน การส่งที่มีคะแนนมากที่สุดคือผู้ชนะโดยรวม
นี่เป็นความท้าทายที่ยอดเยี่ยมซึ่งทุกคนสามารถโพสต์รายการใหม่ได้ตลอดเวลาและอันดับจะได้รับการประเมินซ้ำเป็นระยะเมื่อเกิดเหตุการณ์นี้