Ini adalah versi 2 dimensi dari pertanyaan ini .
Diberikan array / matriks 2 dimensi yang tidak kosong yang hanya mengandung bilangan bulat non-negatif:
Keluarkan array dengan nol di sekitarnya dihapus, yaitu subarray berdekatan yang terbesar tanpa nol sekitarnya:
Contoh:
Input:
[[0, 0, 0, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1], [0, 0, 1, 1, 1], [0, 0, 0, 0, 0]]
Output:
[[0, 1, 0], [0, 0, 1], [1, 1, 1]]
Input:
[[0, 0, 0, 0], [0, 0, 0, 3], [0, 0, 0, 0], [0, 5, 0, 0], [0, 0, 0, 0]]
Output:
[[0, 0, 3], [0, 0, 0], [5, 0, 0]]
Input:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Output:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Input:
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
Output:
[]
Input:
[[0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 0]]
Output:
[[1, 1, 1, 1]]
Input:
[[0, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0]]
Output:
[[1], [1], [1]]
Input:
[[1, 1, 1, 1], [1, 2, 3, 1], [1, 1, 1, 1]]
Output:
[[1, 1, 1, 1], [1, 2, 3, 1], [1, 1, 1, 1]]
code-golf
array-manipulation
alephalpha
sumber
sumber
:)
Sulit membuatnya pendek.[[0, 0, 0, 0], [0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 0]]
(hasilnya memiliki lebar / tinggi1
)Jawaban:
MATL , 3 byte
Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
sumber
(implicit)
.Bahasa Wolfram (Mathematica) , 42 byte
Cobalah online!
Automata seluler memang jawaban untuk kehidupan , alam semesta , dan segalanya . 1
Bagaimana?
CellularAutomaton
menerima array input dan nilai latar belakang opsional. Dengan demikian,{#,0}
menetapkan bahwa aturan otomat seluler harus diterapkan pada input, dengan asumsi latar belakang0
s.Suatu hal yang rapi di sini adalah bahwa
CellularAutomaton
tanaman output sehingga tidak ada batas sel latar hadir (karena jika tidak output terletak pada bidang yang tak terbatas).Kode menerapkan aturan
{Null, {}, {0, 0}}
- menerapkan kepalaNull
ke 0-radius tetangga setiap sel (yaitu hanya pusat: sel itu sendiri) - tepat0
waktu. Hasil dari ini adalah input asli, tetapi dengan latar belakang dihapus (yaitu memotong sekitar0
s).1. Lihat bytecount jawaban saya? ;)
sumber
JavaScript (ES6), 98 byte
Cobalah online!
Bagaimana?
Untuk mengatasi kekurangan built-in zip , kami mendefinisikan fungsi g () yang dapat beroperasi pada baris atau kolom dari matriks input a [] , tergantung pada nilai flag global z .
g () mencari indeks minimum m dan indeks maksimum M dari baris yang tidak kosong (jika z tidak ditentukan) atau kolom tidak kosong (jika z ditentukan) dan mengembalikan potongan yang sesuaibaik dari matriks itu sendiri atau baris yang diberikan dari matriks.
Untuk meringkas:
.map(z=g)
Berkomentar
sumber
Haskell ,
6261 byteCobalah online!
foldr(zipWith(:))e
dengane=[]:e
adalah sedikit lebih pendektranspose
, dansnd.span(all(<1))
tetes daftar terkemuka nol dari daftar list. Sepertitranspose
diikuti olehreverse
pada daftar 2D sama dengan rotasi oleh 90 °, kodef.f.f.f
hanya empat kali menjatuhkan daftar nol terkemuka dan memutar .sumber
Pyth , 13 byte
Cobalah online!
sumber
=_CQ
akan bekerja di tempat=Q_CQ
.Jelly , 10 byte
Cobalah online!
sumber
Brachylog ,
24222019 byteCobalah online!
Output matriks hasil sebagai array array, atau false untuk output kosong.
(Terima kasih kepada @Fatalize untuk menyarankan predikat sebaris dan menghemat 1 byte.)
Penjelasan
Predikat 0 (Utama):
Predikat 1:
sumber
{s.h+>0∧.t+>0∧}\↰₁\
. (Ini berlaku untuk hampir semua jawaban Brachylog, predikat pada baris baru benar-benar hanya diterapkan jika Anda ingin menulis hal-hal yang lebih mudah dibaca).R ,
96 10097 byteCobalah online!
The
~
helper mengambil vektor non-negatif dan kembali vektor denganFALSE
untuk "eksterior"0
s vektor danTRUE
untuk positif dan setiap "interior"0
s. Fungsi ini diterapkan pada jumlah baris dan kolom dari matriks input.~
dan!
gunakan perawatan parser R untuk operator.Diperbaiki sesuai komentar @ DigEmAll, tetapi dengan beberapa byte di-golf-kan kembali dari @ Joe
sumber
drop=F
seperti yang saya lakukan, jika tidak 2 tes ini akan mengembalikan vektor daripada baris dan kolom: Coba online!drop=F
. Masih di bawah satu ton!R ,
8979 byteCobalah online!
Terima kasih kepada @ngm untuk kode kasus pengujian, dan @ J.Apakah Anda telah menghemat 10 byte!
drop=F
parameter karena perilaku R default mengubah baris / col matriks tunggal menjadi vektor ...sumber
range
dan mengubah indeksasiAPL (Dyalog Classic) ,
1715 byteCobalah online!
sumber
Python 2 , 71 byte
Kembali dengan memodifikasi input. Daftar harus diberikan sebagai input.
Cobalah online!
Python 2 , 77 byte
Ini juga memodifikasi input, tetapi berfungsi ....
Cobalah online!
sumber
Bahasa Wolfram (Mathematica) , 66 byte
Cobalah online!
Sekarang bekerja dengan mengisi array dengan nol (terima kasih @JungHwanMin)!
Terima kasih kedua kepada @JungHwanMin karena telah menghemat 4 byte
sumber
Jelly , 12 byte
Cobalah online!
Sebagai fungsi.
sumber
Bahasa Wolfram (Mathematica) , 48 byte
Cobalah online!
Melakukannya dengan cara biasa.
sumber
\[Transpose]
tidak bisa bekerja di sini.Sekam , 11 byte
Cobalah online!
Saya merasa beberapa byte dapat dicukur dengan memperpendek
!5¡
bagiannya.Bagaimana itu bekerja
Petakan versi input saat ini dan: balikkan masing-masing, setelah menjatuhkan awalan terpanjang yang hanya terdiri dari nol (menjatuhkan awalan ini dilakukan dengan menggunakan Husk
↓
, yang merupakan fungsi yang memangkas jangka panjang elemen berurutan sejak awal daftar yang menghasilkan hasil yang benar ketika dijalankan melalui suatu fungsi, yaitu¬
, tidak logis).Transpose, ganti entri yang hilang dengan 0 .
sumber
Retina , 87 byte
Cobalah online! Penjelasan:
Hingga setidaknya satu baris tidak dimulai dengan nol ...
... hapus nol di depan dari setiap baris.
Hingga setidaknya satu baris tidak berakhir dengan nol ...
... hapus nol tambahan dari setiap baris.
Hapus baris nol di depan.
Hapus baris nol yang tertinggal, atau nol yang tersisa terakhir.
sumber
Arang , 48 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Termasuk 15 byte untuk pemformatan. Penjelasan:
Ulangi 4 kali.
Ulangi sementara array tidak kosong tetapi baris terakhirnya berjumlah nol ...
Hapus baris terakhir dari array dan cetak baris dari panjang jumlahnya, yaitu tidak ada.
Jika array tidak kosong maka posisikan.
Format array dengan baik untuk tampilan. (Output standar akan menjadi
Iθ
gantinya.)sumber
JavaScript,
144140129127 byte140 -> 129 byte, terima kasih @Arnauld
Algoritma
sumber
some/some
alih-alihfindIndex/find
dan mengatur ulang deklarasi fungsi helper untuk menghilangkan tanda kurung di sekitar argumen fungsi utama (sekarang tunggal).[[]]
sehingga t dijamin untuk dapat beroperasi padaw[0]
.Python 2 ,
118116 byteCobalah online!
Disimpan:
sumber
s=sum
definisi lambdaPHP (> = 5.4),
200194186184 byte(-6 byte dengan mengembalikan
null
bukan array kosong)(-8 byte terima kasih kepada Titus )
(-2 byte dengan menelepon dengan referensi terima kasih kepada Titus )
Cobalah online!
Bagaimana?
Menemukan indeks min dan maks untuk baris (
$m
&$M
) dan kolom ($n
&$N
) dan menggantikan input dengan sub array dari$m,$n
ke$M,$N
(ini adalah panggilan dengan referensi).sumber
if($C){$m>$r&&$m=$r;$M>$r||$M=$r;$n>$c&&$n=$c;$N>$c||$N=$c;}
while($m<=$M)$o[]=array_slice($a[$m++],$n,$N-$n+1);
&&
dan||
dan saya yakin saya akan dapat menggunakan trik itu di tempat lain juga.$a=
alih-alihreturn
.Oktaf,
4849 byteCobalah online!
Temukan poin bukan nol dan atur ulang dalam matriks jarang baru.
sumber
K (ngn / k) , 22 byte
Cobalah online!
sumber
J , 24 byte
Cobalah online!
Penjelasan
sumber
Ruby ,
7363 byteCobalah online!
Edit: disederhanakan, juga versi sebelumnya jatuh untuk semua
0
sBagaimana itu bekerja:
0
ssumber
&.sum<0
bukan&.sum<1
.Oktaf ,
7874 byteCobalah online!
Penjelasan
Ini memutar matriks dengan
90
derajat (x=rot90(x)
) beberapa kali (for k=1:... end
). Jumlah rotasi adalah kelipatan4
, sehingga matriks akhir memiliki orientasi asli. Secara khusus, jumlah rotasi adalah4
kali jumlah nol dalam matriks (nnz(~x)*4
).Untuk setiap rotasi, jika ada satu atau lebih kolom di sebelah kiri yang hanya terdiri dari nol mereka dihapus (
x=x(:,~~cumsum(any(x,1)))
).Apa yang tersisa dari matriks setelah proses ini adalah keluaran oleh fungsi (
function x=f(x)
).sumber
Stax , 14 byte
Jalankan dan debug itu
Alternatif, juga 14 byte
Jalankan dan debug itu
sumber
PHP, 188 byte
panggilan dengan referensi.
kerusakan
sumber
Bersih , 73 byte
Cobalah online!
Sangat mirip dengan jawaban Laikoni's Haskell .
sumber
Python 2 , 86 byte
Cobalah online!
Mengambil daftar daftar, mengembalikan daftar tupel.
Penjelasan
Menyalahgunakan daftar pemahaman. Ini adalah kode yang diperluas yang setara:
sumber
Japt
-h
,23, 11 byteCobalah
Penjelasan
sumber