Das dreidimensionale Levi-Civita-Symbol ist eine Funktion, f
die Dreifachzahlen (i,j,k)
in {1,2,3}
, bis {-1,0,1}
, definiert als:
f(i,j,k) = 0
wenni,j,k
nicht verschieden sind, dhi=j
oderj=k
oderk=i
f(i,j,k) = 1
Wann(i,j,k)
ist eine zyklische Verschiebung von(1,2,3)
, das ist eine von(1,2,3), (2,3,1), (3,1,2)
.f(i,j,k) = -1
Wann(i,j,k)
ist eine zyklische Verschiebung von(3,2,1)
, das ist eine von(3,2,1), (2,1,3), (1,3,2)
.
Das Ergebnis ist das Vorzeichen einer Permutation von (1,2,3)
, wobei Nicht-Permutationen 0 ergeben. Wenn wir alternativ die Werte 1,2,3
orthogonalen Einheitsbasisvektoren zuordnen e_1, e_2, e_3
, f(i,j,k)
ist dies die Determinante der 3 × 3-Matrix mit Spalten e_i, e_j, e_k
.
Eingang
Jeweils drei Nummern {1,2,3}
in der Reihenfolge. Alternativ können Sie auch mit einem Index von Null arbeiten {0,1,2}
.
Ausgabe
Ihr Levi-Civita-Funktionswert von {-1,0,1}
. Das ist Code Golf.
Testfälle
Es gibt 27 mögliche Eingaben.
(1, 1, 1) => 0
(1, 1, 2) => 0
(1, 1, 3) => 0
(1, 2, 1) => 0
(1, 2, 2) => 0
(1, 2, 3) => 1
(1, 3, 1) => 0
(1, 3, 2) => -1
(1, 3, 3) => 0
(2, 1, 1) => 0
(2, 1, 2) => 0
(2, 1, 3) => -1
(2, 2, 1) => 0
(2, 2, 2) => 0
(2, 2, 3) => 0
(2, 3, 1) => 1
(2, 3, 2) => 0
(2, 3, 3) => 0
(3, 1, 1) => 0
(3, 1, 2) => 1
(3, 1, 3) => 0
(3, 2, 1) => -1
(3, 2, 2) => 0
(3, 2, 3) => 0
(3, 3, 1) => 0
(3, 3, 2) => 0
(3, 3, 3) => 0
code-golf
permutations
xnor
quelle
quelle
Antworten:
Gelee , 5 Bytes
Probieren Sie es online!
Algorithmus
Betrachten wir die Unterschiede ji, kj, ik .
Wenn (i, j, k) eine Drehung von (1, 2, 3) ist , sind die Differenzen eine Drehung von (1, 1, -2) . Aus der Summe der Zeichen ergibt sich 1 + 1 + (-1) = 1 .
Wenn (i, j, k) eine Drehung von (3, 2, 1) ist , sind die Differenzen eine Drehung von (-1, -1, 2) . Nimmt man die Summe der Zeichen, so erhält man (-1) + (-1) + 1 = -1 .
Für (i, i, j) (oder eine Drehung), bei der i und j gleich sein können, sind die Differenzen (0, ji, ij) . Die Vorzeichen von ji und ij sind entgegengesetzt, sodass die Summe der Vorzeichen 0 + 0 = 0 ist .
Code
quelle
Python 2 , 32 Bytes
Probieren Sie es online!
Algorithmus
Betrachten wir die Unterschiede ij, jk, ki .
Wenn (i, j, k) eine Drehung von (1, 2, 3) ist , sind die Differenzen eine Drehung von (-1, -1, 2) . Nimmt man das Produkt, so erhält man (-1) × (-1) × 2 = 2 .
Wenn (i, j, k) eine Drehung von (3, 2, 1) ist , sind die Differenzen eine Drehung von (1, 1, -2) . Nimmt man das Produkt, so erhält man 1 × 1 × (-2) = -2 .
Für (i, i, j) (oder eine Drehung), bei der i und j gleich sein können, sind die Differenzen (0, ij, ji) . Nimmt man das Produkt, so erhält man 0 × (ij) × (ji) = 0 .
Wenn man also das Produkt der Differenzen durch 2 dividiert, erhält man das gewünschte Ergebnis.
quelle
x 86, 15 Bytes
Nimmt Argumente
%al
,%dl
,%bl
, kehrt in%al
. Einfache Implementierung nach Dennis 'Formel.Nebenbei: Ich glaube ich verstehe
%eax
jetzt warum der "Akku" ist ...quelle
sar
nichtshr
.Oktave, 20 Bytes
Ziemlich direkte Umsetzung der Determinantenformel. Permutiert die Spalten der Identitätsmatrix, dann übernimmt die Determinante.
quelle
Wolfram-Sprache (Mathematica) , 9 Bytes
Probieren Sie es online!
Wolfram Language (Mathematica) , 18 Byte
2 Bytes gespart dank Martin Ender.
Probieren Sie es online!
quelle
Det@IdentityMatrix[3][[#]]&
(länger, aber weniger Token).#^1
is just#
;)Haskell , 26 Bytes
Probieren Sie es online!
Böse IEEE schwimmt ...
quelle
JavaScript (ES6), 38 Byte
Überkompliziert aber lustig:
Probieren Sie es online!
JavaScript (ES6), 28 Byte
Mit der Standardformel:
Probieren Sie es online!
quelle
05AB1E ,
75 Bytes1 Byte gespart dank @Emigna
Probieren Sie es online!
quelle
Ć
statt4∍
speichert ein Byte.APL (Dyalog) ,
119 Bytes2 Bytes gespart dank @ngn
Probieren Sie es online!
quelle
+/×2-/4⍴⎕
Ruby , 28 Bytes
Probieren Sie es online!
quelle
CJam (16 Bytes)
Online-Demo . Beachten Sie, dass dies auf einer früheren Antwort von mir basiert, die das Levi-Civita-Symbol verwendet, um das Jacobi-Symbol zu berechnen.
quelle
Ruby , 56 Bytes
Probieren Sie es online!
Wenn wir Fälle ausschließen, in denen die Werte des Tripletts nicht eindeutig sind,
t.sort
ist dies gleichbedeutend mit (und kürzer als)[1,2,3]
oder[*1..3]
quelle
Schale , 7 Bytes
Probieren Sie es online!
Erläuterung
Gerade Port von Dennis's Jelly Antwort .
S:←
kopiert den Kopf der Liste bis zum Ende,Ẋ-
nimmt benachbarte Differenzen auf,ṁ±
nimmt das Vorzeichen jedes Elements und summiert das Ergebnis.quelle
Gelee , 8 Bytes
Probieren Sie es online!
Scheint zu ungolfed. :(
quelle
Add ++ , 13 Bytes
Probieren Sie es online!
quelle
SHELL , 44 Bytes
Tests:
Erklärung:
BC , 42 Bytes
Tests:
quelle
bc
, um die fremde Aufruf- / Funktionsdeklaration zu vermeiden?Stax , 8 Bytes
Führen Sie es aus und debuggen Sie es
Übersetzt nach
-(b-a)(c-b)(a-c)/2
.quelle
J , 12 Bytes
Probieren Sie es online!
Direkte Übersetzung von Uriels APL-Lösung in J.
Erläuterung:
4$]
Erweitert die Liste um den ersten Eintrag2 /\
Führen Sie für alle überlappenden Paare in der Liste die folgenden Schritte aus:*@-
finde das Zeichen ihres Unterschieds1#.
addierenquelle
(-/ .*)@:(^&(i.3)"0)%2:
Japt , 7 Bytes
Versuch es
Erläuterung
Alternative
Übernimmt die Eingabe als einzelne Ganzzahlen.
Versuch es
quelle
Java 8, 28 Bytes
Port von @Dennis 'Python 2 Antwort .
Probieren Sie es online aus.
quelle
Python , 33 Bytes
Probieren Sie es online!
Ich habe eine Weile versucht, den Produkt-aus-Unterschieden-Ansatz zu übertreffen , aber das Beste, was ich bekam, war 1 Byte länger.
quelle