El símbolo tridimensional de Levi-Civita es una función que ftoma triples números (i,j,k)cada uno {1,2,3}, en {-1,0,1}, definido como:
f(i,j,k) = 0cuandoi,j,kno son distintos, es decir,i=joj=kok=if(i,j,k) = 1cuando(i,j,k)es un cambio cíclico de(1,2,3), ese es uno de(1,2,3), (2,3,1), (3,1,2).f(i,j,k) = -1cuando(i,j,k)es un cambio cíclico de(3,2,1), ese es uno de(3,2,1), (2,1,3), (1,3,2).
El resultado es el signo de una permutación de (1,2,3), con no permutaciones dando 0. Alternativamente, si asociamos los valores 1,2,3con vectores de base de unidades ortogonales e_1, e_2, e_3, entonces f(i,j,k)es el determinante de la matriz 3x3 con columnas e_i, e_j, e_k.
Entrada
Tres números cada uno {1,2,3}en orden. O bien, puede optar por usar indexado a cero {0,1,2}.
Salida
Su valor de función Levi-Civita de {-1,0,1}. Este es el código de golf.
Casos de prueba
Hay 27 entradas posibles.
(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
fuente
fuente

Respuestas:
Jalea , 5 bytes
Pruébalo en línea!
Algoritmo
Consideremos las diferencias ji, kj, ik .
Si (i, j, k) es una rotación de (1, 2, 3) , las diferencias son una rotación de (1, 1, -2) . Tomando la suma de los signos, obtenemos 1 + 1 + (-1) = 1 .
Si (i, j, k) es una rotación de (3, 2, 1) , las diferencias son una rotación de (-1, -1, 2) . Tomando la suma de los signos, obtenemos (-1) + (-1) + 1 = -1 .
Para (i, i, j) (o una rotación), donde i y j pueden ser iguales, las diferencias son (0, ji, ij) . Los signos de ji e ij son opuestos, por lo que la suma de los signos es 0 + 0 = 0 .
Código
fuente
Python 2 , 32 bytes
Pruébalo en línea!
Algoritmo
Consideremos las diferencias ij, jk, ki .
Si (i, j, k) es una rotación de (1, 2, 3) , las diferencias son una rotación de (-1, -1, 2) . Tomando el producto, obtenemos (-1) × (-1) × 2 = 2 .
Si (i, j, k) es una rotación de (3, 2, 1) , las diferencias son una rotación de (1, 1, -2) . Tomando el producto, obtenemos 1 × 1 × (-2) = -2 .
Para (i, i, j) (o una rotación), donde i y j pueden ser iguales, las diferencias son (0, ij, ji) . Tomando el producto, obtenemos 0 × (ij) × (ji) = 0 .
Por lo tanto, dividir el producto de las diferencias entre 2 produce el resultado deseado.
fuente
x86, 15 bytes
Toma argumentos en
%al,%dl,%bl, regresa en%al. Implementación sencilla utilizando la fórmula de Dennis.Aparte: creo que entiendo por qué
%eaxes el "acumulador" ahora ...fuente
sarnoshr.Octava, 20 bytes
Implementación bastante directa de la fórmula determinante. Permuta las columnas de la matriz de identidad y luego toma el determinante.
fuente
Wolfram Language (Mathematica) , 9 bytes
Pruébalo en línea!
Wolfram Language (Mathematica) , 18 bytes
Guardado 2 bytes gracias a Martin Ender.
Pruébalo en línea!
fuente
Det@IdentityMatrix[3][[#]]&(más tiempo, pero menos tokens).#^1es justo#;)Haskell , 26 bytes
Pruébalo en línea!
Flotadores desagradables de IEEE ...
fuente
JavaScript (ES6), 38 bytes
Demasiado complicado pero divertido:
Pruébalo en línea!
JavaScript (ES6), 28 bytes
Usando la fórmula estándar:
Pruébalo en línea!
fuente
05AB1E ,
75 bytes1 byte guardado gracias a @Emigna
Pruébalo en línea!
fuente
Ćen lugar de4∍guardar un byte.APL (Dyalog) ,
119 bytes2 bytes guardados gracias a @ngn
Pruébalo en línea!
fuente
+/×2-/4⍴⎕Rubí , 28 bytes.
Pruébalo en línea!
fuente
CJam (16 bytes)
Demo en línea . Tenga en cuenta que esto se basa en una respuesta anterior mía que utiliza el símbolo de Levi-Civita para calcular el símbolo de Jacobi.
fuente
Ruby , 56 bytes
Pruébalo en línea!
Una vez que descartamos casos donde los valores del triplete no son únicos,
t.sortes equivalente a (y más corto que)[1,2,3]o[*1..3]fuente
Casco , 7 bytes
Pruébalo en línea!
Explicación
El puerto directo de Dennis's Jelly responde .
S:←copia el encabezado de la lista hasta el final,Ẋ-toma las diferencias adyacentes,ṁ±toma el signo de cada elemento y suma el resultado.fuente
Jalea , 8 bytes
Pruébalo en línea!
Parece muy poco golfista. :(
fuente
Agregar ++ , 13 bytes
Pruébalo en línea!
fuente
SHELL , 44 Bytes
pruebas:
Explicacion:
BC , 42 Bytes
pruebas:
fuente
bcpara evitar la declaración de llamada / función extraña?Stax , 8 bytes
Ejecutar y depurarlo
Se traduce a
-(b-a)(c-b)(a-c)/2.fuente
J , 12 bytes
Pruébalo en línea!
Traducción directa de la solución APL de Uriel a J.
Explicación:
4$]Extiende la lista con su primer elemento.2 /\haga lo siguiente para todos los pares superpuestos en la lista:*@-encuentra el signo de su diferencia1#.agregarfuente
(-/ .*)@:(^&(i.3)"0)%2:Japt , 7 bytes
Intentalo
Explicación
Alternativa
Toma datos como enteros individuales.
Intentalo
fuente
Java 8, 28 bytes
Puerto de @Dennis 'Python 2 respuesta .
Pruébalo en línea.
fuente
Python , 33 bytes
Pruébalo en línea!
Intenté por un tiempo superar el enfoque del producto de las diferencias , pero lo mejor que obtuve fue 1 byte más.
fuente