Fondo
Alice y Bob están creando un lenguaje de golf para ganar cada desafío PPCG. Alice quiere hacer un lenguaje bidimensional, como> <>, pero Bob prefiere una sintaxis de prefijo-infijo como en J. Como compromiso, deciden crear un lenguaje de prefijo-infijo bidimensional. Es difícil escribir el analizador y necesitan tu ayuda.
Especificación de sintaxis
En el lenguaje de Alice y Bob, hay variables , que están representadas por letras minúsculas ASCII a-z
, y funciones , que están representadas por letras mayúsculas ASCII A-Z
. Se puede invocar una función con uno o dos argumentos. Un programa es una cuadrícula rectangular de letras a-zA-Z
y espacios, y la esquina superior izquierda no debe contener un espacio. Este es un ejemplo de un programa válido:
F Gy
H
R x
Cuando se analiza el programa, se transforma en una expresión de un lenguaje de estilo C (C, Java, Python ...) que contiene variables de una sola letra y llamadas a funciones en el formato <func>(<arg>)
o <func>(<arg1>,<arg2>)
. Por ejemplo, el programa anterior da como resultado esta expresión:
F(H(R(x)),G(x,y))
Los detalles del proceso de análisis son los siguientes:
- Los espacios son solo de relleno, por lo que no se analizan.
- Cada variable
a-z
siempre se analiza como sí misma. - Cada función
A-Z
se analiza como una llamada a función. Sus argumentos son las expresiones más cercanas debajo y a su derecha en la cuadrícula, en este orden. Si solo uno de estos está presente, se da como único argumento. Puede suponer que todas las funciones tienen al menos un argumento en la cuadrícula.
En el ejemplo anterior, las variables x
y y
se analizan como ellas mismas. La función R
no tiene nada debajo y x
a su derecha, por lo que se analiza como la invocación de un argumento R(x)
. Del mismo modo, H
se analiza como H(R(x))
, ya que tiene R
debajo de él. La función G
tiene x
por debajo de ella y y
a su derecha, por lo que se analiza como G(x,y)
, y lo mismo para F
. La expresión analizada en la esquina superior izquierda es el resultado del proceso de análisis.
Entrada y salida
Su entrada es una matriz rectangular de caracteres no vacía. Siempre será un programa válido en el lenguaje de Alice y Bob, pero puede contener expresiones que no se utilizan en la salida. Su salida será la expresión analizada resultante del proceso anterior.
Reglas y puntaje
Puede escribir un programa completo de una función. El conteo de bytes más bajo gana, y las lagunas estándar no se permiten.
Casos de prueba
Estos se dan en el formato grid <newline> expression
, con guiones ---
entre los casos. El formato SE deja algunas líneas en blanco, pero deben rellenarse con espacios.
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)))
sería adecuada o el formato es fijo?