ปัญหา:
ในหมากรุกมีกฎที่รู้จักกันดีเกี่ยวกับการวาดโดยการทำซ้ำ หากตำแหน่งเดิมซ้ำ 3 ครั้ง (หรือมากกว่า) จากนั้นผู้เล่นที่ประสงค์จะทำการเคลื่อนที่ซึ่งจะทำให้การซ้ำเกิดขึ้นนี้สามารถอ้างสิทธิ์เสมอ
บางครั้งนี่เป็นงานง่ายสำหรับผู้ชี้ขาดที่จะมองเห็นหากการเคลื่อนไหวสองสามครั้งสุดท้ายเป็นเพียงผู้เล่นที่เคลื่อนที่ไปข้างหน้าและถอยหลัง บางครั้งมันก็เล็กน้อยเล็กน้อยเมื่อชิ้นส่วนเคลื่อนไหวอย่างมีนัยสำคัญระหว่างตำแหน่งที่ทำซ้ำ
ปัญหาในการท้าทายนี้คือการส่งออกค่าความจริงถ้าตำแหน่งที่อ้างสิทธิ์ถูกดึงโดยการทำซ้ำ (ได้รับการเห็น 3 ครั้งหรือมากกว่า) และค่าเท็จถ้าตำแหน่งที่อ้างสิทธิ์ไม่ได้ถูกวาดโดยการทำซ้ำให้รายการของการเคลื่อนไหวในสัญ ตามที่อธิบายไว้ด้านล่างหรือสัญกรณ์ใด ๆ ที่คุณเลือก (แต่คุณจะต้องแปลงกรณีทดสอบ)
ตำแหน่งคืออะไร?
ในสถานการณ์โลกแห่งความเป็นจริงตำแหน่งจะได้รับผลกระทบจากสิ่งต่าง ๆ เช่นว่าผู้เล่นสามารถปิดกั้นปราสาทได้หรือไม่ก็ตาม คุณไม่ควรพิจารณาสิ่งเหล่านี้ในการแก้ปัญหาของคุณ ในปัญหานี้ตำแหน่งถูกกำหนดโดยการกำหนดค่าของชิ้นส่วนบนกระดาน ดังนั้นเพื่อจุดประสงค์ของปัญหานี้จะเห็นสองตำแหน่งเหมือนกันถ้าแต่ละตารางในกระดานทั้งสองนั้นถูกครอบครองโดยชิ้นส่วนประเภทเดียวกันที่มีสีเดียวกัน นี่ไม่จำเป็นต้องเป็นชิ้นส่วนที่แน่นอนเช่นอัศวินสีขาวสามารถสลับสี่เหลี่ยมและหากชิ้นส่วนอื่น ๆ ทั้งหมดตรงตามเงื่อนไขนี้จะยังคงอยู่ในตำแหน่งเดียวกัน
สัญกรณ์ที่ถูกต้องมีลักษณะอย่างไร
แม้ว่าฉันจะอธิบายพิกัดสัญกรณ์ แต่คุณมีอิสระที่จะป้อนด้วยระบบสัญกรณ์ที่คุณเลือก โดยมีเงื่อนไขว่า:
- แต่ละรายการในสัญกรณ์อธิบายใด ๆ หรือทั้งหมด: ชิ้นส่วน / ชิ้นส่วนที่เกี่ยวข้อง; ไม่ว่าจะเป็นการตรวจสอบรุกฆาตตรวจสอบอีกครั้งรุกฆาตหรือทางตันได้รับการจัดส่ง; ถ้าเกิดการจับภาพ ตำแหน่งเริ่มต้น ตำแหน่งสุดท้าย
- คุณอาจไม่มีข้อมูลเกี่ยวกับการทำซ้ำในเอกสารของคุณ
ดังนั้นตราบใดที่เกณฑ์เหล่านี้ตรงตามที่ฉันยินดีที่จะยอมรับตราบใดที่คุณระบุไว้ในคำตอบของคุณระบบสัญกรณ์ของคุณ ซึ่งอาจเป็นเช่น 0 แถวที่จัดทำดัชนีสิ่งอันดับคอลัมน์หรือสิ่งอื่น ๆ ที่เหมาะสมสำหรับโปรแกรมของคุณ
สัญลักษณ์พิกัด
สัญกรณ์ประสานงานเป็นสัญกรณ์ที่อธิบายถึงการย้ายอย่างหมดจดเป็นระบบของพิกัด
การเคลื่อนย้ายถูกอธิบายเป็นพิกัดแรกเริ่มจากชุด{A1-H8}
จากนั้นพิกัดปลายทางอีกครั้งจากชุดเดียวกัน ดังนั้นกลเม็ดของกษัตริย์ก็จะดูเหมือน (เป็นชุดของสตริง)
{"E2-E4","E7-E5","F2-F4"}
ฉันเชื่อว่ามันเป็นสัญลักษณ์ที่ดีที่สุดที่จะใช้สำหรับปัญหานี้เพราะมันไม่ได้เกลื่อนไปด้วยข้อมูลภายนอกเช่นว่าการตรวจสอบได้เกิดขึ้นหรือสิ่งที่ชนิดของการเคลื่อนย้ายชิ้นส่วนคือ ดังที่ได้กล่าวไว้ก่อนหน้าสัญกรณ์สามารถเลือกได้ดังนั้นคุณสามารถใช้สัญกรณ์อื่นเช่นสัญกรณ์พีชคณิตหรือคุณสามารถปรับเปลี่ยนสัญกรณ์นี้ (เช่นลบเครื่องหมายขีดคั่นหรือใช้เป็นรายการของสิ่งอันดับ)
กฎ:
- คุณไม่ควรพิจารณาว่าตำแหน่งหรือการเคลื่อนไหวนั้นถูกต้องหรือไม่เฉพาะในกรณีที่ทำให้เกิดการซ้ำซ้อน
- คุณสามารถสันนิษฐานได้ว่าการเลื่อนตำแหน่งและการจำนำจะไม่เกิดขึ้น
- คุณควรใช้รายการสตริงเป็นอินพุตและเอาต์พุตค่าความจริงหรือเท็จที่สอดคล้องกับว่าการทำซ้ำที่สาม (หรือมากกว่า) เกิดขึ้นในการย้ายครั้งสุดท้าย
- เกมเริ่มต้นที่ตำแหน่งเริ่มต้นมาตรฐานสำหรับหมากรุกเสมอ ตำแหน่งเริ่มต้นสามารถนับรวมการทำซ้ำ
- การวาดโดยการทำซ้ำไม่เกิดขึ้นหากการเคลื่อนไหวครั้งสุดท้ายไม่เกิดขึ้นตำแหน่ง
กฎทั่วไป:
- นี่คือcode-golfดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ
อย่าปล่อยให้ภาษารหัสกอล์ฟกีดกันคุณจากการโพสต์คำตอบด้วยภาษาที่ไม่ได้เข้ารหัส พยายามหาคำตอบสั้น ๆ ที่เป็นไปได้สำหรับภาษาโปรแกรม 'ใด ๆ ' - กฎมาตรฐานใช้สำหรับคำตอบของคุณด้วยกฎ I / O ที่เป็นค่าเริ่มต้นดังนั้นคุณจึงได้รับอนุญาตให้ใช้ STDIN / STDOUT ฟังก์ชั่น / วิธีพร้อมพารามิเตอร์ที่เหมาะสมและประเภทผลตอบแทนโปรแกรมเต็มรูปแบบ การโทรของคุณ
- ช่องโหว่เริ่มต้นเป็นสิ่งต้องห้าม
- หากเป็นไปได้โปรดเพิ่มลิงก์พร้อมทดสอบรหัสของคุณ (เช่นTIO )
- นอกจากนี้ขอแนะนำให้เพิ่มคำอธิบายสำหรับคำตอบของคุณ
กรณีทดสอบ
คุณควรคืนค่าความจริงสำหรับ:
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8"}
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8"}
{"B1-C3","B8-C6","D2-D4","D7-D5","D1-D3","D8-D6","C3-B1","C6-B8","B1-C3","B8-C6","D3-D1","D6-D8","D1-D3","D8-D6"}
{"D2-D4","B8-C6","E2-E4","C6-D4","D1-E2","D4-E6","E2-F3","E6-D4","F3-D1","D4-C6","D1-E2","C6-D4","E1-D1","D4-C6","D1-E1","C6-D4"}
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","B1-C3"}
และค่าเท็จสำหรับ:
{}
{"E2-E4","E7-E5","F2-F4"}
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","F2-F4","F7-F5"}
{"E2-E4","E7-E5","G1-F3","B8-C6","F1-C4","G8-F6","F3-G5","D7-D5","E4-D5","F6-D5","G5-F7"}
{"D2-D4","B8-C6","E2-E4","C6-D4","D1-E2","D4-C6","E2-D1","C6-D4","D1-E2","D4-C6","E2-D1"}
{"B1-C3","B8-C6","C3-B5","C6-B4","B5-D4","B4-D5","D4-C6","D5-C3","C6-B8","C3-B1","B8-C6","B1-C3","C6-B8","C3-B1"}
{"E2-E4","E7-E5","D1-E2","E8-E7","E1-D1","D8-E8","E2-E1","E7-D8","E1-E2","E8-E7","E2-E1","E7-E8"}
C6-B8
เกิดขึ้นสามครั้ง