Il tuo compito - se scegli di accettarlo - è quello di costruire un programma che analizza e valuta una stringa (da sinistra a destra e di lunghezza arbitraria) di token che danno indicazioni - sia a sinistra che a destra. Ecco i quattro possibili token e i loro significati:
> go right one single step
< go left one single step
-> go right the total amount of single steps that you've gone right, plus one,
before you previously encountered this token and reset this counter to zero
<- go left the total amount of single steps that you've gone left, plus one,
before you previously encountered this token and reset this counter to zero
Tuttavia, c'è un problema: i token di direzioni che il tuo programma dovrebbe essere in grado di analizzare saranno presentati in questo modulo:
<<->-><<->->>->>->
... in altre parole, sono concatenati ed è compito del tuo programma capire la precedenza corretta delle direzioni e la quantità di passi da compiere (guardando avanti). L'ordine di precedenza è il seguente (dalla precedenza più alta alla più bassa):
-><-><
Se si verifica <-quando in precedenza non sono stati effettuati passaggi a sinistra dall'avvio o dall'ultimo ripristino, eseguire un singolo passaggio a sinistra. La stessa regola si applica a ->, ma poi per andare a destra.
Il programma dovrebbe iniziare da 0 e il risultato dovrebbe essere un numero intero con segno che rappresenta la posizione finale finale.
Potresti aspettarti che l'input sia sempre valido (quindi, niente di simile <--->>--<, ad esempio).
Esempio di input:
><->><-<-><-<>>->
Passaggi in questo esempio:
step | token | amount | end position
------+-------+--------+--------------
1. | > | +1 | 1
2. | < | -1 | 0
3. | -> | +2 | 2
4. | > | +1 | 3
5. | <- | -2 | 1
6. | < | -1 | 0
7. | -> | +2 | 2
8. | <- | -2 | 0
9. | < | -1 | -1
10. | > | +1 | 0
11. | > | +1 | 1
12. | -> | +3 | 4
Per chiarimenti: l'output del programma dovrebbe essere solo la posizione finale finale come intero con segno. La tabella sopra è proprio lì per illustrare i passi del mio esempio. Non è necessario generare una tabella di questo tipo, una riga di tabella o anche solo le posizioni finali dei passaggi. È richiesta solo la posizione finale finale, come intero con segno.
Il codice più breve, dopo una settimana, vince.
<-è se è immediatamente seguito da a<o a->. In questo linguaggio non c'è modo di rappresentare la sequenza<-allora>- quale sarebbego left the total amount of single steps that you've gone left, plus one, then go right one single step. È corretto e di progettazione?