Hay un tipo de n × n matriz W llamada forma canónica básica de Weyr . Dicha matriz se describe por sus bloques y tiene las siguientes propiedades, utilizando el siguiente diagrama de referencia:
- los bloques diagonales principales W ii son n i × n i matrices de la forma λ I n i donde I n i es la matriz de identidad n i × n i .
- n 1 ≥ n 2 ≥ ... ≥ n r
- los primeros bloques superdiagonales W k-1, k para k ∈ 2..r son n k-1 × n k matrices que son rango de columna completo en forma escalonada reducida , o más simplemente, I n k sentado encima de n k-1 - n k filas de ceros.
- todos los otros bloques son 0 matrices.
Por ejemplo:
- Los bloques diagonales principales (amarillo) son tales que n i son 4, 2, 2 y 1.
- Los primeros bloques superdiagonales están en verde.
- La zona gris consta de todos los otros bloques, que son todos 0 .
Para este desafío asumiremos λ = 1.
Entrada
Una matriz cuadrada con 0s y 1s en cualquier formato conveniente.
Salida
Genere uno de dos valores distintos para saber si la matriz de entrada es Weyr o no Weyr.
Reglas
Este es el código de golf . Pocos bytes en cada idioma gana. Se aplican reglas estándar / lagunas.
Casos de prueba
Presentado como matrices de filas.
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]]
No 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]]
. Creo que es falso (pero mi respuesta no lo identifica como tal).Respuestas:
K (ngn / k) ,
91888480 bytesPruébalo en línea!
fuente
Python 2 , 270 bytes
Pruébalo en línea!
Explicación:
Verifica recursivamente los bloques en busca de identidad y sus bloques superdiagonales.
I
comprueba si una matriz es una matriz de identidadPara cada bloque de la matriz de entrada, la función comprueba que es una identidad y que hay otro bloque de matriz de identidad, a la derecha. La siguiente iteración luego mira un bloque de ese tamaño.
fuente