Pamiętaj, że to wyzwanie nie wymaga obsługi ani zrozumienia liczb zespolonych.
Biorąc pod uwagę niepustą kwadratową macierz, gdzie każdy element jest dwuelementową (Re, Im) listą całkowitą, ustal (podając dowolne wartości prawda / fałsz lub dowolne dwie spójne wartości), czy reprezentuje to matrycę hermitowską.
Zauważ, że wejściem jest tablica liczb całkowitych 3D; nie tablica 2D liczb zespolonych. Jeśli twój język nie może bezpośrednio pobrać tablicy 3D, możesz wziąć płaską listę (i kształt n × n lub n × n × 2, jeśli to pomoże).
Macierz jest pustelnikiem, jeśli równa się jej własnej transpozycji sprzężonej . Innymi słowy, jeśli odwrócisz go od jego górnej lewej do prawej dolnej przekątnej i negujesz drugi element wszystkich dwuelementowych list liści, będzie on identyczny z macierzą wejściową. Pamiętaj, że kolejność przewracania i negowania nie ma znaczenia, więc możesz najpierw negować, a potem odwrócić.
Przykład chodzenia
W tym przykładzie zastosowano JSON z niepotrzebną białą spacją, aby ułatwić czytanie:
[[ [2, 0] , [2, 1] , [4, 0] ],
[ [2,-1] , [3, 0] , [0, 1] ],
[ [4, 0] , [0,-1] , [1, 0] ]]
Transpozycja (odwrócenie po przekątnej NW – SE):
[[ [2, 0] , [2,-1] , [4, 0] ],
[ [2, 1] , [3, 0] , [0,-1] ],
[ [4, 0] , [0, 1] , [1, 0] ]]
Neguj drugie elementy list liści:
[[ [2, 0] , [2, 1] , [4, 0] ],
[ [2,-1] , [3, 0] , [0, 1] ],
[ [4, 0] , [0,-1] , [1, 0] ]]
Ponieważ jest to identyczne z wejściem, macierz jest pustelnikiem.
Przypadki testowe
Hermitian
[[[2,0],[2,1],[4,0]],[[2,-1],[3,0],[0,1]],[[4,0],[0,-1],[1,0]]]
[[[1,0],[2,0]],[[2,0],[1,0]]]
[[[1,0],[2,-3]],[[2,3],[1,0]]]
[[[42,0]]]
Nie-pustelnik
[[[2,0],[2,1],[4,0]],[[2,-1],[3,0],[0,1]],[[4,0],[0,-1],[1,-1]]]
[[[0,1],[0,2]],[[0,2],[0,1]]]
[[[1,0],[2,3]],[[2,3],[1,0]]]
[[[3,2]]]
Odpowiedzi:
R,
714847 bajtówBierze tablicę 3D liczb rzeczywistych, tworzy tablicę 2D liczb urojonych, transponuje, koniuguje i porównuje.
Dzięki @Giuseppe za zmniejszenie liczby bajtów o zdumiewające 23 bajty oraz @Vlo za końcowy 1!
Wypróbuj online!
Przykład:
źródło
B=A[,,1]+A[,,2]*1i
powinien zaoszczędzić kilka bajtów.isSymmetric
istnieje i działa na hermitowskich złożonych matrycach, ale1x1
sprawa jest trudna, ponieważ[
atrybuty krople, skutkuje oncomplex
zamiastmatrix
function(A)all(Conj(t(B<-A[,,1]+A[,,2]*1i))==B)
Oktawa ,
393431 bajtówWypróbuj online!
Zaoszczędziłem 3 bajty dzięki Luisowi Mendo, który poinformował mnie o wyjaśnieniach w tekście wyzwania.
Wyjaśnienie:
W MATLAB i Octave
'
transpozycja złożonego sprzężonego, a nie „zwykła” transpozycja.Tworzymy zmienną
y
wstawkę, która jest pierwszą warstwą matrycy 3D plus drugą warstwę pomnożoną przez jednostkę złożonąj
, tj. Złożoną matrycę, w której rzeczywistym terminem jest pierwsza „warstwa”, a urojonym jest druga „warstwa”. Następnie sprawdzamy, czy transponowany jest koniugat złożony.Spowoduje to wygenerowanie macierzy zawierającej tylko wartość
1
true i macierz zawierającą co najmniej jedną wartość0
false. Są one uważane za prawdziwe i fałszywe w Octave (dowód) .źródło
Python 2 , 50 bajtów
Wypróbuj online!
źródło
APL (Dyalog Unicode) ,
221597 bajtówWypróbuj online!
Funkcja ukrytego przedrostka.
Podziękowania dla Adama za 7 bajtów na Dfn oraz zarówno dla Adama, jak i Erika TheOutgolfer za znoszenie
mojej głupoty zapomoc w znalezieniu milczącej wersji.Dzięki ngn za 2 bajty w wersji ukrytej.
W jaki sposób?
źródło
Wolfram Language (Mathematica) ,
453433262118 bajtówWypróbuj online!
źródło
0xf3c7
to operator transpozycji, ale co to jest0xf3c8
?0xf3c9
( Dokumentacja Wolframa ).Java 8,
137136134126119116 bajtów-3 bajty dzięki @ceilingcat .
Zwraca
1
jeśli Hermitian,0
przeciwnym razie.Wyjaśnienie:
Wypróbuj online.
źródło
J , 14 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
-:0 2|:(,-)/"1
Haskell , 50 bajtów
-7 bajtów dzięki H.PWiz.
Wypróbuj online!
źródło
Galaretka ,
65 bajtówMonadyczny link zwracający
1
dane wejściowe hermitowskie i0
nie tylko.Wypróbuj online!
W jaki sposób?
źródło
Ø+
.05AB1E , 9 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Rubinowy , 46 bajtów
Wypróbuj online!
Port mojej odpowiedzi w języku Python
źródło
Perl 5 , -a0 48 bajtów
Stare liczenie: 50 bajtów (
+2
dlaa0
). Nieźle jak na język, który nie ma wbudowanej transpozycji (wcale nie jestem zazdrosny, nie ma sirree)Podaj macierz wejściową na STDIN
,
pomiędzy częścią rzeczywistą a urojoną, np .:Wydrukuje
1
dla pustelnika, nic innegoWypróbuj online!
źródło
Łuska , 7 bajtów
Wypróbuj online!
W jaki sposób?
Zauważ, że
†
powinno działać zamiastmm
, ale jest irytujący błąd który uniemożliwia mi jego użycie :(źródło
JavaScript (ES6), 53 bajty
Zaoszczędź 2 bajty dzięki @Neil
Zwraca
false
dla pustelnika lubtrue
nie-pustelnika.Wypróbuj online!
źródło
f=([c,...s],p='')=>c?p+c+f(s,p+'🍹'):p
.C (gcc) ,
107103100 bajtówA[0]
w golfa*A
dwa razy.Wypróbuj online!
źródło
Właściwie 13 bajtów
Wypróbuj online!
Jak to działa?
To zgłoszenie faktycznie wykorzystuje liczby zespolone. Jeśli dozwolone jest przyjmowanie danych wejściowych jako macierzy złożonych wpisów, wówczas będzie to 8 bajtów .
źródło
Pyth, 9 bajtów
Wyjaśnienie:
Zestaw testowy .
źródło
qCmm*V_B1
.qCmm.e_Fbk
... najwyraźniej zapomniałem edytować liczbę bajtów w ostatnim zgłoszeniu. @ Mr.Xcoder Naprawiłem to niezależnie, dzięki za haczyk!C,
111110108 bajtówDzięki @Jonathan Frech za uratowanie bajtu i dzięki @ceilingcat za uratowanie dwóch bajtów!
Wypróbuj online!
C (gcc) ,
106104 bajtówWypróbuj online!
źródło
r|=...|...
działa równieżr+=...||...
.Właściwie 13 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło