Immaginiamo di avere una matrice di bit (che ne contiene almeno una 1
):
0 1 0 1 1 0 1 0 0 1 0
0 1 0 1 0 0 1 0 1 1 0
0 0 1 0 1 1 0 1 0 1 0
1 1 0 0 1 0 0 1 1 0 1
0 0 0 1 0 1 1 0 0 1 0
Vogliamo impostare alcuni dei bit in questa matrice in modo tale che formi un blob contiguo di 1
s, in cui ognuno 1
è direttamente o indirettamente collegato tra loro 1
attraverso il movimento ortogonale:
0 1 1 1 1 1 1 0 0 1 0
0 1 0 1 0 0 1 0 1 1 0
0 1 1 0 1 1 1 1 0 1 0
1 1 0 0 1 0 0 1 1 1 1
0 0 0 1 1 1 1 0 0 1 0
(Puoi vederlo più chiaramente cercando 1
con la funzione "trova" del tuo browser.)
Tuttavia, vogliamo anche ridurre al minimo il numero di bit impostati.
L'obiettivo
Data una matrice (o matrice di matrici) di bit o booleani, restituisce il numero minimo di bit che devono essere impostati per creare un continente contiguo di 1
s. Dovrebbe essere possibile passare da un bit impostato nella matrice all'altro viaggiando solo in una direzione ortogonale ad altri bit impostati.
Questo è code-golf , quindi vince l'invio valido più breve (misurato in byte).
Casi test
0 1 0 1 1 0 1 0 0 1 0
0 1 0 1 0 0 1 0 1 1 0
0 0 1 0 1 1 0 1 0 1 0
1 1 0 0 1 0 0 1 1 0 1
0 0 0 1 0 1 1 0 0 1 0
=> 6
1 0 0 0 0 0 1 0 0
1 1 0 0 1 1 1 0 0
1 1 1 0 1 1 1 1 1
0 1 0 0 0 0 0 0 0
0 0 0 0 0 1 1 1 1
0 1 0 0 0 0 1 1 0
1 0 0 0 0 0 1 0 0
=> 4
0 0 0 1 1 1 0 1 1
0 0 1 0 0 0 0 1 0
0 0 1 1 1 1 1 1 0
1 1 0 0 1 1 0 0 0
0 0 1 1 1 0 0 1 1
0 1 1 1 0 0 0 0 0
1 1 1 0 0 1 1 1 0
1 1 1 0 1 1 0 1 1
0 0 0 0 1 0 0 0 1
1 1 0 0 1 1 0 1 1
0 0 0 0 0 0 0 1 0
0 1 1 1 1 0 0 0 0
0 0 0 1 1 0 0 0 1
0 1 0 0 1 0 1 1 0
0 1 1 1 0 0 0 0 1
=> 8
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
=> 0
1
nella matrice?