Tantangannya adalah menulis codegolf untuk permanen sebuah matriks .
Permanen dari n
-by- n
matrix A
= ( a
i,j
) didefinisikan sebagai
Berikut S_n
merupakan himpunan semua permutasi dari [1, n]
.
Sebagai contoh (dari wiki):
Namun kode Anda dapat mengambil input yang diinginkan dan memberikan output dalam format apa pun yang masuk akal, tetapi harap sertakan dalam jawaban Anda contoh yang lengkap, termasuk instruksi yang jelas tentang cara memasok input ke kode Anda. Untuk membuat tantangan sedikit lebih menarik, matriks dapat menyertakan bilangan kompleks.
Matriks input selalu berbentuk persegi dan paling banyak 6 x 6. Anda juga harus dapat menangani matriks kosong yang permanen 1. Tidak perlu lagi menangani matriks kosong (itu menyebabkan terlalu banyak masalah).
Contohnya
Memasukkan:
[[ 0.36697048+0.02459455j, 0.81148991+0.75269667j, 0.62568185+0.95950937j],
[ 0.67985923+0.11419187j, 0.50131790+0.13067928j, 0.10330161+0.83532727j],
[ 0.71085747+0.86199765j, 0.68902048+0.50886302j, 0.52729463+0.5974208j ]]
Keluaran:
-1.7421952844303492+2.2476833142265793j
Memasukkan:
[[ 0.83702504+0.05801749j, 0.03912260+0.25027115j, 0.95507961+0.59109069j],
[ 0.07330546+0.8569899j , 0.47845015+0.45077079j, 0.80317410+0.5820795j ],
[ 0.38306447+0.76444045j, 0.54067092+0.90206306j, 0.40001631+0.43832931j]]
Keluaran:
-1.972117936608412+1.6081325306004794j
Memasukkan:
[[ 0.61164611+0.42958732j, 0.69306292+0.94856925j,
0.43860930+0.04104116j, 0.92232338+0.32857505j,
0.40964318+0.59225476j, 0.69109847+0.32620144j],
[ 0.57851263+0.69458731j, 0.21746623+0.38778693j,
0.83334638+0.25805241j, 0.64855830+0.36137045j,
0.65890840+0.06557287j, 0.25411493+0.37812483j],
[ 0.11114704+0.44631335j, 0.32068031+0.52023283j,
0.43360984+0.87037973j, 0.42752697+0.75343656j,
0.23848512+0.96334466j, 0.28165516+0.13257001j],
[ 0.66386467+0.21002292j, 0.11781236+0.00967473j,
0.75491373+0.44880959j, 0.66749636+0.90076845j,
0.00939420+0.06484633j, 0.21316223+0.4538433j ],
[ 0.40175631+0.89340763j, 0.26849809+0.82500173j,
0.84124107+0.23030393j, 0.62689175+0.61870543j,
0.92430209+0.11914288j, 0.90655023+0.63096257j],
[ 0.85830178+0.16441943j, 0.91144755+0.49943801j,
0.51010550+0.60590678j, 0.51439995+0.37354955j,
0.79986742+0.87723514j, 0.43231194+0.54571625j]]
Keluaran:
-22.92354821347135-90.74278997288275j
Anda tidak boleh menggunakan fungsi yang sudah ada sebelumnya untuk menghitung permanen.
[[]]
(memiliki satu baris, matriks kosong tidak) atau[]
(tidak memiliki kedalaman 2, matriks lakukan) dalam bentuk daftar?[[]]
.Jawaban:
J, 5 byte
J tidak menawarkan builtin untuk permanen atau determinan tetapi sebaliknya menawarkan konjungsi
u . v y
yang secara rekursif berkembang diy
sepanjang anak di bawah umur dan menghitung diadu . v
antara kofaktor dan output dari panggilan rekursif pada anak di bawah umur. Pilihanu
danv
dapat bervariasi. Misalnya, menggunakanu =: -/
danv =: *
merupakan-/ .*
penentu. Pilihan bahkan dapat berdasarkan%/ .!
manau=: %/
, dikurangi dengan pembagian, danv =: !
yang merupakan koefisien binomial. Saya tidak yakin apa artinya output itu tetapi Anda bebas memilih kata kerja Anda.Implementasi alternatif untuk 47 byte menggunakan metode yang sama dalam jawaban Mathematica saya .
Ini mensimulasikan polinomial dengan n variabel dengan membuat polinomial dengan satu variabel dinaikkan ke pangkat 2. Ini diadakan sebagai daftar koefisien dan penggandaan polinomial dilakukan menggunakan konvolusi, dan indeks pada 2 n akan berisi hasilnya.
Implementasi lain untuk 31 byte adalah
yang merupakan versi yang sedikit golf berdasarkan ekspansi Laplace yang diambil dari esai J pada determinan .
Pemakaian
sumber
Haskell, 59 byte
Ini melakukan pengembangan seperti Laplace di sepanjang kolom pertama, dan menggunakan urutan baris tidak masalah. Ini bekerja untuk semua tipe numerik.
Input adalah sebagai daftar daftar:
sumber
Jelly ,
109 byteCobalah online!
Bagaimana itu bekerja
sumber
Python 2, 75 byte
Sepertinya kikuk ... harusnya bisa dikalahkan.
sumber
05AB1E ,
191413 byteCobalah online!
Penjelasan
sumber
œ€Å\PO
.Python 2, 139 byte
repl.it
Menerapkan algoritma naif yang secara membabi buta mengikuti definisi.
sumber
MATL,
1714 byteCobalah secara Online
Penjelasan
sumber
Rubi,
7463 byteTerjemahan langsung dari formula. Beberapa byte disimpan berkat ezrast.
Penjelasan
sumber
reduce
sebenarnya menyakiti jumlah byte Anda dibandingkan dengan menggabungkan secara manual:->a{m=0;a.permutation{|b|n=1;a.size.times{|i|n*=b[i][i]};m+=n};m}
times
loop itu juga.Ruby 2.4.0,
5961 byteEkspansi Laplace Rekursif:
Kurang bermain golf:
Ruby 2.4 tidak dirilis secara resmi. Pada versi sebelumnya,
.sum
perlu diganti dengan.reduce(:+)
, menambahkan 7 byte.sumber
Mathematica, 54 byte
Sekarang matriks kosong tidak lagi dipertimbangkan, solusi ini valid. Itu berasal dari halaman MathWorld di permanen .
sumber
JavaScript (ES6), 82 byte
Bekerja dengan matriks kosong juga, tentu saja.
sumber
Julia 0.4 , 73 byte
Dalam versi julia yang lebih baru, Anda dapat menjatuhkan
[]
sekitar pemahaman, tetapi perluusing Combinatorics
untukpermutations
fungsi. Bekerja dengan semua jenis Nomor di Julia, termasukComplex
.r
adalahUnitRange
objek yang didefinisikan sebagai argumen fungsi default, yang dapat bergantung pada argumen fungsi sebelumnya.Cobalah online!
sumber