El determinante de una matriz 2 por 2
a b
c d
está dada por ad - bc
.
Dada una matriz de dígitos con dimensiones 2 n por 2 n , n ≥ 1, genera el resultado obtenido calculando recursivamente el determinante de cada subbloque 2 por 2 hasta llegar a un solo número.
Por ejemplo, dada la entrada
3 1 4 1
5 9 2 6
5 3 5 8
9 7 9 3
Después de un paso, obtenemos:
(3*9 - 1*5) (4*6 - 1*2) = 22 22
(5*7 - 3*9) (5*3 - 8*9) 8 -57
E iterando una vez más, obtenemos:
(22*-57 - 22*8) = -1430
Por lo tanto, la salida debería ser -1430
.
Reglas
- Los elementos de la matriz siempre serán enteros de un solo dígito, es decir, de 0 a 9.
- Puede tomar la entrada en cualquier lista conveniente o formato de cadena, siempre que no se realice un procesamiento previo de los datos. Dado que la matriz siempre es cuadrada, puede tomar la entrada como una sola lista 1D en lugar de una lista 2D si lo desea.
- La entrada puede ser a través de la entrada de función, STDIN, argumento de línea de comando o la alternativa más cercana.
- La salida debe ser un solo entero para funcionar con salida, STDOUT o la alternativa más cercana. No puede generar el entero único en una lista o matriz.
- Puede utilizar métodos de manipulación de determinantes y matrices incorporados si su idioma los respalda.
- Su algoritmo debe funcionar en teoría para cualquier entrada válida.
- Aplican reglas estándar de código de golf .
Casos de prueba
Los siguientes casos de prueba se dan como listas de estilo Python:
[[1,0],[0,1]] -> 1
[[1,9],[8,4]] -> -68
[[0,1,2,3],[4,5,6,7],[8,9,0,1],[2,3,4,5]] -> 40
[[3,1,4,1],[5,9,2,6],[5,3,5,8],[9,7,9,3]] -> -1430
[[9,0,0,9],[0,9,9,0],[9,0,9,0],[0,9,0,9]] -> 13122
[[1,0,0,0,0,0,0,0],[2,1,0,0,0,0,0,0],[3,2,1,0,0,0,0,0],[4,3,2,1,0,0,0,0],[5,4,3,2,1,0,0,0],[6,5,4,3,2,1,0,0],[7,6,5,4,3,2,1,0],[8,7,6,5,4,3,2,1]] -> 1
[[7,1,0,5,8,0,1,5],[9,9,6,6,1,2,4,8],[4,8,7,3,8,7,4,7],[4,6,1,9,7,0,1,7],[7,6,7,1,9,4,1,6],[8,0,0,8,5,5,9,9],[4,6,4,8,9,4,8,6],[9,0,8,7,6,2,1,5]] -> 2937504
[[1,2,3,4,5,6,7,8],[2,3,4,5,6,7,8,1],[3,4,5,6,7,8,1,2],[4,5,6,7,8,1,2,3],[5,6,7,8,1,2,3,4],[6,7,8,1,2,3,4,5],[7,8,1,2,3,4,5,6],[8,1,2,3,4,5,6,7]] -> -10549504
[[1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0],[0,1,1,1,1,0,0,1,0,1,1,1,1,1,1,0],[1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0],[0,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1],[1,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0],[0,0,1,1,1,0,1,1,1,1,1,1,1,0,0,0],[1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1],[1,1,0,1,1,1,1,1,1,1,1,1,0,1,0,1],[1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1],[0,1,1,1,1,1,1,1,1,0,0,1,0,1,0,1],[1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,0,1,1,0,1,1,1,1,1,0,0,1,1,0],[1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,0,1,0,0,1,0,1,0,1,1,1,1,1,0,1],[1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1]] -> -8
(Gracias a @ MartinBüttner por la ayuda con este desafío)
[1,0,1,0;1,1,1,1;1,1,1,1;0,0,0,1]
. El determinante completo es cero, ya que tiene dos filas idénticas. Por lo tanto, esta es una matriz 4 × 4 singular (es decir, no invertible), por lo que A055165 no la cuenta. Sin embargo, el determinante "recursivo" discutido aquí es 1*1-1*0==1
. En la dirección opuesta, la matriz [0,0,0,1;1,0,0,0;0,1,0,0;0,0,1,0]
tiene determinante "recursivo" 0*0-0*0==0
. Sin embargo, su determinante completo debe ser distinto de cero porque sus filas son solo las filas de la matriz de identidad en otro orden; y se cuenta por A055165.