Este desafío se publicó como parte del desafío LotM de abril de 2018
Brain-Flak es un lenguaje turing-tarpit que ha ganado mucha fama aquí en PPCG. La memoria de la lengua está compuesta por dos pilas, sino una "oculta" tercera pila fue descubierto por Wh correo al asistente , lo que lleva a algunas nuevas formas de pensar interesantes programas Cerebro-Flak.
Entonces, ¿qué pasa con dar a esa pobre tercera pila oculta más visibilidad? ¡Creemos un lenguaje donde la tercera pila tenga el reconocimiento que merece! Aquí te presento Third-Flak .
El idioma
En Third-Flak solo hay una pila, llamada la tercera pila. Los operadores trabajan en la tercera pila de la misma manera que lo hacen en Brain-Flak, pero aquí no hay []
, {}
, <>
nilads y sin {...}
mónada (por lo que los personajes sólo es admisible en un programa de otro son Flak ()[]<>
). Esto es lo que hace cada operador (se darán ejemplos que representan la tercera pila con una lista donde el último elemento es la parte superior de la pila):
()
es el único operador de dos caracteres en Third-Flak. Aumenta la parte superior de la tercera pila en 1. Ejemplo:[1,2,3]
→[1,2,4]
(
,[
,<
: Todos los paréntesis de apertura que no están cubiertos por el caso anterior empujan una0
a la tercera pila. Ejemplo:[1,2,3]
→[1,2,3,0]
)
saca dos elementos de la tercera pila y hace retroceder su suma. Ejemplo:[1,2,3]
→[1,5]
]
saca dos elementos de la tercera pila y hace retroceder el resultado de restar el primero del segundo. Ejemplo:[1,2,3]
→[1,-1]
>
saca un elemento de la tercera pila. Ejemplo[1,2,3]
→[1,2]
Y aquí están las otras reglas del lenguaje:
Al comienzo de la ejecución, la tercera pila contiene solo un 0.
Está prohibido tener un programa vacío
[]
o<>
dentro (de todos modos, serían noops si siguieran la semántica de Third-Flak, pero en realidad tienen un significado diferente en Brain-Flak que no es posible recrear aquí).Los paréntesis siempre deben estar equilibrados, excepto por el hecho de que pueden faltar los paréntesis finales al final del programa. Como ejemplo,
[()<(()
es un programa válido de Third-Flak (y la tercera pila al final del programa sería[1,0,1]
).Un programa solo puede contener los seis caracteres permitidos
()[]<>
. Se garantiza que los programas no están vacíos.
Nota: está implícito en las reglas anteriores que no tendrá que lidiar con situaciones en las que necesita estallar desde una pila vacía.
El reto
Simple, escriba un intérprete para Third-Flak. Su programa debe tomar como entrada un programa Third-Flak y devolver como salida el estado de la tercera pila al final del programa.
Su formato de salida es flexible siempre que sea posible leer de manera inequívoca el estado de la tercera pila y el mismo número siempre se codifica de la misma manera (Esta es solo una forma de decir que cualquier formato de salida que no sea una forma evidente intentar hacer trampa está bien).
Su elección de salida puede restringir el rango de números que puede administrar siempre que esto no trivialice el desafío (ya que esto sería una laguna predeterminada ).
Casos de prueba
Para cada caso de prueba, la primera línea es la entrada, y la segunda línea la pila de salida representada como una lista de números separados por espacios donde la parte superior de la pila es el último elemento.
[()<(()
0 1 0 1
[((((()()()()()))
0 0 0 5
((([()][()][()])))
-3
[<<(((()()()())(((((
0 0 0 0 0 4 0 0 0 0 0
[()]<(([()])><[()]
-1 0 -1
(())(()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(()()())(())(()()()()())(())(())(())(())(()()()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(()()())(())(()()()()())(())(())(())(())(())(())(()())(())(())(())(()())(()()()())(())(()()()()())(()())(()())(()())(()()())(())(()())(())(()()()()())(()())(()()()()())(())(())(())(())(())(()())(())(())(())(()()()()())(())(())(()()()()())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(()())(()())(()())(()())(())(()()()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(()()())(())(())(()()())(()())(())(()()()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(())(())(()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(()()())(())(()()())(())(())(())(()())(()()())(()())(())(()()()()())(()())(())(()()())(())(()()()()())(())(())(())(()()())(())(())(())(()())(())(()())(()()()())(())(())(()()()()())(()())(()())(())(()()())(())(())(())(())(()()())(()())(())(())(()()()()())(())(())(()()()()())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(())(()()()()())(()())(())(()()())(())(()()()()())(()()()()())(())(()()())(())(())(()())(())(()()()()())(())(()()()()())(())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(())(()()()()())(()())(())(()()())(())(())(()())(())(()()()()())(()())(()()()()())(())(()()())(())(())(()()()()())(())(()()()()())(())(())(())(()())(())(()()()()())(())(())(()())(())(()())(())(()())(()())(()())(()())(())(()()()()())(()())(())(()()()()())(())(()()())(())(())(()())(())(()()()()())(()())(()()()()())(())(()()())(())(())(())(()())(()()()())(())(())(()())(())(()()()()())(())(())(()()()()())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(()())(()())(())(()()())(())(())(()())(())(()()()()())(()())(()()()()())(()()())(())(())(()())(())(())(()()()()())(()()()())(()())(()())(()()())(())(()())(())(()()()()())(()())(()()()()())(())(())(())(()()()())(()()()())(()()
718 2
e
está aquí .
[()]
rompe la regla de que no debemos preocuparnos por estallar desde una pila vacía