Introducción
Forte es un lenguaje esotérico muy peculiar basado en el concepto de modificar los valores de los números. En Forte, los números no son constantes sino variables, puede usar la LET
instrucción para asignarles nuevos valores.
Por ejemplo, después de ejecutar a LET 2=4-1
partir de ahora 2
asume el valor de 3
, lo que significa que cada vez que el valor 2
aparece en una expresión, en su lugar, se "reemplaza" por 3
. La expresión (1+1)*2
ahora se evaluaría a 9
.
Esta instrucción en Forte se usa tanto para almacenar información como para controlar el flujo (las líneas están numeradas y al cambiar el valor de sus números puede determinar el orden de su ejecución). En este desafío no abordaremos este segundo aspecto.
El reto
Debe escribir un intérprete para un subconjunto simplificado de las LET
expresiones de Forte .
Recibirá como entrada una serie de líneas siguiendo esta gramática:
<line>::= <number>=<expression>
<expression>::= <number>|<expression>+<number>
Nota: esta gramática no es válida Forte porque carece de números de línea, LET y paréntesis (que siempre son obligatorios)
Es decir, solo tendrá que ocuparse de sumar cálculos y asignar valores a los números. Los paréntesis no estarán presentes en la entrada, y cada expresión deberá evaluarse de izquierda a derecha: ¡tenga en cuenta que los resultados parciales se ven afectados por las redefiniciones!
Los números siempre serán enteros no negativos, hasta el límite del tipo de entero nativo de su idioma (o 2 ^ 32, el que sea mayor).
Para cada línea, debe generar el resultado de la expresión y asignar este resultado al valor (posiblemente reasignado) del primer número, lo que afectará la forma en que se interpretarán las siguientes líneas.
Este es el código de golf , ¡el código más corto (en bytes) gana!
Otras reglas
- El formato de entrada es flexible, por ejemplo, puede tomar una sola cadena con nuevas líneas, una lista de cadenas, una lista de listas de números ... Lo mismo ocurre con la salida, siempre que esté claro cuál es el resultado de cada expresión en la entrada
- Puede enviar una función, un programa completo o una solución para que se ejecute en un entorno REPL que lo llame una vez para cada línea.
- Las lagunas estándar están prohibidas, en particular no puede llamar a un intérprete externo de Forte en su código.
Ejemplos
Todos estos son parte de la misma entrada. Después de cada línea, se muestra la salida esperada relativa a esa línea, a veces con un comentario que indica reasignaciones relevantes (que no forman parte de la salida requerida).
5=4
4
6=5
4 # 5 -> 4
7=1+2+5
7
7=5+2+1
4 # Order of operations matters! 5+2 -> 4+2 -> 6 -> 4
18=5+6+7
12
5=3
3 # Remember: 5 -> 4
10=6+4
3 # 6 -> 4 -> 3, 3+3 = 6 -> 3
0
es válido ("Los números siempre serán enteros no negativos")
0
un numero valido?