พื้นหลัง
Hexเป็นเกมกลยุทธ์นามธรรมผู้เล่นสองคนที่เล่นบนK×K
รูปสี่เหลี่ยมขนมเปียกปูนของแผ่นกระเบื้องหกเหลี่ยม สองฝั่งตรงข้ามของรูปสี่เหลี่ยมขนมเปียกปูนเป็นสีขาวและอีกสองสีดำและผู้เล่นสองคนสีดำและสีขาวผลัดกันวางสัญลักษณ์ของสีของพวกเขาบนกระเบื้องที่ว่าง ผู้เล่นคนแรกที่สร้างเส้นทางระหว่างฝั่งตรงข้ามของสีเป็นผู้ชนะ เป็นที่ทราบกันดีว่าเกมไม่สามารถจบด้วยการเสมอกันและผู้เล่นคนแรกมีกลยุทธ์ในการชนะโดยไม่คำนึงถึงขนาดของบอร์ด (ดูรายละเอียดในหน้า Wikipedia)
งาน
ในความท้าทายนี้เราจะกำหนดขนาดกระดานที่K = 4
และแสดงกระดานเป็นตารางต่อไปนี้ เส้นหนาแสดงถึงกระเบื้องที่อยู่ติดกัน
งานของคุณคือสร้างกลยุทธ์ที่ชนะสำหรับผู้เล่นคนแรกซึ่งคุณสามารถเลือกให้เป็นสีดำหรือขาว ซึ่งหมายความว่าสิ่งใดก็ตามที่ผู้เล่นฝ่ายตรงข้ามทำตามกฏหมายการเล่นของคุณจะต้องได้รับชัยชนะ การป้อนข้อมูลของคุณคือตำแหน่งเกม (การจัดเรียงโทเค็นบนกระดาน) และผลลัพธ์ของคุณเป็นการเคลื่อนไหวที่ถูกกฎหมายในรูปแบบที่ระบุด้านล่าง หากคุณต้องการค้นหากลยุทธ์การชนะด้วยตัวคุณเองอย่าอ่านสปอยเลอร์นี้:
โครงร่างของกลยุทธ์การชนะที่เป็นไปได้โดยสมมติว่าสีขาวเป็นอันดับแรก ขั้นแรกให้เลือก 5. หลังจากนั้นหากคุณมีเส้นทางจาก 5 ไปยังแถวด้านล่างหรือสีดำเลือก 0 หรือ 1 ที่จุดใดก็ได้ให้ตอบกลับโดยเลือกว่า 0 หรือ 1 ว่างเท่าไร หากสีดำเลือก 9 หรือ 13 ให้เลือก 10 จากนั้นค่าใดก็ตามที่ 14 หรือ 15 จะว่าง หากสีดำไม่ได้เลือก 9, 13 หรือ 14 ให้เลือก 9 และถัดไปที่ 13 หรือ 14 จะว่าง หากสีดำเลือก 14 ให้ตอบกลับโดยเลือก 15. ถัดไปเลือก 10 ถ้าว่าง ถ้าสีดำเลือก 10 ให้ตอบด้วย 11 ถ้าเป็นสีดำให้เลือก 6 ตอบกลับด้วย 7 และสิ่งใดก็ตามที่ 2 หรือ 3 ว่าง หากสีดำไม่ได้เลือก 6 ให้เลือกเพื่อให้คุณมีเส้นทางตั้งแต่ 5 ถึงแถวด้านล่าง
อินพุตและเอาต์พุต
ข้อมูลที่คุณป้อนเป็นสตริง 16 ตัวอักษรWBE
ซึ่งเป็นสีขาวดำและว่างเปล่า พวกเขาเป็นตัวแทนของกระเบื้องของคณะกรรมการตามที่ระบุไว้ข้างต้น คุณสามารถเลือกวิธีการป้อนข้อมูล (ซึ่งกำหนดวิธีการแสดงผลของคุณด้วย) จากรายการต่อไปนี้:
- อินพุตจาก STDIN, เอาต์พุตไปยัง STDOUT
- อินพุตเป็นอาร์กิวเมนต์บรรทัดรับคำสั่งหนึ่งเอาต์พุตไปยัง STDOUT
- อินพุตเป็น 16 อาร์กิวเมนต์บรรทัดคำสั่งอักขระเดี่ยวเอาต์พุตไปยัง STDOUT
- อินพุตเป็นอาร์กิวเมนต์ของฟังก์ชันที่ระบุชื่อเอาต์พุตเป็นค่าส่งคืน
เอาท์พุทของคุณแสดงให้เห็นถึงไพ่ที่คุณวางโทเค็นต่อไปของคุณเพราะมันเป็นตาคุณที่จะย้าย คุณสามารถเลือกจากรูปแบบผลลัพธ์ต่อไปนี้:
- ดัชนี zero-based (ตามที่ใช้ในภาพด้านบน)
- ดัชนีแบบอิงฐานเดียว
- สตริงอินพุตที่มีสตริง
E
ถูกแทนที่ด้วยสตริงใดW
หรือB
คุณเลือกสำหรับเครื่องเล่นของคุณ
กฎระเบียบ
กลยุทธ์ของคุณจะต้องกำหนดไว้ล่วงหน้า คุณไม่จำเป็นต้องจัดการกับตำแหน่งของเกมที่ไม่สามารถเข้าถึงได้จากกระดานเปล่าโดยใช้กลยุทธ์ของคุณหรือตำแหน่งที่ชนะสำหรับผู้เล่นทั้งสองและคุณอาจชนกับเกมเหล่านั้น ในทางกลับกันบนกระดานที่สามารถเข้าถึงได้โดยใช้กลยุทธ์ของคุณคุณจะต้องกลับไปดำเนินการทางกฎหมาย
นี่คือโค้ดกอล์ฟดังนั้นจำนวนไบต์ที่น้อยที่สุดจึงชนะ ช่องโหว่มาตรฐานไม่ได้รับอนุญาต
การทดสอบ
ฉันได้เขียนคอนโทรลเลอร์ Python 3 เพื่อตรวจสอบความถูกต้องของรายการเนื่องจากมันน่าเบื่อมากที่ต้องทำด้วยมือ คุณสามารถค้นหาได้ที่นี่ รองรับรูปแบบอินพุตสามรูปแบบแรกและฟังก์ชั่น Python 3 (ฟังก์ชั่นในภาษาอื่นจะต้องถูกรวมเข้าไปในโปรแกรม) รูปแบบเอาต์พุตทั้งสามรูปแบบและเครื่องเล่นทั้งสอง หากกลยุทธ์ไม่ชนะก็จะส่งออกเกมที่แพ้ซึ่งคุณสามารถปรับแต่งโปรแกรมของคุณได้
Incorrect response 'WWWWWWWWBBBBBBBB' to message 'WWWWWWWWBBBBBBBB'.
ฉันน่าจะชนะไปนานแล้วหรือฉันผิด