Ваша задача состоит в том, чтобы получить информацию, подобную этой (программа Hello World):
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
И выведите подсказку (которая будет "> "
):
>
Затем пользователь может ввести что угодно в подсказку. Ваш простой отладчик должен иметь следующие команды:
S
- шаг- Выведите текущее местоположение (см.
L
) После перехода. S(a positive integer)
- шаг за шагом
- Выведите текущее местоположение (см.
L
- место расположения- Термин «местоположение» всегда относится к тому, где вы находитесь в программе (т. Е. Указатель инструкции).
Отформатирован так:
v +++++++[>+++++++<-]>.
Это означает, что текущее местоположение программы находится на третьем
+
.
G(an integer)
- перейти к- Это означает, что продолжайте идти, пока не доберетесь до этого места. Если вы достигли конца программы и не попали туда, просто выйдите из программы.
- Отрицательное целое число означает, что много символов с конца. Да, это означает , что
-0
отличается0
, и-1
является вторым по последнему символу. - Не выводите ничего для этой команды.
D
- массив дампа- Отформатированный как
1, 2, 3, 4, 5
- Если массив есть
1, 2, 3, 0, 0, 0, 0, 0, ...
, только вывод1, 2, 3
. D(a positive integer) (a positive integer)
- сбросить все элементы массива между этими двумя позициями (включительно)
- Отформатированный как
(a positive integer)
- вывести элемент в данный момент в этой позиции массиваP
- вывести индекс указателя BF (то, что вы меняете с помощью>
и<
).
Когда программа запросит ввод, покажите подсказку "I> "
. (Вы можете вводить один символ за раз.)
Когда он что-то выводит, покажи "O> " + (the output)
. Несколько выходов между командами должны быть связаны друг с другом (то есть вы не можете сделать это > G-0 O> H O> e O> l O> l O> o ...
, это должно быть > G-0 O> Hello, World!
).
Выведите «Done» и выйдите, как только вы дойдете до конца программы.
Образец прогона:
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
> S
1
> S
2
> S2
4
> S0
4
> L
v
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
> D
4
> 0
4
> D10 15
0, 0, 0, 0, 0, 0
> G-0
O> Hello, World!
Done
Пробный прогон с пошаговым циклом и P
инструкцией (вычисляет 3*2+1
)
+++[>++<-]>+
> S3
3
> L
v
+++[>++<-]>+
> S3
6
> L
v
+++[>++<-]>+
> P
1
> S3
9
> L
v
+++[>++<-]>+
> S
3
> L
v
+++[>++<-]>+
> D
2, 2
>
Пробный прогон, показывающий ввод / вывод
>+[>,---------------------------------]<[<]>[>.]
> G37
I> H
I> e
I> l
I> l
I> o
I> !
> D
0, 39, 68, 75, 75, 78
> G-0
O> 'DKKN
Done
Это код-гольф , поэтому выиграет самый короткий код.