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-Ze 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-zviene sempre analizzata come se stessa. - Ogni funzione
A-Zviene 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 xe yvengono analizzate come se stesse. La funzione Rnon ha nulla al di sotto e xalla sua destra, quindi viene analizzata come invocazione con un argomento R(x). Allo stesso modo, Hviene analizzato come H(R(x)), poiché ha al di Rsotto di esso. La funzione Gha xsotto di essa e yalla 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?