레비 시비 타 기호


29

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

답변:


20

젤리 , 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.

아름답다-확실히 이것은 xnor의 의도 된 알고리즘이었다.
ETHproductions

8

파이썬 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로 나누면 원하는 결과를 얻을 수 있습니다.


7

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"누산기"가 지금 인지 이해합니다 .


난 당신이 sar아니었다 고 생각합니다 shr.
Jester

@Jester good catch. 고정
qwr

6

옥타브, 20 바이트

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

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









1

루비 , 56 바이트

->t{t.uniq!? 0:(0..2).any?{|r|t.sort==t.rotate(r)}?1:-1}

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

우리는 경우를 제외하면 고유하지 않은 삼중의 값은 어디 t.sort에 해당 (그리고보다 짧은)입니다 [1,2,3]또는[*1..3]

->t{
  t.uniq! ? 0                     # If applying uniq modifies the input, return 0
          : (0..2).any?{|r|       # Check r from 0 to 2:
              t.sort==t.rotate(r) #   If rotating the input r times gives [1,2,3],
            } ? 1                 #     return 1;
              :-1                 #     else return -1
}




0

, 44 바이트

 F(){ bc<<<\($2-$1\)*\($3-$1\)*\($3-$2\)/2;}

테스트 :

 F 1 2 3
 1

 F 1 1 2
 0

 F  2 3 1
 1

 F 3 1 2
 1

 F 3 2 1
 -1

 F 2 1 3
 -1

 F 1 3 2
 -1

 F 1 3 1
 0

설명 :

 The formula is : ((j - i)*(k - i)*(k - j))/2

BC , 42 바이트

 define f(i,j,k){return(j-i)*(k-i)*(k-j)/2}

테스트 :

 f(3,2,1)
 -1
 f(1,2,3)
 1
 f(1,2,1)
 0

1
bc불필요한 호출 / 함수 선언을 피하기 위해 언어를 주장하는 것이 가능 합니까?
caird coinheringaahing

1
있는 쉘이 작동합니까?
Dennis


0

J , 12 바이트

1#.2*@-/\4$]

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

Uriel의 APL 솔루션을 J로 직접 번역

설명:

4$] 첫 번째 항목으로 목록을 확장합니다

2 /\ 목록의 모든 겹치는 쌍에 대해 다음을 수행하십시오.

*@- 그들의 차이의 표시를 찾으십시오

1#. 합치다


1
이 Vandermonde-determinant 기반 솔루션을 누구나 골프 (-/ .*)@:(^&(i.3)"0)%2:
Kyle Miller

0

Japt , 7 바이트

änUÌ xg

시도 해봐


설명

            :Implicit input of array U
ä           :Get each consecutive pair of elements
 n          :Reduce by subtracting the first from the last
  UÌ        :But, before doing that, prepend the last element in U
     g      :Get the signs
    x       :Reduce by addition

대안

입력을 개별 정수로 취합니다.

NänW ×z

시도 해봐



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.