Beachten Sie, dass für diese Herausforderung keine komplexen Zahlen verarbeitet oder verstanden werden müssen.
Bei einer nicht leeren quadratischen Matrix, in der jedes Element eine ganzzahlige Liste mit zwei Elementen (Re, Im) ist, bestimmen Sie (unter Angabe von Wahrheits- / Falschheitswerten oder zwei konsistenten Werten), ob dies eine hermitische Matrix darstellt.
Beachten Sie, dass die Eingabe ein 3D-Array von Ganzzahlen ist. kein 2D-Array komplexer Zahlen. Wenn Ihre Sprache ein 3D-Array nicht direkt aufnehmen kann, können Sie eine flache Liste (und die Form n × n oder n × n × 2, falls dies hilfreich ist) verwenden.
Eine Matrix ist hermitisch, wenn sie ihrer eigenen konjugierten Transponierung entspricht . Mit anderen Worten, wenn Sie es über die Diagonale von links oben nach rechts unten drehen und das zweite Element aller Blattlisten mit zwei Elementen negieren, ist es identisch mit der Eingabematrix. Beachten Sie, dass die Reihenfolge des Umdrehens und Negierens irrelevant ist. Sie können also zuerst negieren und anschließend umdrehen.
Walk-through-Beispiel
In diesem Beispiel wird JSON mit überflüssigen Leerzeichen verwendet, um das Lesen zu vereinfachen:
[[ [2, 0] , [2, 1] , [4, 0] ],
[ [2,-1] , [3, 0] , [0, 1] ],
[ [4, 0] , [0,-1] , [1, 0] ]]
Transponieren (Umblättern der NW-SE-Diagonale):
[[ [2, 0] , [2,-1] , [4, 0] ],
[ [2, 1] , [3, 0] , [0,-1] ],
[ [4, 0] , [0, 1] , [1, 0] ]]
Negiere zweite Elemente von Blattlisten:
[[ [2, 0] , [2, 1] , [4, 0] ],
[ [2,-1] , [3, 0] , [0, 1] ],
[ [4, 0] , [0,-1] , [1, 0] ]]
Da dies mit der Eingabe identisch ist, ist die Matrix hermitisch.
Testfälle
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]]]
Nicht-Hermitianer
[[[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]]]
Antworten:
R
714847 BytesNimmt ein 3D-Array von reellen Zahlen auf, erstellt ein 2D-Array von imaginären Zahlen, transponiert, konjugiert und vergleicht.
Vielen Dank an @ Giuseppe für die Reduzierung der Byteanzahl um erstaunliche 23 Bytes und an @ Vlo für die letzte 1!
Probieren Sie es online!
Beispiel:
quelle
B=A[,,1]+A[,,2]*1i
sollte ein paar Bytes sparen.isSymmetric
existiert und arbeitet für hermitischen komplexen Matrices aber der1x1
Fall ist , da heikel[
Tropfen Attribute und es ergibt sich eincomplex
eher als einmatrix
function(A)all(Conj(t(B<-A[,,1]+A[,,2]*1i))==B)
In-Line-Zuordnung speichert 1.Oktave ,
393431 BytesProbieren Sie es online!
3 Bytes gespart dank Luis Mendo, der mich über die Klarstellungen im Challenge-Text informiert hat.
Erläuterung:
In MATLAB und Octave
'
ist die konjugierte komplexe Transponierte nicht die "reguläre" Transponierte.Wir erstellen eine Variable
y
inline, die die erste Ebene der 3D-Matrix plus die zweite Ebene multipliziert mit der komplexen Einheit istj
, dh eine komplexe Matrix, bei der der Realterm die erste "Ebene" und die Imaginäre die zweite "Ebene" ist. Wir prüfen dann, ob es sich um ein komplexes transponiertes Konjugat handelt.Dies gibt eine Matrix aus, die nur
1
true enthält, und eine Matrix, die mindestens0
false enthält. Diese werden in Octave (Proof) als wahr und falsch betrachtet .quelle
Python 2 , 50 Bytes
Probieren Sie es online!
quelle
APL (Dyalog Unicode) ,
221597 BytesProbieren Sie es online!
Tacit-Präfix-Funktion.
Vielen Dank an Adám für 7 Bytes im Dfn und an Adám und ErikTheOutgolfer
, die meine Dummheitertragenund mirgeholfen haben, die stillschweigende Version zu finden.Danke an ngn für 2 Bytes in der stillschweigenden Version.
Wie?
quelle
Wolfram Language (Mathematica) ,
453433262118 BytesProbieren Sie es online!
quelle
0xf3c7
der Transponierungsoperator ist, aber was ist das0xf3c8
?0xf3c9
( Wolfram-Dokumentation ).Java 8,
137136134126119 BytesGibt zurück,
1
wenn Hermitian,0
sonst.Erläuterung:
Probieren Sie es online aus.
quelle
J , 14 Bytes
Probieren Sie es online!
Erläuterung
quelle
-:0 2|:(,-)/"1
Haskell , 50 Bytes
-7 Bytes dank H.PWiz.
Probieren Sie es online!
quelle
Gelee ,
65 BytesEin monadischer Link, der
1
für eine Hermitianische Eingabe und0
sonstiges zurückkehrt.Probieren Sie es online!
Wie?
quelle
Ø+
.05AB1E , 9 Bytes
Probieren Sie es online!
Erläuterung
quelle
Ruby , 46 Bytes
Probieren Sie es online!
Port meiner Python-Antwort
quelle
Perl 5 , -a0 48 Bytes
Alte Zählung: 50 Bytes (
+2
füra0
). Nicht schlecht für eine Sprache, die keine eingebaute Transponierung hat (ich bin überhaupt nicht eifersüchtig, nein, Sirree)Geben Sie mit die Eingabematrix auf STDIN ein
,
zwischen Real- und Imaginärteil an, z. B .:Wird
1
für Einsiedler gedruckt , sonst nichtsProbieren Sie es online!
quelle
Schale , 7 Bytes
Probieren Sie es online!
Wie?
Beachten Sie, dass
†
das funktionieren solltemm
, aber es gibt einen nervigen Bug , der mich daran hindert, es zu verwenden :(quelle
JavaScript (ES6), 53 Byte
2 Bytes dank @Neil gespeichert
Rückgabe
false
für Hermitianer odertrue
für Nicht-Hermitianer.Probieren Sie es online!
quelle
f=([c,...s],p='')=>c?p+c+f(s,p+'🍹'):p
.C (GCC) ,
107103100 BytesA[0]
bis*A
zweimal.Probieren Sie es online!
quelle
Eigentlich 13 Bytes
Probieren Sie es online!
Wie es funktioniert?
Diese Vorlage verwendet tatsächlich komplexe Zahlen. Wenn die Eingabe als Matrix komplexer Einträge zulässig wäre, wären dies 8 Byte .
quelle
Pyth, 9 Bytes
Erläuterung:
Testsuite .
quelle
qCmm*V_B1
.qCmm.e_Fbk
... anscheinend habe ich vergessen, die Anzahl der Bytes in der endgültigen Übermittlung zu bearbeiten. @ Mr.Xcoder Ich habe es trotzdem behoben, danke für den Haken!C
111110108 BytesDanke an Jonathan Frech für das Speichern eines Bytes und danke an Ceilingcat für das Speichern von zwei Bytes!
Probieren Sie es online!
C (GCC) ,
106104 BytesProbieren Sie es online!
quelle
r|=...|...
funktioniert genauso gut wier+=...||...
.Eigentlich 13 Bytes
Probieren Sie es online!
Erläuterung:
quelle