Considere matrizes diagonais de bloco binário que possuem blocos quadrados de 1s na diagonal principal e são 0 em qualquer outro lugar. Vamos chamar essas matrizes de matrizes "válidas".
Por exemplo, aqui estão algumas matrizes 4x4 válidas:
1 0 0 0 1 1 0 0 1 0 0 0 1 0 0 0 1 1 0 0 1 1 1 1
0 1 0 0 1 1 0 0 0 1 1 0 0 1 1 1 1 1 0 0 1 1 1 1
0 0 1 0 0 0 1 0 0 1 1 0 0 1 1 1 0 0 1 1 1 1 1 1
0 0 0 1 0 0 0 1 0 0 0 1 0 1 1 1 0 0 1 1 1 1 1 1
Observe que uma maneira alternativa de descrever essas matrizes é que existe uma cadeia de blocos quadrados 1 do canto superior esquerdo para o canto inferior direito, tocando de canto a canto, e em qualquer outro lugar é 0.
Por outro lado, aqui estão algumas matrizes 4x4 inválidas:
1 0 1 0 1 0 1 0 1 1 0 0 0 1 1 1 1 1 0 0 0 0 0 0
0 1 1 1 0 1 0 1 1 1 0 0 0 1 1 1 1 1 0 0 0 0 0 0
1 0 0 1 1 0 1 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0
0 0 1 0 0 1 0 1 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0
Você será dado um n
por n
matriz binária como entrada - o que é o número mínimo de 0
bits que você precisa definir para 1
a fim de obter uma matriz válida?
Você pode escrever uma função ou programa n
utilizando qualquer formato conveniente de string, lista ou matriz representando uma n
matriz de 0s e 1s (desde que não seja pré-processado). As linhas devem ser claramente separadas de alguma forma, para que formatos como uma matriz 1D de bits não sejam permitidos.
Isso é código-golfe , portanto, o objetivo é minimizar o número de bytes no seu programa.
Exemplos
Por exemplo, se a entrada for
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 1
a resposta é 5, pois você pode definir cinco 0
bits 1
para obter:
1 0 0 0 0
0 1 1 0 0
0 1 1 0 0
0 0 0 1 0
0 0 0 0 1
e este é o número mínimo necessário. No entanto, se a entrada foi
0 0 0 0 1
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
então a resposta é 24, já que a única matriz 5x5 válida onde está o canto superior direito 1
é a matriz de todos os 1
s.
Casos de teste
Os testes são representados aqui como uma matriz 2D de números inteiros.
[[0]] -> 1
[[1]] -> 0
[[0,1],[0,0]] -> 3
[[1,0],[0,0]] -> 1
[[0,0,0],[0,1,0],[0,0,0]] -> 2
[[0,1,0],[0,0,0],[0,1,0]] -> 7
[[0,1,0],[1,0,0],[0,0,1]] -> 2
[[1,1,1],[1,1,1],[1,1,1]] -> 0
[[0,0,0,0],[0,0,1,0],[0,1,0,0],[0,0,0,0]] -> 4
[[0,0,1,0],[0,0,0,0],[0,0,0,0],[0,0,0,1]] -> 8
[[0,0,1,0],[0,0,0,0],[0,0,0,0],[0,0,1,0]] -> 14
[[0,0,1,0],[0,0,0,0],[0,0,0,0],[0,1,0,0]] -> 14
[[0,0,0,0,0],[0,0,0,0,0],[0,1,0,0,0],[0,0,0,0,1],[0,0,0,0,0]] -> 7
[[0,0,0,0,0],[0,0,0,0,0],[1,0,0,0,0],[0,0,0,0,1],[0,0,0,0,0]] -> 11
[[0,0,0,0,0],[0,0,1,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,1]] -> 5
[[0,0,0,0,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]] -> 24
[[0,0,0,1,0],[0,0,0,0,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]] -> 23
[[0,1,0,0,0],[1,0,0,0,0],[0,0,1,0,0],[0,0,0,0,1],[0,0,0,1,0]] -> 4
[[0,1,1,1,0],[0,1,1,0,1],[0,1,1,1,0],[0,1,0,0,1],[0,0,0,0,0]] -> 14
Notas
- Desafio relacionado: Imprimir uma matriz diagonal em bloco
- Inspiração: Freedom Factory, Google Code Jam 2016 Problem 2D