Anda akan diberi matriks persegi bilangan bulat M dan lain bilangan bulat positif n , ketat lebih kecil dari ukuran M . Tugas Anda adalah untuk menghasilkan semua sub-matriks persegi ukuran M n .
Untuk keperluan tantangan ini, sebuah sub-matriks persegi adalah kelompok yang berdekatan baris dan kolom yang terkandung dalam M .
Format Input / Output
Anda bebas memilih format wajar lainnya, ini hanya beberapa contoh.
Memasukkan
- Matriks dalam jenis matriks asli (jika bahasa Anda memilikinya)
- Array 2D (array array 1D, masing-masing sesuai dengan satu baris / satu kolom)
- Array 1D (karena matriks selalu persegi)
- String (Anda memilih spasi, tapi tolong jangan menyalahgunakan ini dengan cara apa pun), dll.
Keluaran
- Matriks matriks.
- Array 4D, di mana setiap elemen (daftar 3D) mewakili sub-matriks pada baris / kolom.
- Array 3D, di mana setiap elemen (daftar 2D) mewakili sub-matriks.
- Representasi string dari sub-matriks yang dihasilkan, dll.
Spesifikasi
- Anda dapat memilih untuk mengambil ukuran dari M sebagai masukan juga. Dijamin minimal 2 .
- Orientasi output sewenang-wenang: Anda dapat memilih untuk mengeluarkan sub-matriks sebagai daftar kolom atau daftar baris, tetapi pilihan Anda harus konsisten.
- Anda dapat bersaing dalam bahasa pemrograman apa pun dan dapat mengambil input dan memberikan output melalui metode standar apa pun , sambil memperhatikan celah ini ini dilarang secara default.
- Ini adalah kode-golf , jadi pengiriman terpendek (dalam byte) untuk setiap bahasa menang.
Contoh
Diberikan n = 3 dan M :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Kemungkinan pendatang 3x3 adalah:
+ ------- + + -------- + 1 2 3 4 1 2 3 4 | 1 2 3 | 4 1 | 2 3 4 | + -------- + + -------- + | 5 6 7 | 8 5 | 6 7 8 | | 5 6 7 | 8 5 | 6 7 8 | | 9 10 11 | 12 9 | 10 11 12 | | 9 10 11 | 12 9 | 10 11 12 | + ------- + + -------- + | 13 14 15 | 16 13 | 14 15 16 | 13 14 15 16 13 14 15 16 + -------- + + -------- +
Jadi hasilnya adalah:
[[[1, 2, 3], [5, 6, 7], [9, 10, 11]], [[2, 3, 4], [6, 7, 8], [10, 11, 12]], [[5, 6, 7], [9, 10, 11], [13, 14, 15]], [[6, 7, 8], [10, 11, 12], [14, 15, 16]]]
Seperti disebutkan di atas, output dari:
[[[1, 5, 9], [2, 6, 10], [3, 7, 11]], [[2, 6, 10], [3, 7, 11], [4, 8, 12]], [[5, 9, 13], [6, 10, 14], [7, 11, 15]], [[6, 10, 14], [7, 11, 15], [8, 12, 16]]]
juga dapat diterima, jika Anda memilih untuk mengembalikan sub-matriks sebagai daftar baris sebagai gantinya.
Uji kasus
Input M, n :
[[1,2,3],[5,6,7],[9,10,11]], 1
[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]], 3
[[100,-3,4,6],[12,11,14,8],[0,0,9,3],[34,289,-18,3]], 2
[[100,-3,4,6],[12,11,14,8],[9,10,11,12],[13,14,15,16]], 3
Dan output yang sesuai (sub-matriks diberikan sebagai daftar baris):
[[[1]],[[2]],[[3]],[[5]],[[6]],[[7]],[[9]],[[10]],[[11]]]
[[[1,2,3],[5,6,7],[9,10,11]],[[2,3,4],[6,7,8],[10,11,12]],[[5,6,7],[9,10,11],[13,14,15]],[[6,7,8],[10,11,12],[14,15,16]]]
[[[100,-3],[12,11]],[[-3,4],[11,14]],[[4,6],[14,8]],[[12,11],[0,0]],[[11,14],[0,9]],[[14,8],[9,3]],[[0,0],[34,289]],[[0,9],[289,-18]],[[9,3],[-18,3]]]
[[[100,-3,4],[12,11,14],[9,10,11]],[[-3,4,6],[11,14,8],[10,11,12]],[[12,11,14],[9,10,11],[13,14,15]],[[11,14,8],[10,11,12],[14,15,16]]]
Atau, sebagai daftar kolom:
[[[1]],[[2]],[[3]],[[5]],[[6]],[[7]],[[9]],[[10]],[[11]]]
[[[1,5,9],[2,6,10],[3,7,11]],[[2,6,10],[3,7,11],[4,8,12]],[[5,9,13],[6,10,14],[7,11,15]],[[6,10,14],[7,11,15],[8,12,16]]]
[[[100,12],[-3,11]],[[-3,11],[4,14]],[[4,14],[6,8]],[[12,0],[11,0]],[[11,0],[14,9]],[[14,9],[8,3]],[[0,34],[0,289]],[[0,289],[9,-18]],[[9,-18],[3,3]]]
[[[100,12,9],[-3,11,10],[4,14,11]],[[-3,11,10],[4,14,11],[6,8,12]],[[12,9,13],[11,10,14],[14,11,15]],[[11,10,14],[14,11,15],[8,12,16]]]]
code-golf
array-manipulation
matrix
Tuan Xcoder
sumber
sumber
Jawaban:
05AB1E , 8 byte
Cobalah online!
Penjelasan
sumber
MATL , 4 byte
Inputnya
n
, laluM
.Outputnya adalah matriks, di mana setiap kolom berisi semua kolom submatrix.
Cobalah online!
Penjelasan
Lebih serius lagi,
t
mengambil input n secara implisit dan menggandakannya di stack.h
menggabungkan kedua salinan n , menghasilkan array [n, n] .YC
mengambil input M secara implisit, mengekstrak semua blok [n, n] -ukurannya, dan mengaturnya sebagai kolom dalam urutan kolom-utama. Ini berarti bahwa kolom dari setiap blok ditumpuk secara vertikal untuk membentuk satu kolom.sumber
APL (Dyalog Unicode) , 26 byte SBCS
Infix lamban anonim mengambil n sebagai argumen kiri dan M sebagai argumen kanan.
Cobalah online!
{
…}
Lambda anonim di mana⍺
argumen kiri dan⍵
argumen kanan:⊢⍵
menghasilkan argumen yang benar (⊢
terpisah⍺ ⍺
dari⍵
)⊢⌺⍺ ⍺
all-⍺
by-⍺
submatrices termasuk yang tumpang tindih tepinya (yang dilapis nol)(
...)↓
letakkan elemen angka berikut di sepanjang dua dimensi pertama:⍺÷2
setengah dari⍺
¯1+
satu negatif ditambah itu⌈
pembulatan2⍴
siklis r eshape ke daftar dua elemens←
simpan dis
(untuk s hards)-
negate (yaitu drop dari belakang)s↓
letakkans
elemen di sepanjang dimensi pertama dan kedua (dari depan)sumber
APL (Dyalog Unicode) , 31 byte
Cobalah online!
Pendekatan yang berbeda dari Adám.
sumber
⍉
untuk kasus-kasus non-sepele, maka Anda telah benar-benar menguasai pemrograman array.R , 75 byte
Cobalah online!
Mengambil
M
,,N
dan ukuranS
dari matriks.Mencetak matriks yang dihasilkan ke stdout;
drop=F
diperlukan agar dalamN=1
hal pengindeksan tidak menjatuhkandim
atribut dan menghasilkan amatrix
daripada avector
.sumber
J ,
118 byte-3 byte berkat mil
Cobalah online!
sumber
<;._3~,~
dan menggunakan hook sebagai gantinya untuk memasangkan ukuran dengan dirinya sendiri, kemudian memotong dan kotak masing-masing karena matriks matriks diizinkan sebagai output.Haskell , 67 byte
Cobalah online!
sumber
Jelly , 5 byte
Menggunakan format output 4D. Untuk 3D, tambahkan
Ẏ
untuk 6 byte .Cobalah online!
Bagaimana itu bekerja
sumber
ṡ€Zṡ€
.Brachylog , 13 byte
Cobalah online!
Ini mengembalikan daftar kolom.
Secara teknis,
tN&s₎\;Ns₎
adalah predikat pembangkit yang menyatukan outputnya dengan salah satu dari submatrices tersebut. Kita gunakan{…}ᶠ
hanya untuk membuka semua kemungkinan.Penjelasan
sumber
Stax , 10 byte
Menjalankannya
Representasi ascii dari program yang sama adalah
Ini berfungsi seperti ini.
sumber
JavaScript (ES6), 91 byte
Mengambil input dalam sintaks currying
(a)(n)
. Mengembalikan hasil sebagai daftar baris.Uji kasus
Tampilkan cuplikan kode
sumber
APL (Dyalog Classic) ,
2423 byteCobalah online!
hasilnya adalah matriks matriks, meskipun format keluaran Dyalog tidak membuatnya begitu jelas
masukan matriks (
⎕
), ubah setiap elemen menjadi matriks bersarangnya sendiri (⍪¨
), ambil gabungan awalan dengan baris (,\
) dan dengan kolom (⍪⍀
), masukan n (⎕
), jatuhkan baris n-1 pertama dan kolom matriks bersarang ()(¯1-t←-2⍴⎕)↓
), ambil sudut kanan bawah demi sudut dari setiap matriks (t∘↑¨
)sumber
Ruby , 63 byte
Cobalah online!
Ini adalah lambda yang mengambil array 2D dan int, mengembalikan array 3D.
Tidak Disatukan:
sumber
Python 2 , 91 byte
Cobalah online!
sumber
def f(a,n):R=range(len(a)+1-n);print[[r[i:i+n]for r in a[j:j+n]]for i in R for j in R]
menghemat lima.