Masalah
Membuat program atau fungsi yang dapat menghitung hasil dari matriks diangkat ke n th kekuasaan. Kode Anda akan mengambil matriks persegi yang sewenang-wenang A dan bilangan bulat non-negatif n , dan kembali matriks dengan nilai A n .
Batasan
Fungsi bawaan yang menghitung daya matriks dan produk matriks tidak diizinkan.
Sisa aturan standar untuk kode-golf berlaku.
Penjelasan
Diberikan matriks kuadrat A , nilai A n = AA ⋯ A (produk matriks berulang dari A dengan dirinya sendiri, n kali). Jika n positif, standar yang baru saja disebutkan digunakan. Ketika n adalah nol, matriks identitas dengan urutan A yang sama adalah hasilnya.
Tujuan
Ini adalah kode-golf dan kode terpendek menang.
Uji Kasus
Di sini, A adalah matriks input, n adalah integer input, dan r adalah matriks output di mana r = A n .
n = 0
A = 62 72
10 34
r = 1 0
0 1
n = 1
A = 23 61 47
81 11 60
42 9 0
r = 23 61 47
81 11 60
42 9 0
n = 2
A = 12 28 -26 3
-3 -10 -13 0
25 41 3 -4
-20 -14 -4 29
r = -650 -1052 -766 227
-331 -517 169 43
332 469 -1158 -53
-878 -990 574 797
n = 4
A = -42 -19 18 -38
-33 26 -13 31
-43 25 -48 28
34 -26 19 -48
r = -14606833 3168904 -6745178 4491946
1559282 3713073 -4130758 7251116
8097114 5970846 -5242241 12543582
-5844034 -4491274 4274336 -9196467
n = 5
A = 7 0 -3 8 -5 6 -6
6 7 1 2 6 -3 2
7 8 0 0 -8 5 2
3 0 1 2 4 -3 4
2 4 -1 -7 -4 -1 -8
-3 8 -9 -2 7 -4 -8
-4 -5 -1 0 5 5 -1
r = 39557 24398 -75256 131769 50575 14153 -7324
182127 19109 3586 115176 -23305 9493 -44754
146840 31906 -23476 190418 -38946 65494 26468
42010 -21876 41060 -13950 -55148 19290 -406
44130 34244 -35944 34272 22917 -39987 -54864
1111 40810 -92324 35831 215711 -117849 -75038
-70219 8803 -61496 6116 45247 50166 2109
A^-1
bisa digunakan sebagai penggantiinv(A)
?exp(k*log(M))
diperbolehkan? (Meskipun mungkin tidak berfungsi karena cabang yang tidak unik.)Jawaban:
Jelly ,
171615 byteCobalah online!
Permalinks dengan output grid: test case 1 | test case 2 | test case 3 | test case 4 | test case 5
Bagaimana itu bekerja
sumber
MATL , 20 byte
Cobalah online!
Penjelasan
Ini menghindari perkalian matriks dengan melakukannya secara manual, menggunakan perkalian elemen-bijaksana dengan siaran diikuti oleh penjumlahan vektor. Secara khusus, untuk melipatgandakan matriks
M
danN
, keduanya berukuran s × s :M
. Panggil matriks yang dihasilkanP
.N
sehinggaN
adalah "berubah" dengan sumbu rotasi sepanjang dimensi pertama, memberikan s × 1 × s Array 3D, mengatakanQ
.P
setiap elemenQ
, dengan siaran implisit. Ini berarti bahwaP
secara otomatis direplikasi s kali sepanjang dimensi ketiga, danQ
direplikasi s kali di sepanjang kedua, membuat mereka berdua s × s × s , sebelum perkalian elemen-bijaksana yang sebenarnya terjadi.Kode yang dikomentari:
sumber
APL,
3231 karakterArgumen kiri kekuatan untuk menaikkan, argumen kanan matriks. Bit yang paling sulit (paling memakan ruang) adalah membangun matriks identitas untuk kasus di mana eksponen yang diinginkan adalah 0. Perhitungan yang sebenarnya didasarkan pada kenyataan bahwa produk dalam yang digeneralisasi (
.
) dengan+
dan×
sebagai operan secara efektif adalah produk matriks. Ini dikombinasikan dengan⍣
operator daya ("repeat") membentuk daging dari solusi.sumber
(1+≢⍵)↑1
=>1↑⍨1+≢⍵
untuk menyimpan satu byte.Sage, 112 byte
Cobalah online
Penjelasan:
Inner lambda (
lambda A,B:[[sum(map(mul,zip(a,b)))for b in zip(*B)]for a in A]
) adalah implementasi langsung dari perkalian matriks. Outer lambda (lambda A,n:reduce(...,[A]*n,identity_matrix(len(A)))
) digunakanreduce
untuk menghitung kekuatan matriks dengan perkalian matriks berulang (menggunakan fungsi perkalian matriks buatan sendiri yang disebutkan di atas), dengan matriks identitas sebagai nilai awal untuk mendukungn=0
.sumber
Julia,
908668 byteIni adalah fungsi rekursif yang menerima matriks (
Array{Int,2}
) dan integer dan mengembalikan matriks.Tidak Disatukan:
Cobalah online! (termasuk semua kecuali test case terakhir, yang terlalu lambat untuk situs)
Disimpan 18 byte berkat Dennis!
sumber
Python 2.7,
158145 byteJawaban terburuk di sini, tapi golf terbaik saya di Python. Setidaknya itu menyenangkan belajar bagaimana melakukan perkalian matriks.
Golf:
Penjelasan:
sumber
JavaScript (ES6), 123 byte
Saya menggunakan versi 132 byte
reduce
tetapi sayaa
sering memetakannya sehingga ternyata 9 byte lebih pendek untuk menulis fungsi pembantu untuk melakukannya untuk saya. Bekerja dengan menciptakan matriks identitas dan mengalikannya dengana
tulisan tangann
kali. Ada sejumlah ekspresi yang mengembalikan0
atau1
untuki == j
tetapi mereka semua tampak sepanjang 7 byte.sumber
Python 3 , 147 byte
Cobalah online!
sumber
R, 49 byte
Fungsi rekursif yang membutuhkan
m
atrix dan kekuatann
untuk menaikkannya. Panggilan secara rekursif%*%
, yang menghitung titik-produk. Nilai awal untuk rekursi adalah matriks identitas dengan ukuran yang sama denganm
. Karenam %*% m = m %*% m %*% I
, ini berfungsi dengan baik.sumber
Python 2 , 131 byte
Cobalah online!
sumber