Diberikan array integer setidaknya dua elemen, output Matrix-Vector (didefinisikan di bawah) dari array.
Untuk menghitung Matriks-Vektor , pertama-tama putar melalui n
array input -ukuran untuk membuat matriks ukuran n x n
, dengan elemen pertama dari array mengikuti diagonal utama. Ini membentuk bagian matriks. Untuk vektor, balik array input secara vertikal. Kemudian lakukan perkalian matriks normal. Vektor keluaran adalah hasilnya.
Sebagai contoh,
a = [1, 2, 3]
Pertama, putar array dua kali ke kanan, untuk mendapatkan [3, 1, 2]
dan [2, 3, 1]
, kemudian susun mereka untuk membentuk 3x3
matriks
[[1, 2, 3]
[3, 1, 2]
[2, 3, 1]]
Selanjutnya, balikkan array secara vertikal untuk membentuk vektor
[[1, 2, 3] [[1]
[3, 1, 2] x [2]
[2, 3, 1]] [3]]
Lakukan perkalian matriks biasa
[[1, 2, 3] [[1] [[1+4+9] [[14]
[3, 1, 2] x [2] = [3+2+6] = [11]
[2, 3, 1]] [3]] [2+6+3]] [11]]
Dan hasilnya adalah [14, 11, 11]
atau [[14], [11], [11]]
(pilihan Anda apakah itu rata atau tidak).
Contoh # 2
a = [2, 5, 8, 3]
[[2, 5, 8, 3] [[2] [[4+25+64+9] [[102]
[3, 2, 5, 8] x [5] = [6+10+40+24] = [80]
[8, 3, 2, 5] [8] [16+15+16+15] [62]
[5, 8, 3, 2]] [3]] [10+40+24+6]] [80]]
[102, 80, 62, 80]
Aturan
- Input dan output dapat dianggap sesuai dengan tipe integer asli bahasa Anda.
- Input dan output dapat diberikan dalam format apa pun yang nyaman .
- Program lengkap atau fungsi dapat diterima. Jika suatu fungsi, Anda dapat mengembalikan output daripada mencetaknya.
- Jika memungkinkan, harap sertakan tautan ke lingkungan pengujian online agar orang lain dapat mencoba kode Anda!
- Celah standar dilarang.
- Ini adalah kode-golf sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
sumber
(v*2)[i+j]
trik yang bagusPyth , 10 byte
Suite uji .
sumber
Jelly , 9 byte
Cobalah online!
Fungsi yang mengembalikan array vertikal. Sebagai sebuah program lengkap, ia tampak seolah-olah mengembalikan array horizontal. Untuk mengembalikan array horizontal, Anda akan melakukannya
LḶN⁸ṙ×⁸S€
.sumber
05AB1E , 11 byte
Cobalah online!
sumber
Haskell , 49 byte
Cobalah online!
Untuk input
v=[1,2]
iterate tail$v++v
menghasilkan daftar[[1,2,1,2],[2,1,2],[1,2],[2],[],...]
fst<$>zip l v
sama dengantake(length v)l
dan hasil[[1,2,1,2],[2,1,2]]
sum.zipWith(*)v
dipetakan pada setiap elemen dan untuk menghasilkan produk baris vektor-matriks.sumber
fst<$>zip l v
sangat suka .R ,
6662 byteCobalah online!
sumber
Map(function(i)c(n[-(1:i)],n[1:i])%*%n,length(n<-scan()):1)
lebih pendek 3 byte; itu hanya mengembalikan daftar matriks.for(i in seq(n<-scan()))F=c(c(n[-(1:i)],n[1:i])%*%n,F);F[1:i]
adalah 61 byte tanpa mengembalikan format output yang aneh.Mathematica, 35 byte
Cobalah online!
-9 byte dari @Tidak pohon
sumber
Most@FoldList[RotateRight,#,1^#].#&
. (Tapi trik yang bagusFold
daripada menggunakanNest
!)CJam , 17 byte
Cobalah online!
sumber
GolfScript , 37 byte
Cobalah online!
sumber
Python 3 + numpy , 68 byte
Cobalah online!
sumber
J , 14 byte
Cobalah online!
Penjelasan
sumber
1&|.
, Anda tidak terikat1
dengan|.
, menciptakan monad? tetapi kemudian Anda menggunakan monad dengan arg kiri dan kanan, dengan monad kiri menentukan berapa kali diterapkan. Apa yang terjadi di sini?&
. Ketika digunakan sebagaiu n&f v
, itu berfungsi(n&f)^:u v
. Lihat bagian bawah ikatan untuk melihat lebih banyak parsingnya.#\.|."{]
, tetapi saya memposting yang terpendek yang saya buat terlebih dahulu sebelum mencoba alternatif.APL, 17 byte
Penjelasan:
sumber
Oktaf , 34 byte
Cobalah online!
sumber
Haskell ,
565552 byteCobalah online!
Disimpan satu byte berkat @Laikoni
Disimpan tiga byte:
l++l
bukannyacycle l
sumber
zipWith(*)l$drop i$cycle l
.Sekam , 11 byte
Cobalah online!
Penjelasan
sumber
Oktaf -
6748 byteTerima kasih kepada Luis Mendo karena mencukur kode ini sebanyak 19 byte!
Catatan: Kode ini hanya dapat berjalan dalam Oktaf. MATLAB tidak mendukung ekspresi di dalam fungsi yang dapat membuat variabel sambil secara bersamaan mengevaluasi ekspresi yang membuatnya.
Kode asli dalam MATLAB dapat ditemukan di sini, tetapi dapat dijalankan dalam versi MATLAB. Kode ini adalah 67 byte:
Penjelasan
a=input('');
- Menerima vektor (baris) dari pengguna melalui input standar. Anda harus memasukkan vektor dalam bentuk Oktaf (mis[1,2,3]
).n=numel(...);
- Memperoleh jumlah total elemen dalam vektor input.x=0:n-1
- Membuat vektor baris yang meningkat dari0
hinggan-1
dalam langkah 1.(x=0:n-1)-x'
- Melakukan penyiaran sehingga kita memilikin x n
matriks sehingga setiap barisi
adalah elemen dari 0 hinggan-1
dengan setiap elemen di barisi
dikurangi olehi
.mod(..., n)+1
- Memastikan bahwa setiap nilai-nilai yang membungkus negatif sekitar untukn
sehingga setiap barisi
berisi vektor dari 0 hinggan-1
sirkuler bergeser ke kiri olehi
unsur-unsur. Kami menambahkan 1 sebagai MATLAB / Oktaf mulai pengindeksan vektor atau matriks dengan 1.a(...)
- Menciptakan an x n
matriks di mana menggunakan (4), kita mengakses indeks yang benar dari vektor input yang ditentukan oleh setiap nilai dari (4) sehingga mencapai matriks yang kita butuhkan.(...)*a'
- Melakukan perkalian vektor matriks dengan transposing / flippinga
menjadi vektor kolom sebelum melakukan perkalian.Contoh Berjalan
Cobalah online!
sumber
bsxfun
. Menentukann
tanpa-1
menyimpan beberapa byte juga. Dan jika Anda membatasi ke Oktaf Anda dapat menetapkana
dan0:n
ke variabel dengan cepat dan menyimpan lebih banyak . Juga, datang ke sini lebih sering !! :-Dinput
fungsi adalah trik yang bagus. Saya tidak berpikir itu bisa mendukung itu. Saya sudah melihatnya hanya dalam C atau C ++ dari pengalaman saya sendiri. Terima kasih!Javascript 79 byte
Mengambil dalam array input dan output array dari matriks matriks
Penjelasan
sumber
Clojure, 80 byte
iterate
menghasilkan urutan yang tak terbatas, tetapi alih-alih menggunakan(take (count %) (iterate ...))
untuk menghentikannya saya menggunakan%
sebagai argumen tambahan untukmap
.sumber
Perl 5 , 65 + 1 (-a) = 66 byte
Cobalah online!
Mengambil vektor input sebagai angka yang dipisahkan spasi. Keluaran baris terpisah angka yang mewakili vektor hasil.
sumber
C (gcc) , 126 byte
Cobalah online!
Array dapat direpresentasikan dalam input sebagai pointer dan panjang.
sumber
Common Lisp, 78 byte
Cobalah online!
Gandakan larik (dalam hal ini daftar Lisp) dan beralih di atas daftar dengan
i
(menggunakanx
, melaluiy
, untuk menghentikan iterasi). Kemudian hitung elemen berikutnya dari hasil dengan menjumlahkan hasil dari mengalikan setiap elemenx
dengan masing-masing elemeni
(sekali lagi berhenti ketika daftar yang lebih pendek diakhiri).sumber