sfondo
Alice e Bob stanno creando un linguaggio golfistico per vincere ogni singola sfida PPCG. Alice vuole creare un linguaggio bidimensionale, come> <>, ma Bob preferisce una sintassi con prefisso come in J. Come compromesso, decidono di creare un linguaggio con prefisso bidimensionale. Il parser è un dolore da scrivere e hanno bisogno del tuo aiuto!
Specifica di sintassi
Nel linguaggio di Alice e Bob, ci sono variabili , che sono rappresentate da lettere ASCII minuscole a-z
, e funzioni , che sono rappresentate da lettere ASCII maiuscole A-Z
. Una funzione può essere invocata con uno o due argomenti. Un programma è una griglia rettangolare di lettere a-zA-Z
e spazi e l'angolo in alto a sinistra non deve contenere uno spazio. Questo è un esempio di un programma valido:
F Gy
H
R x
Quando il programma viene analizzato, viene trasformato in un'espressione di un linguaggio in stile C (C, Java, Python ...) contenente variabili a lettera singola e chiamate di funzione nel formato <func>(<arg>)
o <func>(<arg1>,<arg2>)
. Ad esempio, il programma sopra riportato risulta in questa espressione:
F(H(R(x)),G(x,y))
I dettagli del processo di analisi sono i seguenti:
- Gli spazi sono solo riempitivi, quindi non vengono analizzati.
- Ogni variabile
a-z
viene sempre analizzata come se stessa. - Ogni funzione
A-Z
viene analizzata come una chiamata di funzione. I suoi argomenti sono le espressioni più vicine al di sotto di essa e alla sua destra nella griglia, in questo ordine. Se solo uno di questi è presente, viene fornito come unico argomento. Si può presumere che tutte le funzioni abbiano almeno un argomento nella griglia.
Nell'esempio sopra, le variabili x
e y
vengono analizzate come se stesse. La funzione R
non ha nulla al di sotto e x
alla sua destra, quindi viene analizzata come invocazione con un argomento R(x)
. Allo stesso modo, H
viene analizzato come H(R(x))
, poiché ha al di R
sotto di esso. La funzione G
ha x
sotto di essa e y
alla sua destra, quindi è analizzata come G(x,y)
, e allo stesso modo per F
. L'espressione analizzata nell'angolo in alto a sinistra è il risultato del processo di analisi.
Ingresso e uscita
Il tuo input è una matrice rettangolare di caratteri non vuota. Sarà sempre un programma valido nel linguaggio di Alice e Bob, ma può contenere espressioni non utilizzate nell'output. L'output deve essere l'espressione analizzata risultante dal processo precedente.
Regole e punteggio
È possibile scrivere un programma completo di una funzione. Vince il conteggio di byte più basso e non sono consentite scappatoie standard.
Casi test
Questi sono indicati nel formato grid <newline> expression
, con trattini ---
tra i casi. Il formato SE lascia alcune righe vuote, ma dovrebbero essere riempite di spazi.
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)))
sarebbe adatto o il formato è fisso?