Wyznacznik macierzy 2 na 2
a b
c d
jest podane przez ad - bc
.
Biorąc pod uwagę macierz cyfr o wymiarach 2 n na 2 n , n ≥ 1, wyprowadzaj wynik uzyskany przez rekurencyjne obliczanie wyznacznika każdego podbloku 2 na 2, aż osiągniemy pojedynczą liczbę.
Na przykład biorąc pod uwagę dane wejściowe
3 1 4 1
5 9 2 6
5 3 5 8
9 7 9 3
Po jednym kroku uzyskujemy:
(3*9 - 1*5) (4*6 - 1*2) = 22 22
(5*7 - 3*9) (5*3 - 8*9) 8 -57
I powtarzając raz jeszcze, otrzymujemy:
(22*-57 - 22*8) = -1430
Stąd wynik powinien być -1430
.
Zasady
- Elementami macierzy będą zawsze jednocyfrowe liczby całkowite, tj. Od 0 do 9.
- Możesz wprowadzać dane w dowolnym dogodnym formacie listy lub ciągu, o ile dane wstępne nie są przetwarzane. Ponieważ macierz jest zawsze kwadratowa, możesz wziąć dane wejściowe jako pojedynczą listę 1D zamiast listy 2D, jeśli chcesz.
- Dane wejściowe mogą być wprowadzane za pomocą funkcji wejściowej, STDIN, argumentu wiersza poleceń lub najbliższej alternatywy.
- Wyjście powinno być pojedynczą liczbą całkowitą funkcji wyjścia, STDOUT lub najbliższą alternatywą. Nie można wyprowadzać pojedynczej liczby całkowitej z listy lub macierzy.
- Możesz użyć wbudowanych metod wyznaczania i manipulacji macierzą, jeśli Twój język je obsługuje.
- Twój algorytm musi działać teoretycznie dla każdego ważnego wejścia.
- Standard zasady gry w golfa .
Przypadki testowe
Następujące przypadki testowe są podane jako listy w stylu 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
(Podziękowania dla @ MartinBüttner za pomoc w tym wyzwaniu)
[1,0,1,0;1,1,1,1;1,1,1,1;0,0,0,1]
. Pełna wyznacznik wynosi zero, ponieważ ma dwa identyczne wiersze. Jest to zatem pojedyncza (czyli nieodwracalna) matryca 4 × 4, więc nie jest liczona przez A055165. Jednak omawiana tutaj determinantem „rekurencyjnym” jest 1*1-1*0==1
. W przeciwnym kierunku macierz [0,0,0,1;1,0,0,0;0,1,0,0;0,0,1,0]
ma wyznacznik „rekurencyjny” 0*0-0*0==0
. Jednak jego pełny wyznacznik musi być niezerowy, ponieważ jego wiersze są tylko wierszami macierzy tożsamości w innej kolejności; i jest liczony przez A055165.