Wyzwanie polega na napisaniu codegolfa na stałe matrycy .
Stała n
-by- n
matrix A
= ( a
i,j
) jest zdefiniowana jako
Tutaj S_n
reprezentuje zestaw wszystkich permutacji [1, n]
.
Jako przykład (z wiki):
Kod może przyjmować dane wejściowe w dowolny sposób i dawać dane wyjściowe w dowolnym rozsądnym formacie, ale w odpowiedzi należy podać pełny sprawdzony przykład, w tym jasne instrukcje dotyczące sposobu wprowadzania danych wejściowych do kodu. Aby wyzwanie było trochę bardziej interesujące, macierz może zawierać liczby zespolone.
Matryca wejściowa jest zawsze kwadratowa i będzie wynosić co najwyżej 6 na 6. Będziesz także musiał obsługiwać pustą macierz, która ma stałą 1. Nie ma potrzeby obsługi pustej macierzy (powodowało to zbyt wiele problemy).
Przykłady
Wejście:
[[ 0.36697048+0.02459455j, 0.81148991+0.75269667j, 0.62568185+0.95950937j],
[ 0.67985923+0.11419187j, 0.50131790+0.13067928j, 0.10330161+0.83532727j],
[ 0.71085747+0.86199765j, 0.68902048+0.50886302j, 0.52729463+0.5974208j ]]
Wynik:
-1.7421952844303492+2.2476833142265793j
Wejście:
[[ 0.83702504+0.05801749j, 0.03912260+0.25027115j, 0.95507961+0.59109069j],
[ 0.07330546+0.8569899j , 0.47845015+0.45077079j, 0.80317410+0.5820795j ],
[ 0.38306447+0.76444045j, 0.54067092+0.90206306j, 0.40001631+0.43832931j]]
Wynik:
-1.972117936608412+1.6081325306004794j
Wejście:
[[ 0.61164611+0.42958732j, 0.69306292+0.94856925j,
0.43860930+0.04104116j, 0.92232338+0.32857505j,
0.40964318+0.59225476j, 0.69109847+0.32620144j],
[ 0.57851263+0.69458731j, 0.21746623+0.38778693j,
0.83334638+0.25805241j, 0.64855830+0.36137045j,
0.65890840+0.06557287j, 0.25411493+0.37812483j],
[ 0.11114704+0.44631335j, 0.32068031+0.52023283j,
0.43360984+0.87037973j, 0.42752697+0.75343656j,
0.23848512+0.96334466j, 0.28165516+0.13257001j],
[ 0.66386467+0.21002292j, 0.11781236+0.00967473j,
0.75491373+0.44880959j, 0.66749636+0.90076845j,
0.00939420+0.06484633j, 0.21316223+0.4538433j ],
[ 0.40175631+0.89340763j, 0.26849809+0.82500173j,
0.84124107+0.23030393j, 0.62689175+0.61870543j,
0.92430209+0.11914288j, 0.90655023+0.63096257j],
[ 0.85830178+0.16441943j, 0.91144755+0.49943801j,
0.51010550+0.60590678j, 0.51439995+0.37354955j,
0.79986742+0.87723514j, 0.43231194+0.54571625j]]
Wynik:
-22.92354821347135-90.74278997288275j
Nie można używać żadnych wcześniej istniejących funkcji do obliczania wartości stałej.
[[]]
(ma jeden wiersz, pusta matryca nie) lub[]
(nie ma głębokości 2, matryce mają) w formie listy?[[]]
.Odpowiedzi:
J, 5 bajtów
J nie oferuje wbudowanych stałych lub determinant, ale zamiast tego oferuje koniunkcję,
u . v y
która rekurencyjnie rozwija sięy
wzdłuż nieletnich i oblicza różnicęu . v
między kofaktorami a wydajnością wywołania rekurencyjnego na nieletnich. Wyboryu
iv
mogą się różnić. Na przykład użycieu =: -/
iv =: *
jest-/ .*
wyznacznikiem. Wybory mogą nawet według%/ .!
miejscau=: %/
, zmniejszyć przez podział iv =: !
który jest współczynnikiem dwumianowym. Nie jestem pewien, co oznacza to wyjście, ale możesz swobodnie wybierać czasowniki.Alternatywna implementacja dla 47 bajtów przy użyciu tej samej metody w mojej odpowiedzi Mathematica .
Symuluje to wielomian ze zmiennymi n , tworząc wielomian z jedną zmienną podniesioną do potęg 2. To jest utrzymywane jako lista współczynników, a mnożenie wielomianowe jest wykonywane przy użyciu splotu, a indeks przy 2 n będzie zawierał wynik.
Inną implementacją dla 31 bajtów jest
która jest lekko golfową wersją opartą na rozszerzeniu Laplace'a zaczerpniętym z eseju J na temat wyznaczników .
Stosowanie
źródło
Haskell, 59 bajtów
Robi to podobnie jak Laplace'a wzdłuż pierwszej kolumny i używa, że kolejność wierszy nie ma znaczenia. Działa dla każdego typu liczbowego.
Dane wejściowe są jak lista list:
źródło
Galaretka ,
109 bajtówWypróbuj online!
Jak to działa
źródło
Python 2, 75 bajtów
Wydaje się niezgrabny ... powinien być dający się pokonać.
źródło
05AB1E ,
191413 bajtówWypróbuj online!
Wyjaśnienie
źródło
œ€Å\PO
.Python 2, 139 bajtów
repl.it
Implementuje naiwny algorytm, który ślepo podąża za definicją.
źródło
MATL,
1714 bajtówWypróbuj online
Wyjaśnienie
źródło
Rubin,
7463 bajtyProste tłumaczenie formuły. Kilka bajtów zapisanych dzięki ezrast.
Wyjaśnienie
źródło
reduce
faktycznie boli liczbę bajtów w porównaniu do ręcznego agregowania:->a{m=0;a.permutation{|b|n=1;a.size.times{|i|n*=b[i][i]};m+=n};m}
times
pętli.Ruby 2.4.0,
5961 bajtówRekurencyjne rozszerzenie Laplace'a:
Mniej golfa:
Ruby 2.4 nie jest oficjalnie wydany. We wcześniejszych wersjach
.sum
należy go zastąpić.reduce(:+)
, dodając 7 bajtów.źródło
Mathematica, 54 bajty
Teraz, gdy puste matryce nie są już brane pod uwagę, to rozwiązanie jest poprawne. Pochodzi ze strony MathWorld na stałe .
źródło
JavaScript (ES6), 82 bajty
Oczywiście działa również z pustą matrycą.
źródło
Julia 0.4 , 73 bajty
W nowszych wersjach Julii możesz porzucić
[]
rozeznanie, ale potrzebujeszusing Combinatorics
dopermutations
funkcji. Działa ze wszystkimi typami liczb w Julii, w tymComplex
.r
toUnitRange
obiekt zdefiniowany jako domyślny argument funkcji, który może zależeć od poprzednich argumentów funkcji.Wypróbuj online!
źródło