Anda diberi matriks bilangan bulat n-by-m , dengan n, m> 3 . Tugas Anda adalah menemukan 3-oleh-3 sub-matriks yang memiliki rata-rata terendah, dan menampilkan nilai ini.
Aturan dan klarifikasi:
- Bilangan bulat akan menjadi non-negatif
- Input dan format output opsional
- Keluaran harus akurat hingga minimal 2 desimal (jika bukan bilangan bulat)
- Kiriman harus terdiri dari baris dan kolom berturut-turut
Kasus uji:
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
Minimum mean: 14
100 65 2 93
3 11 31 89
93 15 95 65
77 96 72 34
Minimum mean: 46.111
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
Minimum mean: 1
4 0 0 5 4
4 5 8 4 1
1 4 9 3 1
0 0 1 3 9
0 3 2 4 8
4 9 5 9 6
1 8 7 2 7
2 1 3 7 9
Minimum mean: 2.2222
Ini adalah kode-golf sehingga kode terpendek dalam setiap bahasa menang. Saya mendorong orang untuk mengirim jawaban dalam bahasa yang sudah digunakan, meskipun itu tidak lebih pendek dari yang pertama.
Jawaban:
Oktaf, 30 byte
Cobalah online!
sumber
Jelly ,
119 byteDisimpan 2 byte berkat @ Dennis .
Cobalah online!
Penjelasan
sumber
+3\⁺€F÷9Ṃ
menghemat beberapa byte.+3\
terlebih dahulu dan duplikatnya+3\€
? Tidak menyangka itu akan terjadi\
muncul3
dan+
dan mendorong quicklink+3\
,⁺
muncul quicklink dan mendorong dua salinan, lalu€
muncul salinan paling atas dan mendorong versi pemetaan.Oktaf, 38 byte
sumber
MATL ,
139 bytePort of @ rahnema1 menjawab .
Cobalah online!
Bagaimana itu bekerja
Pertimbangkan input
sebagai contoh.
sumber
Mathematica,
3735 byteTerima kasih @MartinEnder untuk 2 byte!
Penjelasan
sumber
Python 2 ,
93818079 byteCobalah online!
Bagaimana itu bekerja
f adalah fungsi rekursif yang mengambil daftar tupel (atau iterable 2D lainnya yang dapat diindeks yang mewakili matriks M ) dan secara rekursif menghitung minimum rata-rata submatrix 3 × 3 di sudut kiri atas dan f diterapkan secara rekursif ke M tanpa baris pertama dan M tanpa kolom pertama.
f(M)
melakukan hal berikut.Jika M memiliki kurang dari tiga baris,
M[2:]
adalah daftar kosong, yang mengembalikan f .Perhatikan bahwa, sejak n> 3 pada putaran pertama, inisial tidak dapat mengembalikan daftar kosong.
Jika M memiliki tiga baris atau lebih,
M[2:]
tidak kosong dan dengan demikian benar, maka kode di sebelah kananand
dijalankan, mengembalikan minimum dari tiga nilai berikut.M[:3]
menghasilkan tiga baris pertama M ,zip(*...)
mentransposisi baris dan kolom (menghasilkan daftar tupel),sum(...,())
menggabungkan semua tupel (ini bekerja karena+
merupakan penyatuan), dansum(...)/9
menghitung rata-rata dari daftar yang dihasilkan dari sembilan bilangan bulat.secara rekursif berlaku f ke M dengan baris pertama dihapus.
mentransposisi baris dan kolom, menghilangkan baris pertama dari hasil (jadi kolom pertama dari M , dan secara f berlaku untuk hasil.
Perhatikan bahwa lapisan yang sebelumnya dihapus dalam panggilan rekursif akan selalu menjadi baris, jadi menguji apakah M memiliki cukup baris akan selalu mencukupi ..
Akhirnya, orang mungkin berharap bahwa beberapa panggilan rekursif yang kembali
[]
akan menjadi masalah. Namun, dalam Python 2 , setiap kali n adalah angka dan A adalah iterable, perbandingann < A
mengembalikan True , sehingga menghitung minimum satu atau lebih angka dan satu atau lebih iterables akan selalu mengembalikan angka terendah.sumber
J , 21 byte
Cobalah online!
Cara yang tepat untuk beroperasi pada subarrays di J adalah dengan menggunakan ketiga (
_3
) bentuk dipotong;.
di manax (u;._3) y
sarana untuk menerapkan kata kerjau
pada setiap subarray penuh ukuranx
arrayy
. Solusi menggunakan yang hanya membutuhkan 1 byte lebih tetapi akan jauh lebih efisien pada array yang lebih besar.Cobalah online!
Penjelasan
sumber
[]
penampilan mereka cocok, tetapi sebenarnya tidak.[
atau|
:)Jelly , 18 byte
Melewatkan trik, seperti yang digunakan oleh mil dalam jawaban mereka , menggunakan pengurangan kumulatif n-bijaksana penambahan - seluruh baris pertama dapat diganti dengan
+3\
untuk 11.Cobalah online!
Melintasi semua daftar yang bersebelahan, memfilter agar hanya yang panjangnya 3 dan jumlah (vektorisasi) yang kemudian diulang untuk setiap daftar hasil, untuk mendapatkan jumlah semua 3 oleh 3 sub-matriks dan akhirnya meratakannya menjadi satu daftar, mengambil minimum dan membaginya dengan 9 (jumlah elemen yang membuat jumlah minimal ini).
sumber
Pyth, 19 byte
Program yang mengambil input dari daftar daftar dan mencetak hasilnya.
Suite uji
Bagaimana itu bekerja
[Penjelasan datang nanti]
sumber
Python 3 ,
111103 byteCobalah online!
sumber
Python 2, 96 byte
Uji kasus di Repl.it
Fungsi yang tidak disebutkan namanya mengambil daftar daftar,
a
- baris matriks.Fungsi helper
h
ritsleting melalui tiga irisan yang berdekatan, dan memetakan fungsi penjumlahan melintasi transpose,zip(*s)
masing-masing. Ini menghasilkan penjumlahan semua tinggi, tiga irisan kolom tunggal.Fungsi yang tidak disebutkan namanya memanggil fungsi helper, mentranspos dan memanggil fungsi helper lagi pada hasilnya, kemudian menemukan minimum masing-masing dan minimum hasil, yang kemudian dibagi dengan
9.
untuk menghasilkan rata-rata.sumber
JavaScript (ES6),
1079896 byteFungsi yang menghitung jumlah kembar tiga di atas baris dan kemudian memanggil dirinya sendiri untuk melakukan hal yang sama di atas kolom, melacak nilai minimum
M
.JS sedikit verbose untuk hal-hal semacam itu dan tidak memiliki
zip()
metode asli . Butuh cukup banyak waktu untuk menghemat hanya selusin byte melalui pendekatan yang lebih naif. (Namun, metode yang lebih pendek mungkin ada.)Versi non-rekursif, 103 byte
Disimpan 2 byte dengan bantuan Neil
Uji kasus
Tampilkan cuplikan kode
sumber
(a,b=a.map(g=a=>a.slice(2).map((e,i)=>a[i]+a[i+1]+e)))=>eval(`Math.min(${b[0].map((_,i)=>g(b.map(a=>a[i])))})`)/9
m=>m.map((r,y)=>r.map((v,x)=>[..."12345678"].map(i=>v+=(m[y+i/3|0]||[])[x+i%3])&&(M=v<M?v:M)),M=1/0)&&M/9
, meskipun saya pikir upaya pertama saya sebenarnya lebih besar dari itu.m=>m.map((r,y)=>y>1&&r.map((v,x)=>[..."12345678"].map(i=>v+=m[y-i%3][x+i/3|0])&&(M=v<M?v:M)),M=1/0)&&M/9
.m=>m.map((r,y)=>y>1?r.map((v,x)=>[..."12345678"].map(i=>v+=m[y-i%3][x+i/3|0])&&(M=v<M?v:M)):M=1/0)&&M/9
05AB1E ,
2116 byteCobalah online!
Penjelasan
sumber
Haskell , 87 byte
Cobalah online!
sumber