Tulis sebuah program atau fungsi di mana matriks A (nilai maksimum dimensi matriks adalah 100) ditransformasikan ke matriks baru B. Setiap elemen dari matriks B baru adalah jumlah tetangga positif dari elemen yang sesuai dari matriks A .
Hanya tetangga di empat arah orthogonal yang dipertimbangkan, dan ujung-ujungnya tidak membungkus.
Contoh input:
1 2 3
4 -1 -2
-3 -4 10
1 2 10
Keluaran:
6 4 2
1 6 13
5 12 10
2 11 12
Aturan:
- Sebagai input gunakan bilangan bulat.
- Ini adalah kode-golf , jadi kode terpendek dalam byte menang.
Jawaban:
MATL , 9 byte
Cobalah online!
Penjelasan
Matriks input di-multplied oleh mask yang sesuai untuk membuat nilai negatif sama dengan 0. Kemudian konvolusi 2D diterapkan untuk menghitung jumlah tetangga dari setiap entri.
sumber
Oktaf,
464440 byteDisimpan 2 byte berkat @flawr@ LuisMendo kernel 4 byte lebih pendek dari @ flawr.
Sama seperti jawaban @ LuisMendo ! Hanya kurang ... golf.
Anda bisa melihatnya di sini ideone .
sumber
(x='aba')~=x'
bukan[0 1 0;1 0 1;0 1 0]
.*
adalah perkalian matriks elemen-bijaksana. Matriks boolean adalah, MATLAB menjadi sebagian besar tanpa jenis, diperlakukan sebagai numerik. JadiM>0
hanya bertindak sebagai topeng.(x='aba')~=x'
. @Luis sangat luar biasa!JavaScript (ES6),
9994 byteMenerima dan mengembalikan array dua dimensi.
Sunting: Sepenuhnya ditulis ulang ketika saya menemukan bahwa argumen default berfungsi ketika Anda memberikan nilai yang tidak ditentukan secara eksplisit, seperti ketika Anda mengindeks akhir array.
sumber
JavaScript (ES6),
9593 bytesumber
Python dengan SciPy, 127 byte
Ini menghitung hasilnya menggunakan metode Luis Mendo .
Cobalah online
sumber
Mathcad, byte
Menggunakan konvolusi 2D standar dari array yang difilter dengan kernel 3x3. Varian dengan jumlah elemen negatif dan kernel diagonal juga ditambahkan sebagai bagian kompensasi untuk program yang tidak sedang berjalan untuk sedikitnya byte.
Tidak ada jumlah byte yang dimasukkan karena skor Mathcad belum ditentukan. Namun, menggunakan kesetaraan keyboard, itu adalah wilayah 28 byte dengan asumsi bahwa input matriks tidak dihitung terhadap total.
Perhatikan bahwa apa yang Anda lihat pada gambar di atas adalah bagaimana solusi dimasukkan dan ditampilkan dalam Mathcad.
sumber
Jelly,
232018 byteCobalah online!
Algoritma
Katakanlah hanya ada satu baris: [1,2,3,4].
Katakanlah A adalah hasil dari penjumlahan nol, yaitu [0,1,2,3,4].
B adalah hasil dari penghapusan item pertama, yaitu [2,3,4].
Maka hasil akhirnya hanyalah A + B yang di-vektor-kan, kemudian menghapus item terakhir.
Sekarang, algoritmanya adalah untuk menerapkan ini pada setiap baris dan juga setiap kolom, kemudian menemukan jumlah vektornya.
Ke setiap kolom ?! Saya pikir Jelly tidak mendukung ini ...
Kamu benar. Karena itu, saya memindahkannya, diterapkan pada setiap baris, lalu memindahkannya lagi.
Algoritma untuk menghilangkan angka negatif
Di sini, Anda tinggal menambahkan ke setiap angka absolut mereka. Secara efektif menghilangkan angka negatif sambil menggandakan setiap angka positif. Kemudian, potong setengah seluruh matriks.
sumber
Pyth, 36 byte
Cobalah online!
Terjemahan langsung dari jawaban saya di Jelly .
sumber