มีตัวแปรของปัญหา N-queens ที่รู้จักกันดีซึ่งเกี่ยวข้องกับราชินีและอัศวินและถูกกล่าวว่าเป็น"ยากมากขึ้น" 1 คำชี้แจงปัญหามีดังนี้:
คุณต้องวางอัศวิน kn และควีนส์จำนวนเท่ากันบนกระดานหมากรุกเพื่อไม่ให้ชิ้นส่วนใดโจมตีอีกชิ้นหนึ่ง จำนวนชิ้นส่วนสูงสุดที่คุณสามารถวางบนกระดานคืออะไรและคุณสามารถทำมันได้หลายวิธี
ในการแข่งขันกอล์ฟรหัสคุณจะได้รับอินพุตnระหว่าง 3 ถึง 32 (ในแบบที่เหมาะสมที่สุดสำหรับภาษาของคุณ) สำหรับn ที่ระบุอาจมีวิธีแก้ปัญหาศูนย์หรือมากกว่านั้น ในกรณีที่ไม่มีวิธีแก้ปัญหาคุณต้องเอาท์พุท / คืนค่าอะไร ( ไม่มี , สตริงว่าง , เท็จ , ... ) มิฉะนั้นคุณต้องให้ผลลัพธ์สองรายการ:
- บอร์ดแก้ปัญหา (ดูด้านล่าง) สำหรับขนาดnที่ไม่สามารถเพิ่มราชินีหรืออัศวินหมากรุกได้โดยไม่ต้องถูกโจมตี จะต้องมีจำนวนควีนและอัศวินเท่ากัน
- แหล่งที่มาของโปรแกรมที่จะรันซึ่งไม่รับอินพุตและให้ (i) โซลูชันอื่น (หรือไม่มีอะไร ) สำหรับขนาดเดียวกันnในรูปแบบเดียวกันและ (ii) โปรแกรมอื่นสำหรับโซลูชันถัดไป (และอื่น ๆ ... )
โปรดทราบว่า:
- ลำดับของโปรแกรมจะต้องไม่ส่งคืนบอร์ดเดิมสองครั้งต้องครอบคลุมการแก้ปัญหาที่เป็นไปได้ทั้งหมดสำหรับปัญหาของขนาดnและในที่สุดก็ต้องยุติ (ไม่มีการแสดงผล)
- คุณสามารถคืนค่าสองค่าคืนค่าหนึ่งแล้วพิมพ์ค่าอื่นหรือพิมพ์ค่าคืนสองค่า
- อย่างไรก็ตามหากคุณพิมพ์ทั้งบอร์ดและโปรแกรมถัดไปบอร์ดจะต้องไม่ถูกพิจารณาว่าเป็นส่วนหนึ่งของโปรแกรมถัดไป (ฉันขอแนะนำให้พิมพ์บอร์ดเป็นข้อคิดเห็นหรือใช้ทั้งเอาต์พุตมาตรฐานและสตรีมข้อผิดพลาด)
- program-as-a-return-value ต้องเป็นสตริงไม่ใช่การปิด
รูปแบบคณะกรรมการ
- คณะกรรมการเป็นตารางที่มีขนาดn
- บอร์ดเซลล์สามารถว่างเปล่าราชินีหรืออัศวิน
- คุณต้องเลือกค่าที่แตกต่างสำหรับเซลล์แต่ละประเภท (เช่นคุณสามารถใช้สัญลักษณ์อื่นนอกเหนือจาก Q, N เมื่อพิมพ์บอร์ด)
- หากคุณส่งคืนบอร์ดที่ไม่ใช่สตริงจะต้องเป็นคอลเล็กชันที่ได้รับคำสั่งของn 2ของบอร์ด (เช่นเมทริกซ์เวกเตอร์หรือรายการในลำดับแถว / คอลัมน์หลัก, ... )
หากคุณพิมพ์บอร์ดคุณสามารถพิมพ์มันยกกำลังสองหรือเป็นบรรทัด ตัวอย่างเช่นบอร์ดโซลูชันขนาด 4 สามารถพิมพ์ได้ดังต่อไปนี้ (ไม่จำเป็นต้องใช้ช่องว่างสัญลักษณ์ตามดุลยพินิจของคุณ):
Q - - - - - - - - - - - - - N -
หากคุณรู้สึกเช่นนั้นคุณสามารถส่งออก:
♛ · · · · · · · · · · · · · ♞ ·
... แต่นี่ก็เพียงพอแล้ว:
Q-------------N-
ไม่สำคัญว่าคุณจะวนซ้ำในเซลล์ตามลำดับแถวหลักหรือคอลัมน์หลักเนื่องจากมีวิธีแก้ปัญหาแบบสมมาตร ตัวอย่างเช่นโซลูชันสำหรับ n = 4 คือ:
Q------N-------- Q----------N---- Q------------N-- Q-------------N- -Q----------N--- -Q------------N- -Q-------------N --Q---------N--- --Q----------N-- --Q------------N ---QN----------- ---Q----N------- ---Q---------N-- ---Q----------N- ---NQ----------- ----Q------N---- ----Q----------N N------Q-------- -------QN------- -------Q----N--- ---N----Q------- -------NQ------- --------Q------N N----------Q---- ----N------Q---- -----------QN--- -N----------Q--- --N---------Q--- -------N----Q--- -----------NQ--- N------------Q-- --N----------Q-- ---N---------Q-- N-------------Q- -N------------Q- ---N----------Q- -N-------------Q --N------------Q ----N----------Q --------N------Q
นอกจากนี้คุณยังสามารถดูการแก้ปัญหาสำหรับ n = 5 เป็นเมทริกซ์ ; บอร์ดมี#
, q
และn
สัญลักษณ์ซึ่งเป็นเซลล์ที่ว่างเปล่าของชนิดที่แตกต่างกัน (ดูคำตอบของฉันด้านล่าง) ฉันนับ2836 บอร์ดสำหรับn = 6เหมือนในคำตอบของ Sleafar (ฉันแนะนำข้อบกพร่องเมื่อลดจำนวนไบต์ แต่ตอนนี้ได้รับการแก้ไขแล้ว)
ขอบคุณมากสำหรับ Sleafar ที่ค้นหาไม่ใช่หนึ่งข้อยกเว้นสองข้อในรหัสของฉัน
คะแนน
รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ
เราวัดขนาดของโปรแกรมแรกหนึ่งซึ่งยอมรับn
1 . ราชินีและอัศวินโดย Roger KW Hui (ระวัง! มีคำตอบ)
-------------------------N--------Q-
ไม่ถูกต้องเพราะชิ้นส่วนต่าง ๆ สามารถเข้ามา: Q--------N---------------N--------Q-
)