3 차원 Levi-Civita 기호는 다음과 같이 정의 된 ,에서 각각의 f
3 배 숫자를 취하는 함수입니다 .(i,j,k)
{1,2,3}
{-1,0,1}
f(i,j,k) = 0
때i,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) (또는 회전), I 및 J는 동일 할 수 있고, 차이점은 (0, 지, IJ) . ji 와 ij 의 부호 는 반대이므로 부호의 합은 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) (또는 회전), I 및 J는 동일 할 수 있고, 차이점은 (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&
답변
답변
자바 스크립트 (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