레비 시비 타 기호 순열의 (1,2,3)우리 값 연결할 경우 비

3 차원 Levi-Civita 기호는 다음과 같이 정의 된 ,에서 각각의 f3 배 숫자를 취하는 함수입니다 .(i,j,k){1,2,3}{-1,0,1}

  • f(i,j,k) = 0i,j,k다른 점은 없다, 즉, i=j또는 j=k또는k=i
  • f(i,j,k) = 1(i,j,k)의 순환 시프트이다 (1,2,3)중 하나이다 (1,2,3), (2,3,1), (3,1,2).
  • f(i,j,k) = -1(i,j,k)의 순환 시프트이다 (3,2,1)중 하나이다 (3,2,1), (2,1,3), (1,3,2).

그 결과 인 부호 의 순열의 (1,2,3)우리 값 연결할 경우 비 – 순열은, 다르게는 0을주는, 1,2,3수직 부와 기저 벡터를 e_1, e_2, e_3다음 f(i,j,k)은 IS 결정 열 × 3 행렬은 e_i, e_j, e_k.

입력

{1,2,3}순서대로 세 개의 숫자 . 또는 0 인덱스를 사용하도록 선택할 수 있습니다 {0,1,2}.

산출

의 Levi-Civita 함수 값은에서 {-1,0,1}입니다. 이것은 코드 골프입니다.

테스트 사례

27 개의 가능한 입력이 있습니다.

(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



답변

젤리 , 5 바이트

ṁ4IṠS

온라인으로 사용해보십시오!

연산

차이점 ji, kj, ik을 고려해 봅시다 .

  • 경우 (전, J, K가) 의 회전이다 (1, 2, 3) 의 차이의 회전이다 (1, 1, -2) . 부호의 합을 취하면 1 + 1 + (-1) = 1이 됩니다.

  • 경우 (전, J, K가) 의 회전이다 (3, 2, 1) 의 차이의 회전이다 (-1, -1, 2) . 부호의 합을 취하면 (-1) + (-1) + 1 = -1이 됩니다.

  • 내용 (I, I, J) (또는 회전), IJ는 동일 할 수 있고, 차이점은 (0, 지, IJ) . jiij 의 부호 는 반대이므로 부호의 합은 0 + 0 = 0 입니다.

암호

ṁ4IṠS  Main link. Argument: [i, j, k]

ṁ4     Mold 4; yield [i, j, k, i].
  I    Increments; yield [j-i, k-j, i-k].
   Ṡ   Take the signs, replacing 2 and -2 with 1 and -1 (resp.).
    S  Take the sum.


답변

파이썬 2 , 32 바이트

lambda i,j,k:(i-j)*(j-k)*(k-i)/2

온라인으로 사용해보십시오!

연산

ij, jk, ki 의 차이점을 고려해 봅시다 .

  • 경우 (전, J, K가) 의 회전이다 (1, 2, 3) 의 차이의 회전이다 (-1, -1, 2) . 곱하면 (-1) × (-1) × 2 = 2가 됩니다.

  • 경우 (전, J, K가) 의 회전이다 (3, 2, 1) 의 차이의 회전이다 (1, 1, -2) . 제품을 취하면 1 × 1 × (-2) = -2가 됩니다.

  • 내용 (I, I, J) (또는 회전), IJ는 동일 할 수 있고, 차이점은 (0, IJ, 지) . 제품을 취하면 0 × (ij) × (ji) = 0이 됩니다.

따라서, 차이의 곱을 2로 나누면 원하는 결과를 얻을 수 있습니다.


답변

x86, 15 바이트

에 인수를 %al, %dl, %bl, 수익률 %al. Dennis의 공식을 사용한 간단한 구현.

 6: 88 c1                   mov    %al,%cl
 8: 28 d0                   sub    %dl,%al
 a: 28 da                   sub    %bl,%dl
 c: 28 cb                   sub    %cl,%bl
 e: f6 e3                   mul    %bl
10: f6 e2                   mul    %dl
12: d0 f8                   sar    %al
14: c3                      retq

옆으로 : 나는 왜 %eax“누산기”가 지금 인지 이해합니다 .


답변

옥타브, 20 바이트

@(v)det(eye(3)(:,v))

결정 공식의 직접적인 구현. 항등 행렬의 열을 치환하고 결정자를 취합니다.


답변

Wolfram Language (Mathematica) , 9 바이트

Signature

온라인으로 사용해보십시오!


Wolfram Language (Mathematica) , 18 바이트

Martin Ender 덕분에 2 바이트를 절약했습니다.

Det@{#^0,#,#^2}/2&

온라인으로 사용해보십시오!


답변

하스켈 , 26 바이트

(x#y)z=(x-y)*(y-z)*(z-x)/2

온라인으로 사용해보십시오!

불쾌한 IEEE 수레 …


답변

자바 스크립트 (ES6), 38 바이트

복잡하지만 재미있다 :

(a,b,c,k=(a+b*7+c*13)%18)=>k-12?+!k:-1

온라인으로 사용해보십시오!


자바 스크립트 (ES6), 28 바이트

표준 공식 사용 :

(a,b,c)=>(a-b)*(b-c)*(c-a)/2

온라인으로 사용해보십시오!