(แม้จะมี 60 คำถามที่ติดแท็กหมากรุก , เราไม่ได้มีง่ายๆ n-Queens ท้าทาย.)
ในหมากรุกตัวต่อปริศนา N-Queensอธิบายดังต่อไปนี้: ให้n x nกระดานหมากรุกและnควีนส์จัดเรียงราชินีเข้าสู่กระดานหมากรุกเพื่อไม่ให้ราชินีทั้งสองกำลังคุกคามกัน ด้านล่างนี้เป็นตัวอย่างโซลูชันสำหรับn = 8ยืมมาจาก Wikipedia
หรือในการแสดงผล ASCII:
xxxQxxxx
xxxxxxQx
xxQxxxxx
xxxxxxxQ
xQxxxxxx
xxxxQxxx
Qxxxxxxx
xxxxxQxx
ความท้าทายในที่นี้คือการนำอินพุตnและเอาต์พุตการแสดง ASCII ของโซลูชันไปยังnปริศนา -Queens เนื่องจากมีวิธีแก้ปัญหาที่เป็นไปได้มากกว่าหนึ่งรายการ (เช่นอย่างน้อยที่สุดการหมุนหรือการสะท้อนกลับ) รหัสของคุณจึงจำเป็นต้องแสดงทางออกที่ถูกต้องเท่านั้น
อินพุต
เป็นจำนวนเต็มบวกเดียวnกับในรูปแบบที่สะดวกใดn >= 4 ๆ (n = 2 และ n = 3 ไม่มีวิธีแก้ปัญหาและ n = 1 เป็นเรื่องเล็กน้อยดังนั้นสิ่งเหล่านี้จึงถูกยกเว้น)
เอาท์พุต
การแทนค่า ASCII ที่เป็นผลลัพธ์ของโซลูชันไปยังตัวไขปริศนา N-queens ดังที่อธิบายไว้ข้างต้น คุณสามารถเลือกค่า ASCII ที่แตกต่างกันสองค่าเพื่อแสดงถึงช่องว่างและควีน อีกครั้งนี้สามารถส่งออกในรูปแบบที่เหมาะสมใด ๆ (สตริงเดียวรายการของสตริงอาร์เรย์ตัวละคร ฯลฯ )
กฎระเบียบ
- ขึ้นบรรทัดใหม่หรือต่อท้ายช่องว่างหรือเว้นวรรคเป็นทางเลือกทั้งหมดรวมทั้งช่องว่างระหว่างตัวอักษรตราบใดที่ตัวอักษรอยู่ในแถวอย่างถูกต้อง
- คุณสามารถใช้อัลกอริทึมในการคำนวณตำแหน่งที่เป็นไปได้หรือใช้รูปแบบการแก้ปัญหา "บันไดขั้นตอน" อย่างชัดเจนไม่ว่าจะเป็นรูปแบบใดสำหรับนักกอล์ฟของคุณ
- ยอมรับได้ทั้งโปรแกรมหรือฟังก์ชั่น หากฟังก์ชั่นคุณสามารถส่งคืนผลลัพธ์มากกว่าการพิมพ์
- หากเป็นไปได้โปรดรวมลิงค์ไปยังสภาพแวดล้อมการทดสอบออนไลน์เพื่อให้ผู้อื่นสามารถลองใช้รหัสของคุณได้!
- ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
- นี่คือรหัส - กอล์ฟเพื่อให้ใช้กฎการเล่นกอล์ฟตามปกติทั้งหมดและรหัสที่สั้นที่สุด (เป็นไบต์) ชนะ
ตัวอย่าง
n=4
xQxx
xxxQ
Qxxx
xxQx
n=7
xxQxxxx
xxxxxxQ
xQxxxxx
xxxQxxx
xxxxxQx
Qxxxxxx
xxxxQxx
n=10
xxxxQxxxxx
xxxxxxxxxQ
xxxQxxxxxx
xxxxxxxxQx
xxQxxxxxxx
xxxxxxxQxx
xQxxxxxxxx
xxxxxxQxxx
Qxxxxxxxxx
xxxxxQxxxx



อ่านจำนวนควีนส์คิวจาก stdin และคำนวณสองตัวแปรเพื่อใช้ในภายหลัง:
เริ่มห่วงหลัก iterating Rจำนวนแถวจากคิวลงไปที่ 0, decrementing ที่จุดเริ่มต้นของวงเพื่อแรกRคือqลบ 1.
คำนวณออฟเซ็ตของราชินีในแต่ละแถวด้วยสูตรต่อไปนี้:
เอาต์พุตออฟเซ็ตอักขระเว้นวรรคเพื่อเยื้องตำแหน่งของพระราชินีสำหรับแถวปัจจุบันรวมทั้งเพิ่มพื้นที่ว่างเพียงอันเดียวเพราะทำให้การวนซ้ำเอาต์พุตง่ายขึ้น
เอาท์พุท
ทดสอบว่าrเป็นศูนย์หรือไม่ในกรณีนี้เราถึงจุดสิ้นสุดของบอร์ดและสามารถออกได้มิฉะนั้นเราจะทำซ้ำลูปหลักอีกครั้ง