Simbol Levi-Civita tiga dimensi adalah fungsi yang f
mengambil tiga kali lipat dari bilangan (i,j,k)
masing-masing dalam {1,2,3}
, untuk {-1,0,1}
, didefinisikan sebagai:
f(i,j,k) = 0
ketikai,j,k
tidak berbeda, yaitui=j
atauj=k
atauk=i
f(i,j,k) = 1
kapan(i,j,k)
pergeseran siklik(1,2,3)
, itu adalah salah satunya(1,2,3), (2,3,1), (3,1,2)
.f(i,j,k) = -1
kapan(i,j,k)
pergeseran siklik(3,2,1)
, itu adalah salah satunya(3,2,1), (2,1,3), (1,3,2)
.
Hasilnya adalah tanda permutasi dari (1,2,3)
, dengan non-permutasi memberikan 0. Atau, jika kita mengaitkan nilai-nilai 1,2,3
dengan vektor-vektor basis satuan ortogonal e_1, e_2, e_3
, maka f(i,j,k)
merupakan penentu matriks 3x3 dengan kolom e_i, e_j, e_k
.
Memasukkan
Tiga angka masing-masing dari {1,2,3}
dalam urutan. Atau, Anda dapat memilih untuk menggunakan indeks-nol {0,1,2}
.
Keluaran
Nilai fungsi Levi-Civita dari {-1,0,1}
. Ini kode golf.
Uji kasus
Ada 27 input yang mungkin.
(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
Tidak
sumber
sumber
Jawaban:
Jelly , 5 byte
Cobalah online!
Algoritma
Mari kita perhatikan perbedaannya ji, kj, ik .
Jika (i, j, k) adalah rotasi (1, 2, 3) , perbedaannya adalah rotasi (1, 1, -2) . Mengambil jumlah dari tanda-tanda, kita mendapatkan 1 + 1 + (-1) 1 = .
Jika (i, j, k) adalah rotasi (3, 2, 1) , perbedaannya adalah rotasi (-1, -1, 2) . Mengambil jumlah dari tanda-tanda, kita mendapatkan (-1) + (-1) + 1 = -1 .
Untuk (i, i, j) (atau rotasi), di mana i dan j mungkin sama, perbedaannya adalah (0, ji, ij) . Tanda-tanda ji dan ij berlawanan, jadi jumlah dari tanda-tanda itu adalah 0 + 0 = 0 .
Kode
sumber
Python 2 , 32 byte
Cobalah online!
Algoritma
Mari kita pertimbangkan perbedaan ij, jk, ki .
Jika (i, j, k) adalah rotasi (1, 2, 3) , perbedaannya adalah rotasi (-1, -1, 2) . Mengambil produk, kami mendapatkan (-1) × (-1) × 2 = 2 .
Jika (i, j, k) adalah rotasi (3, 2, 1) , perbedaannya adalah rotasi (1, 1, -2) . Mengambil produk, kita mendapatkan 1 × 1 × (-2) = -2 .
Untuk (i, i, j) (atau rotasi), di mana i dan j mungkin sama, perbedaannya adalah (0, ij, ji) . Mengambil produk, kami mendapatkan 0 × (ij) × (ji) = 0 .
Jadi, membagi produk dari perbedaan dengan 2 menghasilkan hasil yang diinginkan.
sumber
x86, 15 byte
Mengambil argumen di
%al
,%dl
,%bl
, kembali dalam%al
. Implementasi langsung menggunakan rumus Dennis.Selain itu: Saya pikir saya mengerti mengapa
%eax
"akumulator" sekarang ...sumber
sar
tidak bermaksud begitushr
.Oktaf, 20 byte
Implementasi rumus determinan cukup langsung. Mengijinkan kolom dari matriks identitas kemudian mengambil determinan.
sumber
Bahasa Wolfram (Mathematica) , 9 byte
Cobalah online!
Bahasa Wolfram (Mathematica) , 18 byte
Disimpan 2 byte berkat Martin Ender.
Cobalah online!
sumber
Det@IdentityMatrix[3][[#]]&
(lebih lama, tetapi lebih sedikit token).#^1
hanya#
;)Haskell , 26 byte
Cobalah online!
IEEE jahat mengapung ...
sumber
JavaScript (ES6), 38 byte
Rumit tapi menyenangkan:
Cobalah online!
JavaScript (ES6), 28 byte
Menggunakan rumus standar:
Cobalah online!
sumber
05AB1E ,
75 byte1 byte disimpan berkat @Emigna
Cobalah online!
sumber
Ć
bukannya4∍
menyimpan byte.APL (Dyalog) ,
119 byte2 byte disimpan berkat @ngn
Cobalah online!
sumber
+/×2-/4⍴⎕
Ruby , 28 byte
Cobalah online!
sumber
CJam (16 byte)
Demo online . Perhatikan bahwa ini didasarkan pada jawaban saya sebelumnya yang menggunakan simbol Levi-Civita untuk menghitung simbol Jacobi.
sumber
Ruby , 56 byte
Cobalah online!
Setelah kami mengesampingkan kasus di mana nilai triplet tidak unik,
t.sort
setara dengan (dan lebih pendek dari)[1,2,3]
atau[*1..3]
sumber
Sekam , 7 byte
Cobalah online!
Penjelasan
Port langsung dari jawaban Dennis's Jelly .
S:←
menyalin kepala daftar sampai akhir,Ẋ-
mengambil perbedaan yang berdekatan, danṁ±
mengambil tanda dari setiap elemen dan menjumlahkan hasilnya.sumber
Jelly , 8 byte
Cobalah online!
Tampaknya terlalu ungolfed. :(
sumber
Tambahkan ++ , 13 byte
Cobalah online!
sumber
SHELL , 44 Bytes
tes:
Penjelasan:
SM , 42 Bytes
tes:
sumber
bc
untuk menghindari deklarasi panggilan / fungsi asing?Stax , 8 byte
Jalankan dan debug itu
Diterjemahkan ke
-(b-a)(c-b)(a-c)/2
.sumber
J , 12 byte
Cobalah online!
Terjemahan langsung dari solusi APL Uriel ke J.
Penjelasan:
4$]
Perpanjang daftar dengan item pertama2 /\
lakukan hal berikut untuk semua pasangan yang tumpang tindih dalam daftar:*@-
temukan tanda perbedaan mereka1#.
menjumlahkansumber
(-/ .*)@:(^&(i.3)"0)%2:
Japt , 7 byte
Cobalah
Penjelasan
Alternatif
Mengambil input sebagai bilangan bulat individual.
Cobalah
sumber
Java 8, 28 byte
Port jawaban @Dennis 'Python 2 .
Cobalah online.
sumber
Python , 33 byte
Cobalah online!
Saya mencoba untuk sementara waktu untuk mengalahkan pendekatan perbedaan-produk , tetapi yang terbaik yang saya dapatkan adalah 1 byte lebih lama.
sumber