Arka fon
Alice ve Bob, her PPCG yarışmasını kazanmak için bir golf dili yaratıyor. Alice,> <> gibi iki boyutlu bir dil yapmak istiyor, ancak Bob, J'deki gibi bir önek eki sözdizimini tercih ediyor. Ayrıştırıcı yazmak bir acıdır ve sizin yardımınıza ihtiyaçları var!
Sözdizimi özellikleri
Alice ve Bob'un dilinde, küçük ASCII harfleriyle temsil edilen değişkenlera-z
ve büyük ASCII harfleriyle temsil edilen işlevler vardır A-Z
. Bir fonksiyon bir veya iki argümanla çağrılabilir. Bir program , harflerin a-zA-Z
ve boşlukların dikdörtgen bir ızgarasıdır ve sol üst köşede boşluk bulunmamalıdır. Bu geçerli bir program örneği:
F Gy
H
R x
Program ayrıştırıldığında, tek harfli değişkenler ve işlev çağrıları <func>(<arg>)
ya da biçimindeki bir C tarzı dilin (C, Java, Python ...) ifadesine dönüştürülür <func>(<arg1>,<arg2>)
. Örneğin, yukarıdaki program bu ifadeyle sonuçlanır:
F(H(R(x)),G(x,y))
Ayrıştırma işleminin detayları aşağıdaki gibidir:
- Boşluklar yalnızca doldurucudur, bu nedenle ayrıştırılmazlar.
- Her değişken
a-z
her zaman kendisi gibi ayrıştırılır. - Her işlev
A-Z
bir işlev çağrısı olarak ayrıştırılır. Argümanları, bu düzende altındaki ve kılavuzdaki en yakın ifadelerdir. Bunlardan sadece biri mevcutsa, tek argüman olarak verilir. Tüm fonksiyonların ızgarada en az bir argüman olduğunu varsayabilirsiniz.
Yukarıdaki örnekte değişkenler x
ve y
kendileri ayrıştırılır. İşlevin R
altında ve x
sağında hiçbir şey yoktur , bu nedenle tek argüman çağrısı olarak ayrıştırılır R(x)
. Benzer şekilde, altında olduğundan beri H
ayrıştırılır . İşlev , altında ve sağında bulunur, bu nedenle olarak ve benzer şekilde ayrıştırılır . Sol üst köşede ayrıştırılan ifade, ayrıştırma işleminin sonucudur.H(R(x))
R
G
x
y
G(x,y)
F
Giriş ve çıkış
Girişiniz boş olmayan dikdörtgen bir karakter dizisidir. Her zaman Alice ve Bob'un dilinde geçerli bir program olacak, ancak çıktıda kullanılmayan ifadeler içerebilir. Çıktınız yukarıdaki işlemden kaynaklanan ayrıştırılmış ifade olacaktır.
Kurallar ve puanlama
Bir fonksiyonun tam bir programını yazabilirsiniz. En düşük bayt sayısı kazanır ve standart boşluklar izin verilmez.
Test durumları
Bunlar , vakalar arasında grid <newline> expression
kısa çizgi bulunan biçimde verilir ---
. SE formatı bazı satırları boş bırakır, ancak boşluklarla doldurulmaları gerekir.
x
x
---
x y
z
x
---
Fx
F(x)
---
Fx
y
F(y,x)
---
ABu
A(B(u))
---
G
H
k
G(H(k))
---
ABCA
x xs
DFk
A(x,B(D(F(k)),C(x,A(s))))
---
A B
C D x
A(C(D(x)),B(D(x)))
---
RT Hq
I xR k
R(I(x),T(H(R(k),q)))
---
A A A a
S A b
B C Dx
d X u f
A(B(d,C(D(f,x))),A(X(u),A(u,a)))
(A (B (D x)) (C (D x)))
uygun olur mu veya format sabit mi?