Há um tipo de n x n matriz W chamada básica forma canónica Weyr . Essa matriz é descrita por seus blocos e possui as seguintes propriedades, usando o seguinte diagrama de referência:
- os principais blocos diagonais W II são n i x n i matrizes da forma λ I n i em que I n i é a n i x n i matriz identidade.
- n 1 ≥ n 2 ≥ ... ≥ n r
- os primeiros blocos superdiagonal W k k-1, para k ∈ 2..r são n k-1 × n k matrizes que são posto coluna cheia em forma escalonada de redução de linha , ou mais simplesmente, que n k senta-se sobre n k-1 - n k linhas de zeros.
- todos os outros blocos são 0 matrizes.
Por exemplo:
- Os principais blocos diagonais (amarelo) são tais que o n i são 4, 2, 2, e 1.
- Os primeiros blocos superdiagonais estão em verde.
- A zona cinza consiste em todos os outros blocos, que são todos 0 .
Para este desafio, assumiremos λ = 1.
Entrada
Uma matriz quadrada com 0s e 1s em qualquer formato conveniente.
Resultado
Envie um dos dois valores distintos para saber se a matriz de entrada é Weyr ou não Weyr.
Regras
Isso é código-golfe . O menor número de bytes em cada idioma vence. Regras / lacunas padrão se aplicam.
Casos de teste
Apresentado como matrizes de linhas.
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]]
Não-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]]
. Eu acho que é falso (mas minha resposta falha em identificá-lo como tal).Respostas:
K (ngn / k) ,
91888480 bytesExperimente online!
fonte
Python 2 , 270 bytes
Experimente online!
Explicação:
Verifica recursivamente os blocos quanto à identidade e seus blocos superdiagonais.
I
verifica se uma matriz é uma matriz de identidadePara cada bloco da matriz de entrada, a função verifica se é uma identidade e se há outro bloco da matriz de identidade, à direita. A próxima iteração, em seguida, analisa um bloco desse tamanho.
fonte