Il existe un type de matrice n × n W appelé forme canonique de base de Weyr . Une telle matrice est décrite par ses blocs et possède les propriétés suivantes, à l'aide du diagramme de référence suivant:
- les principaux blocs diagonaux W ii sont des matrices n i × n i de la forme λ I n i où I n i est la matrice d'identité n i × n i .
- n 1 ≥ n 2 ≥ ... ≥ n r
- les premiers blocs superdiagonaux W k-1, k pour k ∈ 2..r sont n matrices k k-1 × n k qui sont de rang de colonne complet sous forme d'échelon à rangées réduites , ou plus simplement, I n k assis au-dessus de n k-1 - n k rangées de zéros.
- tous les autres blocs sont 0 matrices.
Par exemple:
- Les principaux blocs diagonaux (jaunes) sont tels que les n i sont 4, 2, 2 et 1.
- Les premiers blocs superdiagonaux sont en vert.
- La zone grise se compose de tous les autres blocs, qui sont tous à 0 .
Pour ce défi, nous supposerons λ = 1.
Contribution
Une matrice carrée avec 0 et 1 dans n'importe quel format pratique.
Production
Sortez l'une des deux valeurs distinctes pour savoir si la matrice d'entrée est Weyr ou non Weyr.
Règles
C'est du code-golf . Le moins d'octets dans chaque langue gagne. Des règles / lacunes standard s'appliquent.
Cas de test
Présenté sous forme de tableaux de lignes.
Weyr:
[[1]]
[[1,1],[0,1]]
[[1,0,1,0,0],[0,1,0,1,0],[0,0,1,0,1],[0,0,0,1,0],[0,0,0,0,1]]
[[1,0,0,1,0,0,0,0,0],[0,1,0,0,1,0,0,0,0],[0,0,1,0,0,1,0,0,0],[0,0,0,1,0,0,1,0,0],[0,0,0,0,1,0,0,1,0],[0,0,0,0,0,1,0,0,1],[0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,0],[0,0,0,0,0,0,0,0,1]]
[[1,0,0,0,1,0,0,0,0],[0,1,0,0,0,1,0,0,0],[0,0,1,0,0,0,0,0,0],[0,0,0,1,0,0,0,0,0],[0,0,0,0,1,0,1,0,0],[0,0,0,0,0,1,0,1,0],[0,0,0,0,0,0,1,0,1],[0,0,0,0,0,0,0,1,0],[0,0,0,0,0,0,0,0,1]]
Non-Weyr:
[[0]]
[[1,0],[1,1]]
[[1,0,0,1,0,0],[0,1,0,0,0,0],[0,0,1,0,0,1],[0,0,0,1,0,0],[0,0,0,0,1,0],[0,0,0,0,0,1]]
[[1,0,1,0,0],[0,1,0,0,0],[0,0,1,0,0],[0,0,0,1,0],[0,0,0,0,1]]
[[1,0,0,1,0,0,0,0,0],[0,1,0,0,1,0,0,0,0],[0,0,1,0,0,1,0,0,0],[0,0,0,1,0,0,0,0,0],[0,0,0,0,1,0,1,0,0],[0,0,0,0,0,1,0,1,0],[0,0,0,0,0,0,1,0,1],[0,0,0,0,0,0,0,1,0],[0,0,0,0,0,0,0,0,1]]
[[1,0,0,1,0,0,0,0,0],[0,1,0,0,1,0,0,0,0],[0,0,1,0,0,1,0,0,0],[0,0,0,1,0,0,0,0,0],[0,0,0,0,1,0,1,0,0],[0,0,0,0,0,1,0,1,0],[0,0,0,0,0,0,1,0,1],[0,0,0,0,0,0,0,1,0],[0,0,0,0,0,0,0,0,1]]
. Je pense que c'est faux (mais ma réponse ne l'identifie pas comme tel).Réponses:
K (ngn / k) ,
91888480 octetsEssayez-le en ligne!
la source
Python 2 , 270 octets
Essayez-le en ligne!
Explication:
Vérifie récursivement l'identité des blocs et leurs blocs superdiagonaux.
I
vérifie si une matrice est une matrice d'identitéPour chaque bloc de la matrice d'entrée, la fonction vérifie qu'il s'agit d'une identité, et qu'il y a un autre bloc de matrice d'identité, à sa droite. L'itération suivante examine ensuite un bloc de cette taille.
la source