(Diilhami secara acak oleh https://codegolf.meta.stackexchange.com/a/17272/42963 )
Diberikan matriks persegi empat digit (yaitu, 0 - 9
), output "potongan-potongan" dari matriks seolah-olah digit tersebut terhubung bersama-sama membentuk satu bagian, dalam urutan naik dengan digit. Potongan-potongan dijamin untuk terhubung hanya ortongonal - tidak ada bagian yang akan terhubung secara diagonal. Hanya akan pernah ada maksimum 10 buah (yaitu, 3
sepotong tidak akan muncul dua kali dalam matriks yang sama).
Misalnya diberi matriks
0 1 1 1
0 0 1 2
3 3 2 2
berikut ini adalah potongan-potongan, dan contoh output:
0
0 0
1 1 1
1
2
2 2
3 3
Spasi penting untuk menjaga bentuk potongan, tetapi potongan tidak perlu jarak interior. Potongan-potongan itu sendiri entah bagaimana harus dibuat berbeda secara konsisten (misalnya, baris baru di antara potongan-potongan, memastikan masing-masing adalah karakter yang berbeda, dll.). Selain itu, spasi putih asing (misalnya, mengikuti baris baru atau kolom utama) tidak diperbolehkan. Misalnya, berikut ini juga akan valid:
0
00
111
1
2
22
33
atau
#
##
###
#
#
##
##
Tapi yang berikut ini tidak akan (perhatikan spasi tambahan di belakang huruf 0
s):
0
0 0
Rotasi atau refleksi juga tidak diperbolehkan. Misalnya, keluaran
1
111
untuk matriks di atas juga tidak valid.
Potongan-potongan matriks mungkin memiliki lubang, atau hanya elemen tunggal:
0 0 0 1
0 2 0 1
0 0 0 3
Atau, potongannya mungkin seluruh matriks:
0 0 0
0 0 0
Ini kasus uji yang lebih besar dan lebih rumit:
1 1 1 1 1 2 2
3 4 4 4 2 2 2
5 5 4 4 2 0 0
5 6 6 6 6 7 7
5 6 8 8 6 6 7
9 6 6 6 7 7 7
Dan contoh output:
00
11111
22
222
2
3
444
44
55
5
5
6666
6 66
666
77
7
777
88
9
Aturan dan I / O
- Input dan output dapat diberikan dengan metode apa pun yang mudah .
- Anda dapat mencetaknya ke STDOUT atau mengembalikannya sebagai hasil fungsi.
- Program lengkap atau fungsi dapat diterima.
- Diperlukan spasi putih untuk menjaga bentuk (misalnya, bentuk "T"
1
pada contoh) diperlukan, spasi putih yang konsisten untuk membuat potongan-potongan menjadi berbeda, dan satu baris baru di belakangnya dibolehkan, tetapi tidak ada spasi lain yang diizinkan. - Anda dapat dengan aman berasumsi bahwa potongan-potongan diberi nomor
0
untukN
contiguously, yang berarti bahwa (misalnya)3
tidak akan melewatkan dalam matriks enam-piece. - Celah standar dilarang.
- Ini adalah kode-golf sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
-1
atau ruang yang mewakili ruang kosong, atau tidak adanya elemen jika memungkinkan)?0
sebagai nilai pengisi? Jadi masing-masing bagian akan menjadi keluaran dengan sisa nilai-nilai dalam matriks diatur ke0
-1
atau beberapa nilai lain alih-alih tidak ada / spasi tidak akan baik-baik saja.' '
) digunakan dalam kasus itu?Jawaban:
05AB1E ,
2019 byte-1 byte terima kasih kepada @ Mr.Xcoder .
Menghasilkan daftar potongan 2D (dengan
1
dan spasi karakter" "
) per baris baru.Cobalah secara online atau verifikasi semua test case atau cukup cetak semua test case .
Penjelasan:
sumber
Haskell,
133132129 byteMengambil matriks sebagai daftar string dan mengembalikan daftar daftar string.
Cobalah online!
sumber
Jelly , 18 byte
Cobalah online!
Mengembalikan daftar keping, yang
1
mewakili bagian dari keping, dan' '
melapisi. Trailing' '
s dihapus.sumber
ẎQ=€
harus dilakukan, meskipun kita membutuhkan potongan dalam urutan menaik, jadi9Ż=€
(kecuali kita tidak boleh memasukkan "potongan tidak ada" dalam hal iniẎQṢ=€
)9Ż=€
tidak akan bekerja (saya pikir "spasi kosong [...] tidak diizinkan" meluas ke array juga, itu sebabnya saya memotong).Python 3 ,
271209206183176172191 byteCobalah online!
Sunting: Beberapa pembersihan dan -5 berkat @ Jonathan Frech .
Sunting:
-3-26 sekali lagi terima kasih kepada @ Jonathan Frech .Sunting: -7 lagi terima kasih kepada @ Jonathan Frech .
Sunting: +19: Seperti yang dicatat oleh @ nimi, keluaran sebelumnya memiliki format yang salah.
Input adalah matriks sebagai daftar daftar:
Output adalah daftar matrik:
Tidak Disatukan:
sumber
Python 2 ,
173172165 byteCobalah online!
-15 byte dari pengamatan oleh nimi .
Dalam bentuk program, masukkan input daftar karakter tunggal; output dengan mencetak potongan-potongan yang ditemukan menggunakan karakter mereka.
sumber
C # (.NET Core) ,
258, 238 byteTanpa LINQ.
EDIT: Perwujudan Ketidaktahuan menunjukkan deklarasi var lebih baik! Ty.
Cobalah online!
sumber
Python 2 , 291 byte
Cobalah online!
Mengharapkan sengatan terbatas-kutipan sebagai input. Persentase semi-menggelikan dari kode ini didedikasikan untuk menangani input non-spasi-terpisah / non-spasi-empuk.
Penjelasan Tidak Diputar Golf:
sumber
Retina , 75 byte
Cobalah online! Penjelasan:
Tambahkan digit ke input. Ini mewakili penghitung lingkaran. Baris baru menyederhanakan penghapusan spasi spasi tambahan.
Menghambat keluaran default dan ulangi tepat 10 kali.
Tingkatkan angka loop.
Keluarkan hasil dari sisa skrip tetapi kemudian pulihkan buffer.
Ganti semua digit yang tidak cocok dengan digit lingkaran dengan spasi. (Karena ini menggunakan lookahead dan tidak ada yang melihat ke depan pada saat ini, ini juga menggantikan digit lingkaran.)
Hapus semua spasi spasi tambahan.
Hapus semua baris kosong.
Ulangi selama tidak ada garis yang dimulai dengan digit ...
... hapus karakter pertama di setiap baris.
Jika ada yang tersisa, tambahkan baris baru untuk memisahkan setiap bentuk dari yang berikutnya. (Ini dilakukan untuk menghindari baris baru yang tersesat karena kehilangan digit.)
sumber
Arang , 43 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Baca input ke dalam array. (Ini bisa dihapus jika saya menggunakan format input yang jelek.)
Ulangi lebih dari 10 digit.
Dapatkan baris yang berisi angka-angka itu.
Periksa apakah digit itu memang ditemukan (untuk mencegah keluaran baris baru palsu).
Matikan padding otomatis.
Lingkari baris yang ditemukan.
Lingkari setiap kolom ...
... jika karakter input saat ini sama dengan digit loop saat ini, maka cetaklah jika tidak, gerakkan kursor ke kanan.
Pindah ke awal baris berikutnya. Menggunakan perintah gerakan seperti ini memungkinkan Charcoal memangkas output di kedua sisi.
Buang dan kosongkan kanvas siap untuk digit berikutnya. Ini memungkinkan angka yang berbeda memiliki jumlah pemotongan yang berbeda.
Saya mencoba pendekatan terprogram tetapi itu berbobot pada 47 byte, meskipun itu juga akan menjadi 43 byte untuk waktu singkat ketika
Equals
vektor:Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Matikan padding otomatis.
Baca input ke dalam array.
Ulangi lebih dari 10 digit.
Bandingkan setiap karakter dengan input dan bangun array boolean, tetapi kemudian filter baris tanpa kecocokan.
Lingkarilah baris dan irisan yang tersisa dari kecocokan paling awal di setiap baris ke kecocokan terbaru pada baris saat ini, kemudian pemetaan boolean array kembali ke digit atau spasi, yang kemudian dicetak secara implisit sebagai array string.
sumber
Bahasa Wolfram 101 byte
Harus ada cara yang jauh lebih efisien untuk mencapai ini.
sumber
Perl 5, 97 byte
TIO
Penjelasan
sumber
APL (Dyalog Unicode) , 38 byte SBCS
Fungsi awalan diam-diam anonim. Mengambil matriks numerik sebagai argumen dan mengembalikan daftar string daftar. Setiap daftar string mewakili bagian dengan spasi-
1
s. Leading dan internal (tetapi tidak trailing) spasi adalah spasi.Cobalah online!
∪∘,
elemen unik dari matriks ravel (diratakan)⊂{
...}¨
untuk masing-masing sebagai⍵
, panggil fungsi berikut dengan seluruh matriks sebagai⍺
:⍺=⍵
menunjukkan di mana nomor itu dalam matriks⊢
hasilkan itu (terpisah2
dari⍺
){
...}⍣2
terapkan fungsi berikut dua kali (⍵
adalah matriks Boolean):∨/
mask untuk baris dengan setidaknya satu1
(lit-row-wise OR-reduction)⍵⌿⍨
gunakan itu untuk menyaring baris⍉
transpos (jadi kami melakukan ini pada kolom juga, lalu transpos kembali)' '@~
ganti dengan spasi pada posisi di mana tidak (yaitu di mana0
)⍕
format sebagai matriks karakter↓
terpecah menjadi daftar string' +$'⎕R''
PCRE mengganti spasi tambahan (jumlah spasi diikuti oleh garis-akhir) dengan nolsumber
Japt , 29 byte
Cobalah online!
Diperbarui untuk mematuhi pemformatan output yang lebih ketat.
Output sebagai daftar potongan dengan masing-masing bagian diwakili oleh daftar garis, menggunakan 2 sebagai karakter pengisi.
Penjelasan:
sumber
false
dari daftar dalam. Di sini pastebin jadi saya bisa lebih baik menjelaskan apa yang seharusnya menjadi output. Merasa bebas untuk meminta OP untuk mengklarifikasi, tetapi sejauh yang saya mengerti dari tantangan, semua spasi putih tertinggal tidak boleh ada di output sama sekali.Python 3 , 133 byte
Cobalah online!
Mengambil string yang dipisahkan baris baru, mengembalikan daftar string yang dipisahkan baris yang baru. Menggunakan
textwrap.dedent
untuk menyingkirkan ruang terdepan.sumber
Jelly , 19 byte
Cobalah online!
Tautan monadik mengambil matriks sebagai input dan mengembalikan daftar satu daftar kasar per potong. Footer menampilkan ini dengan cantik, tapi saya pikir keluaran tanpa itu konsisten dengan aturan pertanyaan.
sumber