Giriş
Bu meydan okuma, 2B kalıp eşleştirme dilim olan Grime'dan ilham alıyor . Temel olarak, iki boyutlu karakter ızgaralarını tanımlayan bir "dilbilgisi" verilir ve işiniz dilbilgisine göre bir ızgara oluşturmaktır. Ek olarak, ızgara belirli bir zayıf anlamda mümkün olduğunca küçük olmalıdır.
Giriş
Girişiniz küçük ASCII karakterleri ve sembolleri içeren bir dizedir |
ve -
. Kolaylık olması açısından, girdi tekrarlanan küçük harfler içermez. Dize, bir dikdörtgen karakter ızgaraları sınıfı için bir belirtimdir ve aşağıdaki gibi bir yığın kullanılarak soldan sağa ayrıştırılır.
- Küçük bir karakter verildiğinde
c
, yığına herhangi birm×n
karakterin ızgarasını itin .c
m, n ≥ 1
- Bir boru verildiğinde
|
, iki ızgarayıA
veB
yığıntan (B
üstte) pop ve sağaAB
birleştirerek elde edilen ızgarayı itin . Bu gerektirir ve eşit yüksekliğe sahiptir.B
A
A
B
- Bir kısa çizgi verildiğinde
-
, iki ızgarayıA
veB
yığıntan (B
üstte idi) açın ve altınıA/B
birleştirerek elde edilen ızgarayı itin . Bu gerektirir ve eşit genişliğe sahiptir.B
A
A
B
Bunun için bu garanti bazı seçimler m
ve n
(her bir harfi için farklı olabilir) ayrıştırma işlemi sırasında yapılan, giriş özelliği doğru sonunda yığın üzerinde kalan bir dikdörtgen, tarif etmektedir.
Çıktı
Çıktınız, girdi tarafından belirtilen dikdörtgen bir karakter ızgarasıdır. Izgara, herhangi bir satırı veya sütunu kaldırmanın geçersiz kılması anlamında minimum olmalıdır. En uygun biçim hangisi olursa olsun, satırsonu ile ayrılmış bir dize (sondaki satırsonu olsun veya olmasın), 2B bir karakter dizisi veya bir dize dizisi döndürebilirsiniz.
Girişi tam olarak yukarıda açıklandığı gibi işlemeniz gerekmediğini unutmayın; önemli olan tek şey çıktınızın doğru olmasıdır.
Misal
Şartnameyi düşünün
par-s||e-
Önce bir itmek tercih 1×2
ait dikdörtgen p
ve 1×1
bir dikdörtgenler a
ve r
(bu nedeni ilerleyen saatlerde açık olacaktır). Sonra a
ve r
dikdörtgenleri patlatıyoruz ve dikey birleşimlerini itiyoruz
a
r
Ardından, bir 1×2
dikdörtgeni itiyoruz s
, pop ve yukarıdaki dikdörtgeni patlatıyoruz ve yatay birleştirmelerini
as
rs
Sonra o dikdörtgeni ve p
dikdörtgeni patlatıp bir araya getirdik
pas
prs
Son olarak, bir 3×1
dikdörtgeni itiyoruz e
, pop ve yukarıdaki dikdörtgeni açıyoruz ve dikey birleştirme
pas
prs
eee
Bu, programın çıktısıdır veya olasılıklardan en az biridir. Yine de
ppas
ppas
pprs
eeee
aynı zamanda şartname tarafından üretilir, birçok satır ve sütun kaldırılabileceğinden geçerli bir çıktı değildir.
Daha ince bir örnek olarak,
co|m|p|il|e|r|-
Bu özellik dikdörtgeni oluşturur
comp
iler
ki bu geçerli bir çıktıdır. Ancak, aynı zamanda
commp
iiler
bu da geçerlidir, çünkü hiçbir satır veya sütun geçersiz kılmadan kaldırılamaz.
kurallar
Tam bir program veya işlev verebilirsiniz. En düşük bayt sayısı kazanır ve standart boşluklara izin verilmez.
Ekstra Test Durumları
Bunları programınızı test etmek için kullanabilirsiniz.
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
ve m
determinist olarak seçilir. Onlar için uygun değerlerin olması garanti edilir, ancak bunları bulmak programınızın görevidir.
un|co|p-|yr|i|gh--t-ab|-|le-||-
geçerli olmak imkansız. Sonuncusu -
2'lik bir düzene sahipken, yığın üzerinde sadece 1 öğe var.