บทนำ
กฎของปริศนา:
Binary Puzzle (หรือที่รู้จักกันในชื่อTakuzuหรือ Subiku) นั้นง่ายต่อการเข้าใจและมีกฎเพียงไม่กี่:
เนื่องจากชื่อของเกมนั้นเป็นเลขฐานสองมันค่อนข้างชัดเจน แต่คุณสามารถเติมเลขศูนย์และคนได้เท่านั้น
- ไม่เกินสองหลักเดียวกันสามารถติดกันในแนวตั้งหรือแนวนอน
- แต่ละแถวและแต่ละคอลัมน์จะต้องมีค่าศูนย์และจำนวนเท่ากัน (โดยปริยายหมายความว่าทุกเกมไบนารีจะมีขนาดเท่ากันเสมอ)
- อาจไม่มีแถวที่ซ้ำกันและไม่มีคอลัมน์ที่ซ้ำกัน (โดยมีศูนย์และคอลัมน์เดียวกัน)
คุณสามารถเล่นเกมได้ที่www.binarypuzzle.comหากคุณต้องการ
กลยุทธ์:
เนื่องจากกฎข้อที่ 1 เราสามารถกรอกตัวเลขได้เสมอหาก:
- มีตัวเลขสองหลักเดียวกันในแนวตั้งหรือแนวนอนติดกันซึ่งในกรณีนี้เราสามารถกรอกตัวเลขตรงข้ามทั้งสองด้าน เช่น→.11...
- มีตัวเลขสองหลักเดียวกันในแนวตั้งหรือแนวนอนโดยมีเพียงหนึ่งช่องว่างในระหว่างนั้น เช่น→0110..
.1.1..
.101..
เนื่องจากกฎข้อที่ 1 เมื่อเหลือช่องว่างสามช่องและเราไม่สามารถมีเลขสามหลักที่อยู่ติดกันได้เราสามารถเติมช่องว่างช่องใดช่องหนึ่งได้ Ie .0.1.0
→ 10.1.0
(เรายังต้องเติมสองอันและเราไม่สามารถมีสามอันที่อยู่ติดกันตรงกลางดังนั้นช่องว่างแรกจะต้องเป็น1
)
เนื่องจากกฎที่ 2 เราสามารถเติมช่องว่างที่เหลือในแถวหรือคอลัมน์ได้เสมอหากครึ่งหนึ่งของพวกเขาเต็มไปด้วยตัวเลขตรงกันข้าม เช่น.1.011
→010011
เนื่องจากกฎข้อที่ 3 เราสามารถเติมตัวเลขตรงข้ามได้เสมอหากเหลือเพียงสองตัวเท่านั้นที่จะแก้ปัญหาในบรรทัดที่ได้รับคำสั่งเท่ากัน เช่น101100 & 1..100
→101100 & 110100
เนื่องจากกฎข้อที่ 3 บางครั้งเราสามารถเติมเต็มช่องว่างเมื่อเหลือช่องว่างสามช่องในบรรทัดที่มีคำสั่งเท่ากัน Ie 010011 & .1.01.
→ 010011 & .1.010
(ที่นี่เราไม่สามารถเติม1
ท้ายได้เพราะนั่นหมายความว่าเราต้องเติมเลขศูนย์ที่อีกสองช่องว่างทำให้ทั้งสองเส้นเท่ากันตามลำดับ)
ตัวอย่าง:
เราเริ่มต้นด้วยตาราง 6x6 ต่อไปนี้โดยเติมบางส่วนและเลขศูนย์ (และจุดนั้นเป็นช่องว่างที่เรายังไม่ต้องกรอก):
.1....
.10.0.
1.11..
.1....
...1.0
......
เนื่องจากกฎที่ 1 & 2 เราสามารถกรอกตัวเลขเหล่านี้:
.1.01.
.1010.
101100
010011
.0.1.0
.010..
เนื่องจากกฎ 1 เราสามารถเติม 1 ในแถว 5 คอลัมน์ 1:
.1.01.
.1010.
101100
010011
10.1.0
.010..
เนื่องจากกฎ 3 เราสามารถเติม 0 ที่แถว 1 คอลัมน์ 6 (เมื่อดูแถว 4):
.1.010
.1010.
101100
010011
10.1.0
.010..
ตอนนี้เราสามารถเติมตัวเลขด้วยช่องว่างได้เนื่องจากกฎ 1 & 2:
.1.010
010101
101100
010011
10.1.0
.010.1
ตอนนี้เราสามารถจบแถวที่ 5 ได้เนื่องจากกฎ 3 (เมื่อดูแถวที่ 3):
.1.010
010101
101100
010011
100110
.010.1
จากนั้นเราก็สามารถไขปริศนาให้เสร็จเนื่องจากกฎ 1 & 2:
011010
010101
101100
010011
100110
101001
ท้าทาย:
ความท้าทายนั้นง่าย: ให้ตารางเริ่มต้นเอาท์พุทปริศนาที่แก้ไขแล้ว
หมายเหตุ: คุณไม่จำเป็นต้องปฏิบัติตามกฎข้างต้น แน่นอนคุณสามารถและควรให้คำแนะนำเกี่ยวกับวิธีการใช้ความท้าทายนี้ แต่การแก้ไขปัญหาด้วยกฎในใจนั้นดีมาก
วิธีที่คุณแก้ปัญหานั้นขึ้นอยู่กับคุณ แต่ความท้าทายคือการไขปริศนาที่มีการแก้ไข
กฏท้าทาย:
- รูปแบบอินพุตและเอาต์พุตสำหรับกริดมีความยืดหยุ่น แต่โปรดระบุสิ่งที่คุณใช้ (เช่นอาร์เรย์ไบต์ 2 มิติสตริงที่มีการขึ้นบรรทัดใหม่ ฯลฯ )
- สิ่งนี้ยังใช้กับตัวละครที่ใช้ ในตัวอย่างที่ฉันเคยใช้
01.
แต่ถ้าคุณต้องการคุณสามารถใช้ABx
แทน โปรดระบุรูปแบบอินพุต / เอาต์พุตและอักขระที่คุณใช้ - คุณสามารถสันนิษฐานได้ว่าจะใช้ขนาดกริดต่อไปนี้:
6x6
;8x8
;10x10
;12x12
;14x14
;16x16
.
กฎทั่วไป:
- นี่คือcode-golfดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ
อย่าปล่อยให้ภาษารหัสกอล์ฟกีดกันคุณจากการโพสต์คำตอบด้วยภาษาที่ไม่ได้เข้ารหัส พยายามหาคำตอบสั้น ๆ ที่เป็นไปได้สำหรับภาษาโปรแกรม 'ใด ๆ ' - กฎมาตรฐานจะใช้สำหรับคำตอบของคุณดังนั้นคุณจึงได้รับอนุญาตให้ใช้ STDIN / STDOUT ฟังก์ชัน / เมธอดพร้อมพารามิเตอร์ที่เหมาะสมโปรแกรมเต็มรูปแบบ การโทรของคุณ
- ช่องโหว่เริ่มต้นเป็นสิ่งต้องห้าม
- หากเป็นไปได้โปรดเพิ่มลิงค์พร้อมทดสอบรหัสของคุณ
- นอกจากนี้โปรดเพิ่มคำอธิบายหากจำเป็น
กรณีทดสอบ:
มีการเพิ่มจุดเพื่อให้สามารถอ่านได้รู้สึกอิสระที่จะใช้ช่องว่างหรืออะไรก็ได้ที่คุณต้องการสำหรับช่องว่างแทน ทั้งในและรูปแบบผลลัพธ์มีความยืดหยุ่น
Input:
1..0..
..00.1
.00..1
......
00.1..
.1..00
Output:
101010
010011
100101
011010
001101
110100
Input:
.1....
.10.0.
1.11..
.1....
...1.0
......
Output:
011010
010101
101100
010011
100110
101001
Input:
.......1..
.00..0..1.
.0..1..0.0
..1...1...
1.1......1
.......1..
.0..1...0.
....11...0
.0.0..1..0
0...0...1.
Output:
0110010101
1001100110
1001101010
0110011001
1010100101
0101010110
1001101001
0110110100
1010011010
0101001011