pengantar
Tantangan ini terinspirasi oleh Grime , bahasa pencocokan pola 2D saya. Pada dasarnya, Anda diberi "tata bahasa" yang menggambarkan kisi-kisi karakter dua dimensi, dan tugas Anda adalah membuat kisi sesuai dengan tata bahasa. Selain itu, grid harus sekecil mungkin dalam arti lemah tertentu.
Memasukkan
Input Anda adalah string yang berisi karakter ASCII huruf kecil dan simbol |
dan -
. Untuk kesederhanaan, input tidak mengandung karakter huruf kecil berulang. String adalah spesifikasi untuk kelas kotak karakter persegi panjang, dan diurai dari kiri ke kanan menggunakan tumpukan sebagai berikut.
- Diberikan karakter huruf kecil
c
, dorong ke tumpukanm×n
kisi karakterc
, untuk apa sajam, n ≥ 1
. - Diberikan pipa
|
, pop dua gridA
danB
dari tumpukan (B
ada di atas), dan dorong gridAB
diperoleh dengan menyatukanB
ke kananA
. Ini mengharuskan ituA
danB
memiliki ketinggian yang sama. - Diberi tanda hubung
-
, letakan dua kisiA
danB
dari tumpukan (B
ada di atas), dan dorong kisi yangA/B
diperoleh dengan menyatukanB
ke bagian bawahA
. Ini membutuhkan ituA
danB
memiliki lebar yang sama.
Dijamin bahwa untuk beberapa pilihan m
dan n
dibuat selama proses parsing (yang mungkin berbeda untuk setiap huruf), spesifikasi input dengan benar menggambarkan beberapa persegi panjang, yang tersisa di tumpukan di bagian akhir.
Keluaran
Output Anda adalah kotak karakter persegi panjang yang ditentukan oleh input. Kisi harus minimal dalam arti bahwa menghapus baris atau kolom apa pun akan membuatnya tidak valid. Anda dapat mengembalikan string yang dipisahkan baris baru (dengan atau tanpa baris baru), array karakter 2D, atau array string, yang mana adalah format yang paling nyaman.
Perhatikan bahwa Anda tidak perlu memproses input persis seperti yang dijelaskan di atas; satu-satunya hal yang penting adalah bahwa output Anda sudah benar.
Contoh
Pertimbangkan spesifikasinya
par-s||e-
Pertama, kami memilih untuk mendorong 1×2
persegi panjang p
, dan 1×1
persegi panjang a
dan r
(alasan untuk ini akan jelas nanti). Kemudian, kita meletupkan a
dan r
persegi panjang, dan mendorong concatenation vertikal mereka
a
r
Selanjutnya, kami mendorong 1×2
persegi panjang s
, pop itu dan persegi panjang di atas, dan mendorong concatenation horizontal mereka
as
rs
Lalu kita letakan kotak itu dan p
kotak itu, dan dorong pasangan mereka
pas
prs
Akhirnya, kita dorong 3×1
kotak e
, pop, dan kotak di atas, dan dorong concatenation vertikal
pas
prs
eee
Ini adalah output dari program, atau paling tidak salah satu kemungkinan. Perhatikan itu meskipun
ppas
ppas
pprs
eeee
juga dihasilkan oleh spesifikasi, ini bukan output yang valid, karena banyak baris dan kolom dapat dihapus.
Sebagai contoh yang lebih halus, pertimbangkan
co|m|p|il|e|r|-
Spesifikasi ini menghasilkan persegi panjang
comp
iler
yang merupakan output yang valid. Namun, itu juga menghasilkan
commp
iiler
yang juga valid, karena tidak ada baris atau kolom tunggal yang dapat dihapus tanpa membatalkannya.
Aturan
Anda dapat memberikan program atau fungsi lengkap. Hitungan byte terendah menang, dan celah standar tidak diizinkan.
Kasus Uji Ekstra
Anda dapat menggunakan ini untuk menguji program Anda.
Input:
a
Output:
a
Input:
co|mp|l|-ex|i|f|-y|
Example output:
cccoy
mplly
exify
Input:
ja-r|g-o|ni-|ze|d-|
Example output:
jronze
arondd
ggoidd
Input:
un|co|p-yr|i|gh-t-ab|-|le-||-
Example output:
unnnnnnn
coyriggl
ppyrihhe
ppyritte
ppyriabe
n
dan m
dipilih secara non-deterministik. Dijamin bahwa nilai-nilai yang cocok untuk mereka ada, tetapi itu adalah tugas program Anda untuk menemukannya.
un|co|p-|yr|i|gh--t-ab|-|le-||-
tidak mungkin valid. Yang terakhir -
memiliki arity 2, sementara hanya ada 1 elemen di stack.