(inspirado por esta pregunta sobre matemáticas)
Las definiciones
Dada una n x nmatriz cuadrada A , podemos llamarla invertiblesi existe alguna n x nmatriz cuadrada B tal que AB = BA = I n , siendo I n la matriz de identidad de tamaño n x n(la matriz con la diagonal principal 1sy cualquier otra cosa 0), y AB y BA que representa la multiplicación matricial habitual (no voy a entrar en eso aquí, vaya a tomar una clase de álgebra lineal).
A partir de eso, podemos llamar a una m x nmatriz C totally invertible si cada k x ksubmatriz (que se define más adelante) de C es invertible para todos k > 1, k <= (smaller of m,n).
Una submatriz se define como la matriz resultante después de la eliminación de cualquier número de filas y / o columnas de la matriz original. Por ejemplo, la siguiente 3x3matriz C se puede transformar en una 2x2submatriz C ' eliminando la primera fila 1 2 3y la columna central de la 2 5 8siguiente manera:
C = [[1 2 3]
[4 5 6] --> C' = [[4 6]
[7 8 9]] [7 9]]
Tenga en cuenta que hay muchas posibilidades de submatrices diferentes, lo anterior es solo un ejemplo. Este desafío solo se refiere a aquellos en los que la submatriz resultante es una k x k matriz cuadrada .
El reto
Dada una matriz de entrada, determine si es totalmente invertible o no.
La entrada
- Una única matriz de tamaño
m x n, en cualquier formato adecuado . - Sin pérdida de generalidad, puede asumir
m <= nom >= n, lo que sea más golfista para su código, y tomar la entrada de esa manera (es decir, obtiene una operación de transposición de forma gratuita si lo desea). - El tamaño de la matriz de entrada no será menor
3 x 3ni mayor que el que pueda manejar su idioma. - La matriz de entrada consistirá solo en valores numéricos de Z + (los enteros positivos ).
La salida
- Un valor verdadero / falso para determinar si la matriz de entrada es totalmente invertible.
Las normas
- Un programa completo o una función son aceptables.
- Las lagunas estándar están prohibidas.
- Este es el código de golf, por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).
Los ejemplos
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]]
6rincón, no un 7. Errores tipográficos torpes.
2 6 3; 1 12 2; 5 3 1?