introduzione
C'è un piccolo villaggio con nient'altro che poche case e campi vuoti. I burocrati locali vogliono dividere il villaggio in lotti in modo tale che ogni lotto contenga esattamente una casa e i bordi dei lotti formino una bella griglia in linea retta. Il tuo compito è determinare se questo è possibile.
L'obiettivo
Il tuo input è un array 2D rettangolare di bit; 1 rappresenta una casa e 0 un campo vuoto. La sua dimensione sarà almeno 1 × 1 e conterrà almeno un 1. È possibile accettare l'input in qualsiasi formato ragionevole (elenco nidificato di numeri interi, elenco di stringhe, stringa multilinea ecc.).
Il programma determinerà se l'array può essere diviso in celle della griglia usando linee orizzontali e verticali diritte in modo tale che ciascuna cella della griglia ne contenga esattamente 1. Le celle della griglia possono avere dimensioni e forme diverse, sebbene siano sempre rettangolari. Le linee devono passare da un bordo dell'array al bordo opposto.
Ad esempio, la seguente è una divisione valida di un array:
00|0010|01|1
01|0000|00|0
--+----+--+-
00|0000|00|1
01|0010|01|0
--+----+--+-
01|1000|10|1
mentre la seguente divisione non è valida, poiché ci sono celle della griglia senza 1 o più di 1:
00|0010|01|1
--+----+--+-
01|0000|00|0
00|0000|00|1
01|0010|01|0
--+----+--+-
00|1000|10|1
Se esiste una divisione valida, dovrai generare un valore di verità, e altrimenti un valore di falsa.
Regole e punteggio
È possibile scrivere un programma completo o una funzione. Vince il conteggio dei byte più basso.
Casi test
[[1]] -> True
[[0,1],[1,0]] -> True
[[1,1],[1,0]] -> False
[[1,0,1],[0,1,0]] -> True
[[1,0],[0,1],[0,1]] -> True
[[1,0,0],[0,0,1],[0,1,1]] -> True
[[1,1,1],[1,1,1],[1,1,1]] -> True
[[1,0,1],[0,1,0],[1,0,0]] -> True
[[1,0,0],[1,0,0],[0,1,1]] -> False
[[0,0,0,0,1],[1,0,0,1,0],[0,0,0,1,0]] -> False
[[0,0,1,0,1],[0,0,0,1,0],[0,0,0,0,0]] -> True
[[1,1,0,0,0],[0,0,0,0,0],[1,0,1,0,0]] -> True
[[1,1,0,1,1],[0,1,0,1,1],[1,0,0,0,0]] -> True
[[0,0,0,0,0,0,0],[0,1,1,1,0,1,0],[0,1,0,0,1,0,0],[0,0,0,0,0,0,1],[0,0,1,0,0,0,1],[1,1,0,1,1,0,0]] -> False
[[1,1,0,0,0,0,0],[1,0,1,1,0,1,0],[0,0,0,0,1,0,0],[0,1,0,1,1,0,0],[1,0,0,0,1,1,0],[0,0,0,0,0,1,0]] -> False
[[0,1,0,1,1,1,0],[0,0,0,0,1,0,0],[0,0,0,0,0,0,0],[1,0,0,1,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,1]] -> True
[[0,1,0,0,1,0,1],[1,0,0,0,1,0,1],[0,0,1,0,1,0,1],[1,0,0,0,1,1,0],[0,0,0,1,1,1,0],[0,1,0,0,1,0,1]] -> True
[[0,1,0,0,1,0,0,1,0],[0,0,0,0,1,1,0,1,0],[1,1,0,0,1,0,0,0,0],[0,0,1,0,1,0,1,0,0],[0,0,1,0,1,0,1,0,0],[0,1,0,0,0,1,0,0,1],[0,1,0,0,0,0,1,0,0]] -> False
[[1,0,1,0,0,1,1,0,1],[0,1,1,0,0,1,1,0,1],[1,0,0,0,0,1,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,1,0,0,0,0,1,1],[0,1,1,0,1,0,1,0,1],[1,0,1,0,0,1,1,0,1]] -> True
[[1, 0, 1], [0, 1, 0], [1, 0, 0]]
questa era l'unica matrice 3x3 per cui il mio nuovo approccio non andava a buon fine.