สร้าง CHECKER โซลูชัน Sudoku
มีเยอะแยะของ Sudoku SOLVERS อยู่ที่นี่ แต่ฉันต้องการให้คุณสร้าง CHECKER ที่มีขนาดเล็กที่สุดเท่าที่มนุษย์สามารถทำได้ (code-golf)
รายการที่ถูกต้องจะสามารถใช้อาร์เรย์ 9x9 เป็นอาร์กิวเมนต์ (ส่งผ่านโดยอ้างอิงต่อเนื่องบนบรรทัดคำสั่งหรืออย่างไรก็ตามคุณต้องการที่จะใช้มัน) หรือยอมรับไฟล์อินพุตที่เป็นเก้าเก้าบรรทัดของตารางสุดท้าย . ดูตัวอย่างของการป้อนข้อมูลด้านล่าง
อินพุตที่ถูกต้องควรเป็นเลขฐาน 10 (1-9)
ตำแหน่งที่ขาดหายไปว่างเกินหรือไม่ใช่ตัวเลขหรือตำแหน่งที่มีตัวเลขที่อยู่นอก 1-9 ควรถูกปฏิเสธว่าเป็นอินพุตที่ไม่ถูกต้องโดยส่งกลับผลลัพธ์ที่ไม่เป็นศูนย์พิมพ์ข้อผิดพลาดหรือทั้งสองอย่าง
โปรแกรมของคุณต้องทดสอบว่าแต่ละหมายเลขปรากฏหนึ่งครั้งต่อหนึ่งคอลัมน์ต่อหนึ่งบรรทัดและหนึ่งครั้งต่อ 3x3 ตารางย่อย หากผ่านให้ส่งคืน "0" และหากไม่ส่งคืนผลลัพธ์ที่ไม่เป็นศูนย์
หลีกเลี่ยงการใช้ทรัพยากรภายนอก (เว็บไซต์ ฯลฯ )
หากโซลูชันของคุณเป็นโปรแกรมแบบสแตนด์อะโลนการออกจากสถานะออกหรือการพิมพ์ "0" หรือไม่ใช่ศูนย์สำหรับ "Pass" หรือ "Fail" ตามลำดับก็โอเค
ให้คำตอบที่เล็กที่สุดชนะ!
ตัวอย่างอินพุต:
อาร์เรย์ c:
int input[9][9]={{1,2,3,4,5,6,7,8,9},
{4,5,6,7,8,9,1,2,3},
{7,8,9,1,2,3,4,5,6},
{2,3,1,5,6,4,8,9,7},
{5,6,4,8,9,7,2,3,1},
{8,9,7,2,3,1,5,6,4},
{3,1,2,6,4,5,9,7,8},
{6,4,5,9,7,8,3,1,2},
{9,7,8,3,1,2,6,4,5}
};
ไฟล์:
123456789
456789123
789123456
231564897
564897231
897231564
312645978
645978312
978312645
9 ตารางย่อย:
+---+---+---+
|123|456|789|
|456|789|123|
|789|123|456|
+---+---+---+
|231|564|897|
|564|897|231|
|897|231|564|
+---+---+---+
|312|645|978|
|645|978|312|
|978|312|645|
+---+---+---+
1
หรือ-1