Untuk setiap baris dan kemudian kolom dari sebuah matriks, kita dapat menambahkan entri tambahan dengan jumlah dari dua entri terakhir di baris atau kolom itu. Misalnya dengan matriks input berikut:
[ 1 1 1 ]
[ 2 3 4 ]
Matriks yang dihasilkan adalah:
[ 1 1 1 2 ]
[ 2 3 4 7 ]
[ 3 4 5 9 ]
Diberikan input integer N dan [X, Y] matriks ukuran setidaknya 2x2, lakukan ekspansi N kali di atas dan hasilkan hasilnya. Matriks yang dihasilkan akan selalu berukuran [X + N, Y + N].
Contoh:
Input: Output:
2, [ 0 0 ] [ 0 0 0 0 ]
[ 0 0 ] [ 0 0 0 0 ]
[ 0 0 0 0 ]
[ 0 0 0 0 ]
3, [ 1 1 1 ] [ 1 1 1 2 3 5 ]
[ 2 3 4 ] [ 2 3 4 7 11 18 ]
[ 3 4 5 9 14 23 ]
[ 5 7 9 16 25 41 ]
[ 8 11 14 25 39 64 ]
2N
kali daripada mengulang kali duaN
kali?2*
(notasi postfix). Mungkin itu harus memiliki built-in satu karakter, ini sering digunakan. Juga2^
(persegi). Tapi saya kehabisan ruang kode :-)J, 19 byte
Ini mendefinisikan kata keterangan, yang mengambil angka di sebelah kiri, dan menghasilkan kata kerja mengambil matriks di sebelah kanannya. Untuk contoh kedua, ini memberi
Penjelasan
sumber
K, 23 byte
Beraksi:
Coba di sini .
sumber
{x
dan yang tertinggaly}
Jelly,
151312 byte-1 byte oleh @Dennis
Seperti jawaban @ LuisMendo, MATL, transpos array sebelum melakukan transformasi sepanjang satu sumbu. Karena itu, kita perlu memanggil fungsi 2 * n kali.
Coba di sini .
sumber
ES6, 134 byte
Penjelasan:
sumber
Haskell, 67 byte
Contoh penggunaan:
Bagaimana itu bekerja:
sumber
sudo apt-get install haskell-platform
dan sedang menjalankanghci
REPL yang memberi sayaPrelude>
prompt. Ketika saya tempelo%m=m++[o(+)(last m)$last$init m]
saya dapatkan<interactive>:2:4: parse error on input '='
. Bisakah Anda memberi saya sedikit primer baik menjalankan ini dari file sumber atau di REPL?o%m=...
baris (dan hanya baris ini) dalam file bernama, katakanlahfib-matrix.hs
. Kemudian Anda dapat menggunakan:l fib-matrix.hs
perintahghci
untuk memuat definisi dan memanggil fungsi utama seperti yang dijelaskan dalam contoh penggunaan saya. - Atau gunakanlet o%m=... in ( (!!). ... ) [[1,1,1]...] 3
.f=
di depan baris kedua :,f=(!!).iterate...
simpan kedua baris dalam file dan muat melaluil: <filename.hs>
. Maka Anda dapat meneleponf [[1,1,1],[2,3,4]] 3
, dll.CJam,
1716 byteFormat input adalah matriks pertama (sebagai array 2D gaya-CJam) dan jumlah iterasi sesudahnya.
Uji di sini.
Penjelasan
Ternyata ini adalah solusi yang sama dengan solusi orang lain:
sumber
Serius, 20 byte
Mengambil input matriks (sebagai daftar 2D), lalu
N
. Menghasilkan daftar 2D.Versi ini tidak bekerja pada penerjemah online untuk beberapa alasan, tetapi bekerja dengan komit pra-tantangan ini .
Versi yang berfungsi online, selama 23 byte:
Mengambil input dalam urutan yang berlawanan (
N
, lalu matriks).Cobalah online!
Saya akan menambahkan penjelasan setelah saya tidur sebentar. Mengatasi bug juru bahasa tidak pernah menyenangkan.
sumber
Pyth,
1312 byteCobalah online. Suite uji.
Menggunakan algoritma yang sama untuk sebagian besar jawaban. Dibawa sebagai input matriks sebagai array 2D pada baris pertama dan
n
di baris kedua.Penjelasan
sumber
Matlab, 60 byte
Saya pertama kali mengacaukan dengan metode pengindeksan mewah Matlab (yaitu,
A(end+1,:)=sum...
) sebelum saya menemukan bahwa dalam kasus yang jarang terjadi ini, penggabungan sederhana sebenarnya lebih murah di Matlab. Sayang sekali saya harus mengubah ini menjadi fungsi yang sebenarnya. Harus bekerja dengan Oktaf juga.Saya kira ini adalah contoh utama bagaimana tidak membuat algoritma. Untuk A = 2x2, n = 1000 algoritma ini sudah membutuhkan 5 detik pada laptop saya, n = 2000 hampir 50 detik! (atau sekitar 30-an jika A adalah
gpuArray
terima kasih kepada Quadro 1000M terpercaya saya)sumber
f([0,1;2,3],1000)
f.m
. 2) Mulaioctave
. 3) Tempelload f.m; f([1,1,1;2,3,4],3)
ke prompt REPL - bekerja untuk saya.Java, 2179 byte
Hanya Berhasil: - Kode ini pada Bahasa Jawa.
sumber
{}
di bagian atas kotak edit - ini akan secara otomatis melakukan awalan ini.Python, 103
105byteFungsi anonim mengambil daftar daftar dan beralih ke fungsi rekursif
f
. Output ditransposisikan dan kemudian diteruskan kef
lagi, kemudian output go kedua ditransposisikan ulang. Output adalah daftar tupelDisimpan dua byte berkat bakuriu
sumber
n>0
bisa sajan
, karena Anda mulai dengan positifn
dan ketika Anda mencapai0
nilainya salah.APL (Dyalog Classic) , 17 byte
Cobalah online!
sumber
Perl 6 ,
87 7371 bytePemakaian:
sumber
perl6
memberi saya beberapa kesalahan . Saya seorang pemula perl - apa yang saya lakukan salah?my &code = ->\c,\m{ … }
untuk memperjelas bahwa->\c,\m{ … }
perlu diganti dengan kode di atas. Saya biasanya menggunakan implisit$_
atau@_
parameter placeholder atau eksplisit$^a
karena mereka cenderung lebih pendek. Aku hanya tidak memikirkannya. Pastikan juga Anda menggunakan versi yang cukup baru ($*PERL.compiler.version !before 2015.12
)m:
dan spasi) Anda juga dapat mengirim pesan camelia langsung