ถึงเวลาแล้วที่จะเริ่มภารกิจที่เต็มไปด้วยอันตรายเพื่อเอาชนะหน่วยสืบราชการลับของอังกฤษ จุดมุ่งหมายของการท้าทายนี้คือการเขียนรหัสที่สั้นที่สุดที่จะแก้ Nonogram
Nonogram คืออะไร
กฎนั้นง่าย คุณมีตารางกำลังสองซึ่งจะต้องเติมด้วยสีดำหรือว่างเปล่า ข้างแต่ละแถวของตารางจะแสดงความยาวของการวิ่งของสี่เหลี่ยมสีดำในแถวนั้น ด้านบนแต่ละคอลัมน์จะแสดงความยาวของการวิ่งของสี่เหลี่ยมสีดำในคอลัมน์นั้น www.games501.com ฟรีเป้าหมายของคุณคือค้นหาสี่เหลี่ยมสีดำทั้งหมด ในประเภทตัวต่อปริศนาตัวเลขนี้เป็นรูปแบบของการตรวจเอกซเรย์ที่ไม่ต่อเนื่องซึ่งวัดว่ามีการเติมเต็มของจำนวนสี่เหลี่ยมจัตุรัสในแถวหรือคอลัมน์ใด ๆ ตัวอย่างเช่นคำใบ้ของ "4 8 3" จะหมายถึงมีชุดของสี่, แปด, และสามช่องที่เติมเต็มตามลำดับโดยมีอย่างน้อยหนึ่งช่องว่างระหว่างกลุ่มที่ต่อเนื่องกัน [ 1 ] [ 2 ]
ดังนั้นการแก้ปัญหาของ Nonogram ข้างต้นจะเป็น:
รายละเอียดการใช้งาน
คุณสามารถเลือกที่จะเป็นตัวแทนของ Nonogram ได้อย่างไรก็ตามคุณต้องการและนำมาเป็นข้อมูลในแบบที่คุณคิดว่าเหมาะสมกับภาษาของคุณ กันไปสำหรับการส่งออก เป้าหมายของความท้าทายนี้คือการทำงานให้สำเร็จ ถ้าคุณสามารถแก้ nonogram ด้วยสิ่งใดก็ตามที่โปรแกรมของคุณให้นั่นแสดงว่าถูกต้อง ข้อแม้หนึ่งคือคุณไม่สามารถใช้ตัวแก้ปัญหาออนไลน์ได้ :)
ปัญหานี้มีความท้าทายอย่างมากในขั้นตอนวิธี (np-complete) ซึ่งไม่มีวิธีแก้ปัญหาที่มีประสิทธิภาพอย่างสมบูรณ์ดังนั้นคุณจะไม่ถูกลงโทษเนื่องจากไม่สามารถแก้ปัญหาที่ใหญ่กว่าได้แม้ว่าคำตอบของคุณจะได้รับรางวัลอย่างหนักถ้าเป็น สามารถรับมือกับคดีใหญ่ (ดูโบนัส) ในฐานะที่เป็นมาตรฐานโซลูชันของฉันทำงานได้สูงถึง 25x25 โดยประมาณภายใน 5-10 วินาที เพื่อให้เกิดความยืดหยุ่นในภาษาต่างๆโซลูชันที่ใช้เวลาน้อยกว่า 5 นาทีสำหรับ nonogram 25x25 นั้นดีพอ
คุณอาจสมมติว่าตัวต่อเป็นรูปสี่เหลี่ยมจัตุรัส NxN เสมอ
คุณสามารถใช้เครื่องทำจิ๊กซอว์ nonogram ออนไลน์นี้เพื่อทดสอบวิธีแก้ปัญหาของคุณ
เกณฑ์การให้คะแนน
คุณมีอิสระที่จะใช้ภาษาใด ๆ ที่คุณต้องการและเนื่องจากเป็นรหัสกอล์ฟรายการจะถูกจัดเรียงตามลำดับ: accuracy -> length of code -> speed.
อย่างไรก็ตามอย่าท้อใจกับภาษารหัสกอล์ฟคำตอบในทุกภาษาที่แสดงความพยายามในการเล่นกอล์ฟ ในวิธีที่น่าสนใจจะถูกยกระดับขึ้น!
โบนัส
ที่จริงผมได้เรียนรู้เกี่ยวกับ Nonograms จากการ์ดคริสมาสต์การเข้ารหัสลับที่ออกโดยหน่วยสืบราชการลับของอังกฤษที่นี่ ส่วนแรกนั้นเป็นแบบ Nonogram ขนาดใหญ่ 25x25 หากโซลูชันของคุณสามารถแก้ไขปัญหานี้ได้คุณจะได้รับความชื่นชม :)
เพื่อให้ชีวิตของคุณง่ายขึ้นในแง่ของการป้อนข้อมูลฉันได้จัดเตรียมวิธีที่ฉันแสดงข้อมูลสำหรับตัวต่อเฉพาะสำหรับการใช้งานฟรีของคุณ 25 บรรทัดแรกคือเบาะแสแถวตามด้วยเส้นคั่น '-' ตามด้วย 25 บรรทัดของเบาะแสคอลัมน์ตามด้วยเส้นคั่น '#' และจากนั้นเป็นตัวแทนของตารางที่มีเบาะแสสี่เหลี่ยมกรอก
7 3 1 1 7
1 1 2 2 1 1
1 3 1 3 1 1 3 1
1 3 1 1 6 1 3 1
1 3 1 5 2 1 3 1
1 1 2 1 1
7 1 1 1 1 1 7
3 3
1 2 3 1 1 3 1 1 2
1 1 3 2 1 1
4 1 4 2 1 2
1 1 1 1 1 4 1 3
2 1 1 1 2 5
3 2 2 6 3 1
1 9 1 1 2 1
2 1 2 2 3 1
3 1 1 1 1 5 1
1 2 2 5
7 1 2 1 1 1 3
1 1 2 1 2 2 1
1 3 1 4 5 1
1 3 1 3 10 2
1 3 1 1 6 6
1 1 2 1 1 2
7 2 1 2 5
-
7 2 1 1 7
1 1 2 2 1 1
1 3 1 3 1 3 1 3 1
1 3 1 1 5 1 3 1
1 3 1 1 4 1 3 1
1 1 1 2 1 1
7 1 1 1 1 1 7
1 1 3
2 1 2 1 8 2 1
2 2 1 2 1 1 1 2
1 7 3 2 1
1 2 3 1 1 1 1 1
4 1 1 2 6
3 3 1 1 1 3 1
1 2 5 2 2
2 2 1 1 1 1 1 2 1
1 3 3 2 1 8 1
6 2 1
7 1 4 1 1 3
1 1 1 1 4
1 3 1 3 7 1
1 3 1 1 1 2 1 1 4
1 3 1 4 3 3
1 1 2 2 2 6 1
7 1 3 2 1 1
#
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 1 0 0 1 0 0 0 1 1 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
และนี่คือรุ่นที่แตกต่างกันเล็กน้อยเพื่อความสะดวกของคุณ tuple ที่คั่นด้วยเครื่องหมายจุลภาค (row, col) ที่แต่ละองค์ประกอบเป็นรายการของรายการ
([[7, 3, 1, 1, 7],
[1, 1, 2, 2, 1, 1],
[1, 3, 1, 3, 1, 1, 3, 1],
[1, 3, 1, 1, 6, 1, 3, 1],
[1, 3, 1, 5, 2, 1, 3, 1],
[1, 1, 2, 1, 1],
[7, 1, 1, 1, 1, 1, 7],
[3, 3],
[1, 2, 3, 1, 1, 3, 1, 1, 2],
[1, 1, 3, 2, 1, 1],
[4, 1, 4, 2, 1, 2],
[1, 1, 1, 1, 1, 4, 1, 3],
[2, 1, 1, 1, 2, 5],
[3, 2, 2, 6, 3, 1],
[1, 9, 1, 1, 2, 1],
[2, 1, 2, 2, 3, 1],
[3, 1, 1, 1, 1, 5, 1],
[1, 2, 2, 5],
[7, 1, 2, 1, 1, 1, 3],
[1, 1, 2, 1, 2, 2, 1],
[1, 3, 1, 4, 5, 1],
[1, 3, 1, 3, 10, 2],
[1, 3, 1, 1, 6, 6],
[1, 1, 2, 1, 1, 2],
[7, 2, 1, 2, 5]],
[[7, 2, 1, 1, 7],
[1, 1, 2, 2, 1, 1],
[1, 3, 1, 3, 1, 3, 1, 3, 1],
[1, 3, 1, 1, 5, 1, 3, 1],
[1, 3, 1, 1, 4, 1, 3, 1],
[1, 1, 1, 2, 1, 1],
[7, 1, 1, 1, 1, 1, 7],
[1, 1, 3],
[2, 1, 2, 1, 8, 2, 1],
[2, 2, 1, 2, 1, 1, 1, 2],
[1, 7, 3, 2, 1],
[1, 2, 3, 1, 1, 1, 1, 1],
[4, 1, 1, 2, 6],
[3, 3, 1, 1, 1, 3, 1],
[1, 2, 5, 2, 2],
[2, 2, 1, 1, 1, 1, 1, 2, 1],
[1, 3, 3, 2, 1, 8, 1],
[6, 2, 1],
[7, 1, 4, 1, 1, 3],
[1, 1, 1, 1, 4],
[1, 3, 1, 3, 7, 1],
[1, 3, 1, 1, 1, 2, 1, 1, 4],
[1, 3, 1, 4, 3, 3],
[1, 1, 2, 2, 2, 6, 1],
[7, 1, 3, 2, 1, 1]])
s=[].fill([].fill(0,0,25),0,25);s[3][3]=s[3][4]=s3[3][12]=s3[3][13]=s3[3][21]=s[8][6]=s[8][7]=s[8][10]=s[8][14]=s[8][15]=s[8][18]=s[16][6]=s[16][11]=s[16][16]=s[16][20]=s[21][3]=s[21][4]=s[21][9]=s[21][10]=s[21][15]=s[21][20]=s[21][21]=1;