pengantar
Mari kita amati kotak berikut, yang hanya terdiri dari digit 0 - 9
:
1034
4167
8414
3542
Kulit terluar dari bujur sangkar ini adalah:
1034
4 7
8 4
3542
Ini mengandung nol, jadi kita perlu melepas kulit terluarnya, meninggalkan:
16
41
Kulit terluar dari bujur sangkar ini adalah:
16
41
Ini tidak mengandung nol dan karena itu kotak tidak terkontaminasi . Jadi pada dasarnya, definisi dari kotak yang tidak terkontaminasi adalah ketika kulit luar kotak tidak mengandung nol.
Tugas
Diberi kuadrat digit (hanya berisi bilangan bulat non-negatif) dalam format apa pun yang masuk akal, menghasilkan kuadrat terbesar yang tidak terkontaminasi dengan terus-menerus mengelupas kulit luar, dalam format apa pun yang masuk akal.
Uji kasus
Uji kasus 1:
Input Output
1234 1234
2345 2345
3456 3456
4567 4567
Uji kasus 2:
Input Output
123 123
204 204
346 346
Uji kasus 3:
Input Output
101 1
010
101
Uji kasus 4:
Input Output
000 (none)
000
000
Ini adalah kode-golf , jadi pengiriman dengan jumlah byte paling sedikit menang!
416\n841\n354\n
(sudut kiri bawah)?0
atau semacamnya.Jawaban:
Jelly ,
1916 byteCobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
JavaScript,
10597 byteDisimpan 8 byte berkat @ Patrickrick!
Menentukan fungsi
s
, yang mengembalikan array bilangan bulat 2D ketika disediakan bilangan bulat bilangan bulat 2D sebagai input.Bagaimana itu bekerja
fungsi
l
: diberi arraya
, mengembalikan salinan tanpa indeks pertama dan terakhirnya.fungsi
p
: diberikan array 2Da
, panggilanl
untuk menghapus baris pertama dan terakhir, lalu untuk setiap panggilan baris yang tersisal
untuk menghapus tinju dan kolom terakhir. Ini melakukan pengelupasan bawang.function
c
: diberikan array 2Da
, mengembalikan string yang hanya berisi0
s dalam bentuk stringa
.fungsi
s
: diberikan array 2Da
, memanggilc
bentuk array yang diberikan olehp
, dan pada array itu sendiri. Bandingkan string ini secara leksikografis untuk menentukan apakah bentuk yang dikupas memiliki kurang0
dari yang asli. Jika ya, maka dokumen asli terkontaminasi, jadi hubungis
secara rekursif pada formulir yang sudah dikupas. Kalau tidak, kembalikan yang asli.sumber
a.length
dariend
argumenarray.slice
inl
dan menyimpan 8 byte.end
diizinkan menjadi indeks negatif.Retina ,
6057 byteHitungan byte mengasumsikan penyandian ISO 8859-1. Linefeed tambahan sangat penting.
Cobalah online!
Penjelasan
Dikarenakan trafeed linefeed, ini menemukan semua kecocokan regex setelah
`
dan menghapusnya dari input. Karena memimpin+
ini dilakukan berulang-ulang sampai output berhenti berubah (yang akan karena regex akan berhenti mencocokkan).Adapun regex itu sendiri, terdiri dari dua bagian:
Bagian ini memeriksa apakah ada
0
tempat di kulit luar. Hal ini dilakukan dengan memindahkan "kursor" mesin regex ke awal string dengan melihat ke belakang (kita gunakan[^_]
untuk mencocokkan kedua digit dan garis baris):Dan kemudian dari posisi itu kami menggunakan lookahead untuk menemukan
0
apakah di baris pertama, berdekatan dengan linefeed, atau di baris terakhir:Maka kecocokan yang sebenarnya akan terdiri dari baris pertama (termasuk linefeed trailing-nya), baris terakhir (termasuk linefeed-nya yang terkemuka) atau karakter pertama atau terakhir dari sebuah baris, di mana kita menyalahgunakan batas kata
\b
sebagai awal / akhir baris jangkar:sumber
MATL ,
2621 byteInput dalam format berikut
Jadi empat kasus uji lainnya adalah
Kesalahan program dalam kasus uji terakhir, tetapi menghasilkan output yang benar (yang bukan apa-apa). Terima kasih kepada @Dennis karena memperhatikan!
Cobalah online! . Atau verifikasi semua kasus uji (ini termasuk kode pembungkus).
Penjelasan
Ini berulang sebanyak jumlah kolom dalam matriks input, yang lebih dari cukup. Pada setiap iterasi, shell dihapus atau disimpan tergantung pada nilainya.
sumber
Pyth, 19 byte
Suite uji
sumber
JavaScript (ES6), 74 byte
Mengambil input dalam bentuk string dengan baris baru yang memisahkan setiap baris (tetapi tidak ada baris baru yang mengarah atau tertinggal). Penjelasan:
/^.*0|0\n|\n0|0.*$/
adalah regexp yang cocok dengan kotak yang terkontaminasi, sedangkan/^.*\n?|.(.*).|\n.*$/
cocok dengan bagian-bagian dari alun-alun yang perlu dihapus, kecuali(.*)
yang perlu disimpan. (Ini lebih pendek daripada melihat ke depan atau ke belakang untuk karakter baris baru.)sumber
Perl 5, 63 + 3 = 66 byte
Membutuhkan
-0
bendera. Input tidak boleh mengandung karakter baris baru yang tertinggal.sumber
Pyke, 29 byte
Coba di sini!
Juga 29 byte
Coba di sini!
sumber
Pyth ,
3130 byteSuite uji. (Kesalahan testcase terakhir)
Penyempurnaan: menjadikan sebagian ekstraktor luar-loop berfungsi (
L+hbeb
).Versi 31 byte sebelumnya:
Bagaimana itu bekerja:
Kode dasarnya: sementara produk outershell nol, kupas.
Mari kita menganalisis kode utama (Q tersirat di sini):
Mulai dari
Q
(input),while
lambda pertama, lakukan lambda kedua.Bagian pertama adalah lambda di
H
:Bagian kedua adalah lambda di
Z
:Bagian pertama
Mari kita analisis ini:
Karena Pyth menggunakan notasi awalan , ini kemudian akan dievaluasi:
Bagian kedua
sumber
Mathematica, 78 byte
Fungsi anonim, mengambil input sebagai matriks. Abaikan kesalahan yang mungkin terjadi selama eksekusi.
sumber