Le déterminant d'une matrice 2 par 2
a b
c d
est donné par ad - bc
.
Étant donné une matrice de chiffres de dimensions 2 n par 2 n , n ≥ 1, sortez le résultat obtenu en calculant récursivement le déterminant de chaque sous-bloc 2 par 2 jusqu'à ce que nous atteignions un nombre unique.
Par exemple, étant donné l'entrée
3 1 4 1
5 9 2 6
5 3 5 8
9 7 9 3
Après une étape, on obtient:
(3*9 - 1*5) (4*6 - 1*2) = 22 22
(5*7 - 3*9) (5*3 - 8*9) 8 -57
Et en répétant, nous obtenons:
(22*-57 - 22*8) = -1430
Par conséquent, la sortie devrait être -1430
.
Règles
- Les éléments de la matrice seront toujours des entiers à un chiffre, c'est-à-dire de 0 à 9.
- Vous pouvez prendre des entrées dans n'importe quel format de liste ou de chaîne pratique, tant qu'aucun prétraitement des données n'est effectué. Puisque la matrice est toujours carrée, vous pouvez prendre l'entrée comme une seule liste 1D au lieu d'une liste 2D si vous le souhaitez.
- L'entrée peut se faire via l'entrée de fonction, STDIN, l'argument de ligne de commande ou l'alternative la plus proche.
- La sortie doit être un entier unique pour fonctionner en sortie, STDOUT ou l'alternative la plus proche. Vous ne pouvez pas sortir le seul entier dans une liste ou une matrice.
- Vous pouvez utiliser des méthodes intégrées de manipulation des déterminants et de la matrice si votre langue les prend en charge.
- Votre algorithme doit fonctionner en théorie pour toute entrée valide.
- Les règles de code-golf standard s'appliquent.
Cas de test
Les cas de test suivants sont donnés sous forme de listes de style 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
(Merci à @ MartinBüttner pour son aide dans ce défi)
[1,0,1,0;1,1,1,1;1,1,1,1;0,0,0,1]
. Le déterminant complet est zéro car il a deux lignes identiques. Celui-ci est donc une matrice singulière (c'est-à-dire non inversible) 4 × 4, il n'est donc pas compté par A055165. Cependant, le déterminant "récursif" discuté ici l'est 1*1-1*0==1
. Dans la direction opposée, la matrice [0,0,0,1;1,0,0,0;0,1,0,0;0,0,1,0]
a un déterminant "récursif" 0*0-0*0==0
. Cependant, son déterminant complet doit être différent de zéro car ses lignes ne sont que les lignes de la matrice d'identité dans un autre ordre; et il est compté par A055165.