Трехмерный символ Леви-Чивита является функцией f
принятия троек чисел (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)
это определитель матрицы 3x3 со столбцами e_i, e_j, e_k
.
вход
Три номера {1,2,3}
по порядку. Или вы можете использовать нулевую индексацию {0,1,2}
.
Выход
Их значение функции Леви-Чивита от {-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 байт
Попробуйте онлайн!
Алгоритм
Давайте рассмотрим различия ji, kj, ik .
Если (i, j, k) является поворотом (1, 2, 3) , различия являются вращением (1, 1, -2) . Взяв сумму знаков, получим 1 + 1 + (-1) = 1 .
Если (i, j, k) - это вращение (3, 2, 1) , различия - это вращение (-1, -1, 2) . Взяв сумму знаков, мы получим (-1) + (-1) + 1 = -1 .
Для (i, i, j) (или вращения), где i и j могут быть равны, различия составляют (0, ji, ij) . Знаки ji и ij противоположны, поэтому сумма знаков 0 + 0 = 0 .
Код
источник
Python 2 , 32 байта
Попробуйте онлайн!
Алгоритм
Давайте рассмотрим различия ij, jk, ki .
Если (i, j, k) является поворотом (1, 2, 3) , различия являются поворотом (-1, -1, 2) . Взяв произведение, получаем (-1) × (-1) × 2 = 2 .
Если (i, j, k) - это вращение (3, 2, 1) , различия - это вращение (1, 1, -2) . Взяв произведение, получаем 1 × 1 × (-2) = -2 .
Для (i, i, j) (или вращения), где i и j могут быть равны, различия равны (0, ij, ji) . Взяв произведение, получаем 0 × (ij) × (ji) = 0 .
Таким образом, деление произведения разностей на 2 дает желаемый результат.
источник
x86, 15 байт
Принимает аргументы
%al
,%dl
,%bl
, возвращается в%al
. Простая реализация с использованием формулы Денниса.В сторону: думаю, я понимаю, почему
%eax
сейчас «аккумулятор» ...источник
sar
нетshr
.Октава, 20 байт
Довольно прямая реализация определяющей формулы. Переставляет столбцы единичной матрицы, затем принимает определитель.
источник
Wolfram Language (Mathematica) , 9 байт
Попробуйте онлайн!
Wolfram Language (Mathematica) , 18 байт
Сохранено 2 байта благодаря Мартину Эндеру.
Попробуйте онлайн!
источник
Det@IdentityMatrix[3][[#]]&
(больше, но меньше токенов).#^1
это просто#
;)Haskell , 26 байтов
Попробуйте онлайн!
Противный IEEE плавает ...
источник
JavaScript (ES6), 38 байт
Сложно, но весело:
Попробуйте онлайн!
JavaScript (ES6), 28 байт
Используя стандартную формулу:
Попробуйте онлайн!
источник
05AB1E ,
75 байтов1 байт сохранен благодаря @Emigna
Попробуйте онлайн!
источник
Ć
вместо того, чтобы4∍
сохранить байт.APL (Dyalog) ,
119 байтов2 байта сохранены благодаря @ngn
Попробуйте онлайн!
источник
+/×2-/4⍴⎕
Рубин , 28 байт
Попробуйте онлайн!
источник
CJam (16 байт)
Онлайн демо . Обратите внимание, что это основано на моем предыдущем ответе, который использует символ Леви-Чивита для вычисления символа Якоби.
источник
Рубин , 56 байт
Попробуйте онлайн!
Как только мы исключаем случаи, когда значения триплета не являются уникальными,
t.sort
эквивалентны (и короче)[1,2,3]
или[*1..3]
источник
Шелуха , 7 байт
Попробуйте онлайн!
объяснение
Прямой порт Денниса желе ответ .
S:←
копирует заголовок списка до конца,Ẋ-
принимает смежные различия,ṁ±
принимает знак каждого элемента и суммирует результат.источник
Желе , 8 байт
Попробуйте онлайн!
Кажется, слишком безрассудным. :(
источник
Добавить ++ , 13 байт
Попробуйте онлайн!
источник
SHELL , 44 байта
тесты:
Пояснение:
БК , 42 байта
Тесты:
источник
bc
чтобы избежать постороннего объявления вызова / функции?Stax , 8 байт
Запустите и отладьте его
Переводится в
-(b-a)(c-b)(a-c)/2
.источник
J , 12 байт
Попробуйте онлайн!
Прямой перевод решения APL Уриэля на J.
Объяснение:
4$]
Расширяет список первым элементом2 /\
выполните следующие действия для всех перекрывающихся пар в списке:*@-
найти знак их разницы1#.
складыватьисточник
(-/ .*)@:(^&(i.3)"0)%2:
Japt , 7 байт
Попытайся
объяснение
альтернатива
Принимает ввод как отдельные целые числа.
Попытайся
источник
Java 8, 28 байт
Порт @Dennis 'Python 2 ответа .
Попробуйте онлайн.
источник
Python , 33 байта
Попробуйте онлайн!
Некоторое время я пытался превзойти подход « продукт различий» , но лучшее, что я получил, было на 1 байт больше.
источник