(inspirado por esta pergunta sobre matemática)
As Definições
Dada uma n x n
matriz quadrada A , podemos chamá-la invertible
se existir alguma n x n
matriz quadrada B, tal que AB = BA = I n , com I n sendo a matriz de identidade de tamanho n x n
(a matriz com a principal diagonal se 1
qualquer outra coisa 0
), e AB e BA representando a multiplicação matricial usual (não vou entrar nisso aqui - faça uma aula de álgebra linear).
A partir disso, podemos chamar uma m x n
matriz C totally invertible
se cada k x k
submatriz (definido abaixo) de C pode ser invertida para todos k > 1
, k <= (smaller of m,n)
.
Uma submatriz é definida como a matriz resultante após a exclusão de qualquer número de linhas e / ou colunas da matriz original. Por exemplo, a 3x3
matriz C abaixo pode ser transformada em uma 2x2
submatriz C ' removendo a primeira linha 1 2 3
e a coluna do meio da 2 5 8
seguinte maneira:
C = [[1 2 3]
[4 5 6] --> C' = [[4 6]
[7 8 9]] [7 9]]
Observe que existem muitas possibilidades diferentes de submatrizes, o acima é apenas um exemplo. Esse desafio está relacionado apenas àqueles em que a submatriz resultante é uma k x k
matriz quadrada .
O desafio
Dada uma matriz de entrada, determine se é totalmente invertível ou não.
A entrada
- Uma única matriz de tamanho
m x n
, em qualquer formato adequado . - Sem perda de generalidade, você pode assumir
m <= n
oum >= n
, o que for mais golfista para o seu código, e aceitar a entrada dessa maneira (ou seja, você obtém uma operação de transposição gratuitamente, se desejar). - O tamanho da matriz de entrada não será menor que
3 x 3
, nem maior do que o seu idioma pode suportar. - A matriz de entrada será composta apenas por valores numéricos de Z + ( números inteiros positivos ).
A saída
- Um valor de verdade / falsey para saber se a matriz de entrada é totalmente invertível.
As regras
- Um programa completo ou uma função são aceitáveis.
- As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
Os exemplos
Truthy
[[1 2 3]
[2 3 1]
[3 1 2]]
[[2 6 3]
[1 12 2]
[5 3 1]]
[[1 2 3 4]
[2 3 4 1]
[3 4 1 2]]
[[2 3 5 7 11]
[13 17 19 23 29]
[31 37 41 43 47]]
Falsey
[[1 2 3]
[4 5 6]
[7 8 9]]
[[1 6 2 55 3]
[4 5 5 5 6]
[9 3 7 10 4]
[7 1 8 23 9]]
[[2 3 6]
[1 2 12]
[1 1 6]]
[[8 2 12 13 2]
[12 7 13 12 13]
[8 1 12 13 5]]
6
no canto, não um 7
. Erros de digitação desajeitados.
2 6 3; 1 12 2; 5 3 1
?