Scrivi un programma o una funzione che accetta una stringa multilinea di 0
"se 1
". Non ci saranno altri caratteri nella stringa e la stringa sarà sempre rettangolare (tutte le linee avranno lo stesso numero di caratteri), con dimensioni piccole come 1 × 1, ma in caso contrario le lettere 0
"s 1
" e "s" possono essere organizzate in modo arbitrario.
È possibile supporre che la stringa abbia una nuova riga finale opzionale e, se lo si desidera, è possibile utilizzare due caratteri ASCII stampabili distinti al posto di 0
e 1
.
Stampare o restituire un valore truthy se tutto il percorso collegato regioni di entrambi 0
's e 1
' s nella stringa sono rettangoli pieni , uscita altrimenti un valore falsy .
Una regione connessa al percorso di 0
significa che da qualsiasi 0
nella regione, tutte le altre 0
possono essere raggiunte solo spostandosi verso l'alto, il basso, a sinistra e a destra verso le altre 0
(e non spostandosi in diagonale, non spostandosi verso nessuna 1
, e non muoversi al di fuori dei limiti della stringa). La stessa idea si applica alle 1
regioni connesse al percorso.
Un rettangolo solido di 0
'significa che l'intera area del rettangolo è riempita con 0
' e no 1
. La stessa idea si applica ai 1
rettangoli solidi.
Vince il codice più breve in byte. Tiebreaker è la risposta precedente.
(Notare che la corda non si avvolge con le condizioni al contorno toroidali .)
Esempi
1) Questa stringa di input ha 3 regioni connesse al percorso (2 per 0
e 1 per 1
). 00
Tuttavia, solo la regione in basso a destra è un rettangolo solido, quindi l'output sarebbe falso.
0011
0111
0100
2) Questa stringa di input ha 4 regioni connesse al percorso (2 per entrambi 0
e 1
). Tutti loro sono rettangoli solidi, quindi l'output sarebbe veritiero.
0011
0011
1100
3) Questo input ha 2 regioni connesse al percorso, ma solo una di esse è un rettangolo solido, quindi l'output sarebbe errato.
00000000
01111110
00000000
4) Questo input ha solo 1 regione connessa al percorso ed è banalmente un rettangolo solido, quindi l'output è veritiero.
11111111
11111111
11111111
Casi test
Un valore T
appena sotto la stringa di input significa verità, F
significa falsa.
0
T
1
T
00
T
01
T
10
T
11
T
0000000
T
1111111
T
011100100100101100110100100100101010100011100101
T
00
11
T
01
10
T
01
11
F
00
01
F
11
11
T
110
100
F
111
000
T
111
101
111
F
101
010
101
T
1101
0010
1101
0010
T
1101
0010
1111
0010
F
0011
0111
0100
F
0011
0011
1100
T
00000000
01111110
00000000
F
11111111
11111111
11111111
T
0000001111
0000001111
T
0000001111
0000011111
F
0000001111
1000001111
F
1000001111
1000001111
T
1110100110101010110100010111011101000101111
1010100100101010100100010101010101100101000
1110100110010010110101010111010101010101011
1010100100101010010101010110010101001101001
1010110110101010110111110101011101000101111
F