O símbolo tridimensional de Levi-Civita é uma função que f
leva triplos de números (i,j,k)
cada um {1,2,3}
, para {-1,0,1}
, definido como:
f(i,j,k) = 0
quandoi,j,k
não são distintos, iei=j
ouj=k
ouk=i
f(i,j,k) = 1
Quando(i,j,k)
é uma mudança cíclica de(1,2,3)
, essa é uma das(1,2,3), (2,3,1), (3,1,2)
.f(i,j,k) = -1
Quando(i,j,k)
é uma mudança cíclica de(3,2,1)
, essa é uma das(3,2,1), (2,1,3), (1,3,2)
.
O resultado é o sinal de uma permutação de (1,2,3)
, com não permutações dando 0. Alternativamente, se associarmos os valores 1,2,3
aos vetores de base unitários ortogonais e_1, e_2, e_3
, então f(i,j,k)
é o determinante da matriz 3x3 com colunas e_i, e_j, e_k
.
Entrada
Três números cada {1,2,3}
em ordem. Ou você pode optar por usar o índice zero {0,1,2}
.
Saída
O valor da função Levi-Civita de {-1,0,1}
. Isso é código de golfe.
Casos de teste
Existem 27 entradas possíveis.
(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
fonte
fonte
Respostas:
Gelatina , 5 bytes
Experimente online!
Algoritmo
Vamos considerar as diferenças ji, kj, ik .
Se (i, j, k) é uma rotação de (1, 2, 3) , as diferenças são uma rotação de (1, 1, -2) . Tomando a soma dos sinais, obtemos 1 + 1 + (-1) = 1 .
Se (i, j, k) é uma rotação de (3, 2, 1) , as diferenças são uma rotação de (-1, -1, 2) . Tomando a soma dos sinais, obtemos (-1) + (-1) + 1 = -1 .
Para (i, i, j) (ou uma rotao), em que i e j podem ser iguais, as diferenças são (0, ji, ij) . Os sinais de ji e ij são opostos, então a soma dos sinais é 0 + 0 = 0 .
Código
fonte
Python 2 , 32 bytes
Experimente online!
Algoritmo
Vamos considerar as diferenças ij, jk, ki .
Se (i, j, k) é uma rotação de (1, 2, 3) , as diferenças são uma rotação de (-1, -1, 2) . Tomando o produto, obtemos (-1) × (-1) × 2 = 2 .
Se (i, j, k) é uma rotação de (3, 2, 1) , as diferenças são uma rotação de (1, 1, -2) . Tomando o produto, obtemos 1 × 1 × (-2) = -2 .
Para (i, i, j) (ou uma rotao), em que i e j podem ser iguais, as diferenças são (0, ij, ji) . Tomando o produto, obtemos 0 × (ij) × (ji) = 0 .
Assim, dividir o produto das diferenças por 2 produz o resultado desejado.
fonte
x86, 15 bytes
Toma argumentos
%al
,%dl
,%bl
, retorna em%al
. Implementação direta usando a fórmula de Dennis.Além: acho que entendo por que
%eax
o "acumulador" agora ...fonte
sar
não quis dizershr
.Oitava, 20 bytes
Implementação bastante direta da fórmula determinante. Permite que as colunas da matriz de identidade tomem o determinante.
fonte
Wolfram Language (Mathematica) , 9 bytes
Experimente online!
Wolfram Language (Mathematica) , 18 bytes
Economizou 2 bytes graças a Martin Ender.
Experimente online!
fonte
Det@IdentityMatrix[3][[#]]&
(mais, mas menos tokens).#^1
é apenas#
;) #Haskell , 26 bytes
Experimente online!
IEEE desagradável flutua ...
fonte
JavaScript (ES6), 38 bytes
Muito complicado, mas divertido:
Experimente online!
JavaScript (ES6), 28 bytes
Usando a fórmula padrão:
Experimente online!
fonte
05AB1E ,
75 bytes1 byte salvo graças a @Emigna
Experimente online!
fonte
Ć
em vez de4∍
salvar um byte.APL (Dyalog) ,
119 bytes2 bytes salvos graças a @ngn
Experimente online!
fonte
+/×2-/4⍴⎕
Ruby , 28 bytes
Experimente online!
fonte
CJam (16 bytes)
Demonstração online . Observe que isso se baseia em uma resposta anterior que usa o símbolo Levi-Civita para calcular o símbolo Jacobi.
fonte
Ruby , 56 bytes
Experimente online!
Uma vez excluídos os casos em que os valores do trigêmeo não são únicos,
t.sort
é equivalente a (e menor que)[1,2,3]
ou[*1..3]
fonte
Casca , 7 bytes
Experimente online!
Explicação
Porta reta da resposta da geléia de Dennis .
S:←
copia o cabeçalho da lista até o final,Ẋ-
pega diferenças adjacentes,ṁ±
pega o sinal de cada elemento e soma o resultado.fonte
Gelatina , 8 bytes
Experimente online!
Parece muito não-destruído. :(
fonte
Adicionar ++ , 13 bytes
Experimente online!
fonte
SHELL , 44 Bytes
testes:
Explicação:
BC , 42 bytes
testes:
fonte
bc
para evitar a declaração de chamada / função estranha?Stax , 8 bytes
Execute e depure
Traduz para
-(b-a)(c-b)(a-c)/2
.fonte
J , 12 bytes
Experimente online!
Tradução direta da solução APL de Uriel para J.
Explicação:
4$]
Estende a lista com seu primeiro item2 /\
faça o seguinte para todos os pares sobrepostos na lista:*@-
encontre o sinal da diferença1#.
adicionarfonte
(-/ .*)@:(^&(i.3)"0)%2:
Japonês , 7 bytes
Tente
Explicação
Alternativo
Recebe entrada como números inteiros individuais.
Tente
fonte
Java 8, 28 bytes
Porto da resposta do @Dennis 'Python 2 .
Experimente online.
fonte
Python , 33 bytes
Experimente online!
Tentei por um tempo superar a abordagem do produto das diferenças , mas o melhor que obtive foi 1 byte mais.
fonte