Sua tarefa - se você optar por aceitá-la - é criar um programa que analise e avalie uma sequência (da esquerda para a direita e de comprimento arbitrário) de tokens que dão instruções - esquerda ou direita. Aqui estão os quatro tokens possíveis e seus 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
Porém, existe um problema - os tokens de instruções que seu programa deve poder analisar serão apresentados desta forma:
<<->-><<->->>->>->
... em outras palavras, eles são concatenados, e é tarefa do seu programa descobrir a precedência correta das direções e a quantidade de etapas a serem seguidas (olhando para o futuro). A ordem de precedência é a seguinte (da maior para a menor precedência):
->
<-
>
<
Se você encontrar <-
quando nenhuma etapa à esquerda foi feita anteriormente desde o início ou desde a última redefinição, dê um único passo à esquerda. A mesma regra se aplica a ->
, mas depois para ir para a direita.
Seu programa deve iniciar em 0 e seu resultado deve ser um número inteiro assinado representando a posição final final.
Você pode esperar que a entrada seja sempre válida (assim, nada como <--->>--<
, por exemplo).
Exemplo de entrada:
><->><-<-><-<>>->
Etapas neste exemplo:
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 esclarecimento: a saída do programa deve ser apenas a posição final final como um número inteiro assinado. A tabela acima está lá apenas para ilustrar as etapas que meu exemplo deu. Não é necessário gerar uma tabela, linha de tabela ou mesmo apenas as posições finais das etapas. Somente a posição final final, como um número inteiro assinado, é necessária.
O código mais curto, depois de uma semana, vence.
<-
é se for imediatamente seguido por a<
ou a->
. Não há como, nessa linguagem, representar a sequência<-
então>
- o que seriago left the total amount of single steps that you've gone left, plus one, then go right one single step
. Isso está correto e por design?