Ваше завдання - якщо ви вирішите прийняти це - створити програму, яка розбирає та оцінює рядок (зліва направо та довільної довжини) лексем, які дають вказівки - ліворуч або праворуч. Ось чотири можливі лексеми та їх значення:
> 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
Хоча є улов - ознаки напрямків, які ваша програма повинна вміти розбирати, будуть представлені у такій формі:
<<->-><<->->>->>->
... інакше кажучи, вони є об'єднаними, і завдання вашої програми з’ясувати правильний пріоритет напрямків та кількість кроків, які потрібно вжити (заздалегідь). Порядок пріоритету такий (від найвищого до найнижчого пріоритету):
->
<-
>
<
Якщо ви зіткнулися, <-
коли жодних кроків ліворуч раніше не було зроблено ні з початку, ні з моменту останнього скидання, зробіть один крок ліворуч. Це ж правило стосується і цього ->
, але потім для руху вправо.
Ваша програма повинна починатися з 0, а її результатом має бути підписане ціле число, що представляє кінцеву кінцеву позицію.
Ви можете очікувати, що введення завжди буде дійсним (наприклад, нічого подібного <--->>--<
, наприклад).
Приклад введення:
><->><-<-><-<>>->
Кроки в цьому прикладі:
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
Для уточнення: вихід програми повинен бути лише кінцевою кінцевою позицією у вигляді підписаного цілого числа. Вище наведена таблиця, щоб проілюструвати кроки, зроблені моїм прикладом. Не потрібно виводити таку таблицю, рядок таблиці або навіть лише кінцеві позиції кроків. Потрібна лише остаточна кінцева позиція, як підписане ціле число.
Найкоротший код виграє через тиждень.
<-
це, якщо за ним негайно слідує a<
або a->
. Там немає ніякого способу на цій мові , щоб представити послідовність ,<-
то>
- що будеgo left the total amount of single steps that you've gone left, plus one, then go right one single step
. Це правильно і задумом?