Il determinante di una matrice 2 per 2
a b
c d
è dato da ad - bc
.
Data una matrice di cifre con dimensioni 2 n per 2 n , n ≥ 1, emette il risultato ottenuto calcolando ricorsivamente il determinante di ciascun sottoblocco 2 per 2 fino a raggiungere un singolo numero.
Ad esempio, dato l'input
3 1 4 1
5 9 2 6
5 3 5 8
9 7 9 3
Dopo un passaggio, otteniamo:
(3*9 - 1*5) (4*6 - 1*2) = 22 22
(5*7 - 3*9) (5*3 - 8*9) 8 -57
E ripetendo ancora una volta, otteniamo:
(22*-57 - 22*8) = -1430
Quindi, l'output dovrebbe essere -1430
.
Regole
- Gli elementi della matrice saranno sempre numeri interi a una cifra, ovvero da 0 a 9.
- È possibile accettare input in qualsiasi elenco o formato stringa conveniente, purché non venga eseguita la preelaborazione dei dati. Poiché la matrice è sempre quadrata, è possibile prendere input come un singolo elenco 1D anziché un elenco 2D, se lo si desidera.
- L'input può essere tramite input di funzione, STDIN, argomento della riga di comando o alternativa più vicina.
- L'output deve essere un singolo numero intero per funzionare output, STDOUT o alternativa più vicina. Non è possibile generare l'intero numero intero in un elenco o matrice.
- È possibile utilizzare i metodi di manipolazione determinante e matrice incorporati se la propria lingua sembra supportarli.
- Il tuo algoritmo deve funzionare in teoria per qualsiasi input valido.
- Si applicano le regole standard del code-golf .
Casi test
I seguenti casi di test sono indicati come elenchi in stile 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
(Grazie a @ MartinBüttner per l'aiuto in questa sfida)
[1,0,1,0;1,1,1,1;1,1,1,1;0,0,0,1]
. Il determinante completo è zero poiché ha due righe identiche. Questa è quindi una matrice 4 × 4 singolare (che significa non invertibile), quindi non è conteggiata da A055165. Tuttavia, il determinante "ricorsivo" discusso qui è 1*1-1*0==1
. Nella direzione opposta, la matrice [0,0,0,1;1,0,0,0;0,1,0,0;0,0,1,0]
ha un determinante "ricorsivo" 0*0-0*0==0
. Tuttavia, il suo determinante completo deve essere diverso da zero perché le sue righe sono solo le righe della matrice identità in un altro ordine; ed è conteggiato da A055165.