Su tarea, si elige aceptarla, es crear un programa que analice y evalúe una cadena (de izquierda a derecha y de longitud arbitraria) de tokens que dan instrucciones, ya sea izquierda o derecha. Aquí están los cuatro tokens posibles y sus significados:
> 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
Sin embargo, hay un inconveniente: las señales de direcciones que su programa debería poder analizar se presentarán de esta forma:
<<->-><<->->>->>->
... en otras palabras, están concatenados, y es tarea de su programa averiguar la precedencia correcta de las direcciones y la cantidad de pasos a seguir (mirando hacia adelante). El orden de precedencia es el siguiente (de mayor a menor precedencia):
->
<-
>
<
Si encuentra <-
que no se han realizado pasos hacia la izquierda desde el inicio o desde el último reinicio, dé un solo paso hacia la izquierda. Se aplica la misma regla ->
, pero luego para ir a la derecha.
Su programa debe comenzar en 0 y su resultado debe ser un entero con signo que represente la posición final final.
Puede esperar que la entrada siempre sea válida ( <--->>--<
por ejemplo , nada parecido ).
Entrada de ejemplo:
><->><-<-><-<>>->
Pasos en este ejemplo:
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
Para aclarar: la salida del programa solo debe ser la posición final final como un entero con signo. La tabla de arriba está ahí para ilustrar los pasos que tomó mi ejemplo. No es necesario generar una tabla, una fila de tablas o incluso las posiciones finales de los pasos. Solo se requiere la posición final final, como un entero con signo.
El código más corto, después de una semana, gana.
<-
es si es seguido inmediatamente por a<
o a->
. No hay forma en este lenguaje de representar la secuencia<-
entonces>
, lo que seríago left the total amount of single steps that you've gone left, plus one, then go right one single step
. ¿Es esto correcto y por diseño?