introduzione
Regole del puzzle:
Il puzzle binario (noto anche come Takuzu o Subiku) è molto semplice da capire e ha solo alcune regole:
poiché il nome del gioco è binario è abbastanza ovvio, ma puoi solo inserire zeri e uno.
- Non più di due della stessa cifra possono essere adiacenti verticalmente o orizzontalmente
- Ogni riga e ogni colonna devono contenere una quantità uguale di zeri e di uno (ciò implica implicitamente che ogni gioco binario avrà sempre dimensioni pari).
- Non ci possono essere righe duplicate e colonne duplicate (con lo stesso identico ordine di zeri e quelli).
Puoi giocare a www.binarypuzzle.com se vuoi.
tattiche:
A causa della regola 1, possiamo sempre inserire una cifra se:
- Esistono già due della stessa cifra verticalmente o orizzontalmente adiacenti l'una all'altra, nel qual caso possiamo riempire la cifra opposta su entrambi i lati. Cioè .11...
→ 0110..
.
- Ci sono due della stessa cifra in verticale o in orizzontale con un solo spazio tra loro. Cioè .1.1..
→.101..
A causa della regola 1, quando rimangono tre spazi vuoti e non possiamo avere tre spazi adiacenti della stessa cifra, possiamo riempire uno degli spazi vuoti. Cioè .0.1.0
→ 10.1.0
(Dobbiamo ancora riempire due, e non possiamo avere tre adiacenti nel mezzo, quindi il primo gap deve essere a 1
.)
A causa della regola 2, possiamo sempre colmare i vuoti rimanenti in una riga o colonna se la metà di essi è già riempita con la cifra opposta. Cioè .1.011
→010011
A causa della regola 3, possiamo sempre inserire le cifre opposte se ne rimangono solo due su una riga ugualmente ordinata. Cioè 101100 & 1..100
→101100 & 110100
A causa della regola 3, a volte possiamo riempire un vuoto quando tre lacune vengono lasciate su una linea ugualmente ordinata. Vale a dire 010011 & .1.01.
→ 010011 & .1.010
(Qui non possiamo riempire a 1
alla fine, perché ciò significherebbe che dobbiamo riempire gli zeri negli altri due spazi vuoti, rendendo entrambe le righe uguali in ordine.)
Esempio:
Iniziamo con la seguente griglia 6x6 con alcuni e zeri riempiti (e i punti sono vuoti che dobbiamo ancora riempire):
.1....
.10.0.
1.11..
.1....
...1.0
......
A causa delle regole 1 e 2 possiamo inserire queste cifre:
.1.01.
.1010.
101100
010011
.0.1.0
.010..
A causa della regola 1 possiamo inserire un 1 nella riga 5, colonna 1:
.1.01.
.1010.
101100
010011
10.1.0
.010..
A causa della regola 3 possiamo inserire uno 0 nella riga 1, colonna 6 (quando si guarda la riga 4):
.1.010
.1010.
101100
010011
10.1.0
.010..
Ora possiamo continuare a colmare le lacune con le cifre dovute alle regole 1 e 2:
.1.010
010101
101100
010011
10.1.0
.010.1
Ora possiamo finire la riga 5 a causa della regola 3 (guardando la riga 3):
.1.010
010101
101100
010011
100110
.010.1
E quindi possiamo finire il puzzle a causa delle regole 1 e 2:
011010
010101
101100
010011
100110
101001
Sfida:
La sfida è semplicemente: data la griglia di partenza, esce il puzzle risolto.
NOTA: non è necessario implementare le regole sopra. Certo che puoi, e dovrebbe darti suggerimenti su come implementare questa sfida, ma forzare la soluzione con le regole in mente va benissimo.
Come risolverlo dipende da te, ma la sfida è quella di creare il puzzle risolto.
Regole della sfida:
- Il formato di input e output per la griglia è flessibile, ma si prega di indicare ciò che si utilizza. (Vale a dire array di byte 2D; String con newline; ecc.)
- Questo sopra vale anche per i personaggi usati. Nell'esempio che ho usato
01.
, ma se vuoi puoi usareABx
invece. Indica quale formato di input / output e quali caratteri hai utilizzato. - È possibile assumere saranno utilizzati solo i seguenti dimensioni della griglia:
6x6
;8x8
;10x10
;12x12
;14x14
;16x16
.
Regole generali:
- Questo è code-golf , quindi vince la risposta più breve in byte.
Non lasciare che le lingue di code-golf ti scoraggino dal pubblicare risposte con lingue non codegolfing. Prova a trovare una risposta il più breve possibile per "qualsiasi" linguaggio di programmazione. - Per la tua risposta valgono regole standard , quindi puoi usare STDIN / STDOUT, funzioni / metodo con i parametri corretti, programmi completi. La tua chiamata.
- Le scappatoie predefinite sono vietate.
- Se possibile, aggiungi un link con un test per il tuo codice.
- Inoltre, si prega di aggiungere una spiegazione, se necessario.
Casi test:
I punti vengono aggiunti solo per la leggibilità, sentiti libero di usare spazi o qualsiasi altra cosa preferisci per gli spazi vuoti. Sia il formato di output che quello di output sono flessibili.
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