introduzione
Forte è un linguaggio esoterico molto peculiare basato sul concetto di modifica dei valori dei numeri. In Forte i numeri non sono costanti ma variabili, è possibile utilizzare l' LET
istruzione per assegnare loro nuovi valori.
Ad esempio, dopo l'esecuzione LET 2=4-1
da ora in poi 2
assume il valore di 3
, il che significa che ogni volta che il valore 2
compare in un'espressione viene invece "sostituito" da 3
. L'espressione (1+1)*2
ora valuterebbe 9
.
Questa istruzione in Forte viene utilizzata sia per la memorizzazione delle informazioni che per il controllo del flusso (le linee sono numerate e modificando il valore dei loro numeri è possibile determinare l'ordine della loro esecuzione). In questa sfida non affronteremo questo secondo aspetto.
La sfida
È necessario scrivere un interprete per un sottoinsieme semplificato delle LET
espressioni di Forte .
Riceverai come input una serie di righe seguendo questa grammatica:
<line>::= <number>=<expression>
<expression>::= <number>|<expression>+<number>
Nota: questa grammatica non è valida in quanto manca di numeri di riga, LET e parentesi (che sono sempre obbligatori)
Cioè, dovrai solo occuparti delle somme di calcolo e dell'assegnazione dei valori ai numeri. Le parentesi non saranno presenti nell'input e ogni espressione dovrà essere valutata da sinistra a destra: attenzione che i risultati parziali sono influenzati dalle ridefinizioni!
I numeri saranno sempre numeri interi non negativi, fino al limite del tipo intero nativo della tua lingua (o 2 ^ 32, a seconda di quale sia il valore più alto).
Per ogni riga dovresti produrre il risultato dell'espressione e assegnare questo risultato al valore (possibilmente riassegnato) del primo numero, che influenzerà il modo in cui verranno interpretate le seguenti righe.
Questo è code-golf , vince il codice più breve (in byte)!
Altre regole
- Il formato di input è flessibile, ad esempio puoi prendere una singola stringa con newline, un elenco di stringhe, un elenco di elenchi di numeri ... Lo stesso vale per l'output, purché sia chiaro quale sia il risultato di ogni espressione in l'ingresso.
- È possibile inviare una funzione, un programma completo o una soluzione da eseguire in un ambiente REPL chiamandolo una volta per ogni linea.
- Sono vietate le scappatoie standard , in particolare non è possibile chiamare un interprete Forte esterno nel proprio codice.
Esempi
Questi fanno tutti parte dello stesso input. Dopo ogni riga viene mostrato l'output previsto relativo a quella riga, a volte con un commento che indica le riassegnazioni pertinenti (non parte dell'output richiesto).
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
è valido ("I numeri saranno sempre numeri interi non negativi")
0
un numero valido?