Considérez les matrices diagonales de blocs binaires qui ont des blocs carrés de 1 sur la diagonale principale et sont 0 partout ailleurs. Appelons de telles matrices des matrices "valides".
Par exemple, voici quelques matrices 4x4 valides:
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
Notez qu'une autre façon de décrire de telles matrices est qu'il existe une chaîne de blocs carrés 1 du haut à gauche au bas à droite, touchant coin à coin, et partout ailleurs est 0.
Par contraste, voici quelques matrices 4x4 invalides:
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
Vous recevrez une n
par n
matrice binaire en entrée - quel est le nombre minimum de 0
morceaux que vous aurez besoin de mettre à 1
afin d'obtenir une matrice valide?
Vous pouvez écrire une fonction ou un programme prenant n'importe quelle chaîne, liste ou format matriciel pratique représentant une n
sous- n
matrice de 0 et 1 (tant qu'il n'est pas prétraité). Les lignes doivent être clairement séparées d'une certaine manière, donc les formats comme un tableau 1D de bits ne sont pas autorisés.
Il s'agit de code-golf , donc l'objectif est de minimiser le nombre d'octets dans votre programme.
Exemples
Par exemple, si l'entrée est
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
alors la réponse est 5, puisque vous pouvez définir cinq 0
bits 1
pour obtenir:
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
et c'est le nombre minimum requis. Cependant, si l'entrée était
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
alors la réponse est 24, puisque la seule matrice 5x5 valide où le coin supérieur droit 1
est la matrice de tous les 1
s.
Cas de test
Les tests sont représentés ici sous la forme d'un tableau 2D d'entiers.
[[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
Remarques
- Défi associé: Imprimer une matrice de diagonale de bloc
- Inspiration: Freedom Factory, Google Code Jam 2016 Problème 2D