Votre tâche - si vous choisissez de l'accepter - est de créer un programme qui analyse et évalue une chaîne (de gauche à droite et de longueur arbitraire) de jetons qui donnent des directions - à gauche ou à droite. Voici les quatre jetons possibles et leurs significations:
> 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
Il y a cependant un hic - les jetons des directions que votre programme devrait être en mesure d'analyser seront présentés sous cette forme:
<<->-><<->->>->>->
... en d'autres termes, ils sont concaténés, et c'est la tâche de votre programme de déterminer la priorité correcte des directions et la quantité de mesures à prendre (en regardant vers l'avenir). L'ordre de priorité est le suivant (de la priorité la plus élevée à la plus faible):
->
<-
>
<
Si vous rencontrez <-
alors qu'aucune étape vers la gauche n'avait été effectuée depuis le début ou depuis la dernière réinitialisation, faites un pas vers la gauche. La même règle s'applique à ->
, mais ensuite pour aller à droite.
Votre programme doit commencer à 0 et son résultat doit être un entier signé représentant la position finale finale.
Vous pouvez vous attendre à ce que l'entrée soit toujours valide (donc rien de tel <--->>--<
, par exemple).
Exemple d'entrée:
><->><-<-><-<>>->
Étapes dans cet exemple:
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
Pour plus de précision: la sortie du programme ne doit être que la position finale finale sous forme d'entier signé. Le tableau ci-dessus est juste là pour illustrer les étapes de mon exemple. Pas besoin de sortir un tel tableau, une ligne de tableau ou même simplement les positions finales des étapes. Seule la position finale finale, sous forme d'entier signé, est requise.
Le code le plus court, après une semaine, gagne.
<-
est si elle est immédiatement suivie d'un<
ou d'un->
. Il n'y a aucun moyen dans ce langage de représenter la séquence<-
alors>
- ce qui le seraitgo left the total amount of single steps that you've gone left, plus one, then go right one single step
. Est-ce correct et par conception?