Giriş
Bulmacanın kuralları:
İkili ( Takuzu veya Subiku olarak da bilinir) bulmacasını anlamak çok basittir ve sadece birkaç kuralı vardır:
Oyunun adı ikili olduğu için oldukça açıktır, ancak yalnızca sıfırları ve olanları doldurabilirsiniz.
- Aynı basamaktan ikiden fazlası dikey veya yatay olarak birbirine bitişik olamaz
- Her satır ve her sütun eşit miktarda sıfır ve bir sütun içermelidir (bu, her ikili oyunun her zaman eşit boyutlara sahip olacağı anlamına gelir).
- Yinelenen satır ve yinelenen sütun olmayabilir (sıfır ve satırlarla aynı sırayla).
İsterseniz oyunu www.binarypuzzle.com adresinde oynayabilirsiniz .
taktikler:
Kural 1 nedeniyle, aşağıdaki durumlarda her zaman bir rakam doldurabiliriz:
- Aynı basamaktan dikey veya yatay olarak birbirine bitişik iki tane varsa , bu durumda her iki taraftaki karşı basamağı doldurabiliriz. Yani .11...
→ 0110..
.
- Aralarında yalnızca bir boşluk olacak şekilde aynı basamaktan dikey veya yatay olarak iki tane var. Yani .1.1..
→.101..
Kural 1 nedeniyle, üç boşluk kaldığında ve aynı rakamın üç bitişikine sahip olamadığımızda, boşluklardan birini doldurabiliriz. Yani .0.1.0
→ 10.1.0
(Hala iki tane doldurmalıyız ve ortada üç bitişik olanımız olamaz, bu yüzden ilk boşluk bir olmalıdır 1
.)
Kural 2 nedeniyle, yarıları zaten ters rakamla doldurulmuşsa, kalan satırları her zaman bir satır veya sütunda doldurabiliriz. Yani .1.011
→010011
Kural 3 nedeniyle, eşit sıralı bir satırda çözülecek sadece iki tane kalırsa, her zaman karşıt basamakları doldurabiliriz. Yani 101100 & 1..100
→101100 & 110100
Kural 3 nedeniyle, eşit olarak sıralanmış bir hatta üç boşluk kaldığında bazen bir boşluğu doldurabiliriz. Yani 010011 & .1.01.
→ 010011 & .1.010
(Burada 1
sonunda bir dolgu yapamayız , çünkü bu, diğer iki boşlukta sıfırları doldurmamız gerektiği anlamına gelir ve her iki satırı da sırayla eşitler.)
Misal:
Aşağıdaki 6x6 ızgarayla başlıyoruz ve bazılarını ve sıfırları doldurduk (ve noktalar henüz doldurmadığımız boşluklar):
.1....
.10.0.
1.11..
.1....
...1.0
......
Kural 1 ve 2 nedeniyle bu rakamları doldurabiliriz:
.1.01.
.1010.
101100
010011
.0.1.0
.010..
Kural 1 nedeniyle satır 5, sütun 1'de 1 girebiliriz:
.1.01.
.1010.
101100
010011
10.1.0
.010..
Kural 3 nedeniyle, satır 1, sütun 6'da 0'ı doldurabiliriz (satır 4'e bakarken):
.1.010
.1010.
101100
010011
10.1.0
.010..
Artık kural 1 ve 2 nedeniyle boşlukları rakamlarla doldurmaya devam edebiliriz:
.1.010
010101
101100
010011
10.1.0
.010.1
Şimdi kural 3 nedeniyle 5. satırı bitirebiliriz (3. satıra bakarken):
.1.010
010101
101100
010011
100110
.010.1
Ve sonra kural 1 ve 2 nedeniyle bulmacayı bitirebiliriz:
011010
010101
101100
010011
100110
101001
Meydan okuma:
Sorun basittir: başlangıç ızgarası göz önüne alındığında, çözülen bulmacanın çıktısını alın.
NOT: Yukarıdaki kuralları uygulamanız gerekmez. Tabii ki yapabilirsiniz ve bu zorluğun nasıl uygulanacağı konusunda ipuçları vermelidir, ancak çözümü akılda tutarak kurallarla kaba kuvvetlendirmek tamamen iyidir.
Bunu nasıl çözeceğiniz size kalmış, ama zorluk çözülmüş bulmacanın çıktısını almak.
Zorluk kuralları:
- Izgara için giriş ve çıkış formatı esnektir, ancak lütfen ne kullandığınızı belirtin. (Yani 2D bayt dizisi; Yeni satırlı dize; vb.)
- Bu, yukarıdaki karakterler için de geçerlidir. Kullandığım örnekte
01.
, ancak istersenizABx
bunun yerine kullanabilirsiniz . Lütfen hangi giriş / çıkış biçimini ve karakterleri kullandığınızı belirtin. - Yalnızca aşağıdaki ızgara boyutlarının kullanılacağını varsayabilirsiniz
6x6
:;8x8
;10x10
;12x12
;14x14
;16x16
.
Genel kurallar:
- Bu kod golf , bayt en kısa cevap kazanır.
Kod golf dillerinin, kod yazmayan dillerle yanıt göndermenizi engellemesine izin vermeyin. 'Herhangi bir' programlama dili için olabildiğince kısa bir cevap bulmaya çalışın. - Cevabınız için standart kurallar geçerlidir , bu nedenle STDIN / STDOUT, fonksiyon / yöntemi uygun parametrelerle, tam programları kullanmanıza izin verilir. Çağrınız.
- Standart Boşluk Doldurma yasaktır.
- Mümkünse, lütfen kodunuz için test içeren bir bağlantı ekleyin.
- Ayrıca, gerekirse bir açıklama ekleyin.
Test senaryoları:
Noktalar yalnızca okunabilirlik için eklenir, boşluk kullanmaktan veya boşluklar için tercih ettiğiniz başka bir şeyden çekinmeyin. Hem giriş hem de çıkış formatı esnektir.
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