Иногда при написании кода для мозгового отвращения вы чувствуете необходимость сделать его длиннее, чем необходимо, чтобы стимулировать отладку. Вы могли бы сделать это, просто положив ><туда, но что это весело? Вам нужно что-то более длинное и меньшее NOPey, чтобы сбить с толку любого, кто читает ваш код.
Краткое введение в Brainfuck
Brainfuck - это эзотерический язык программирования, созданный в 1993 году Урбаном Мюллером и отличающийся чрезвычайным минимализмом. (Википедия)
Brainfuck является язык , основанный на восьми команд: +-><,.[]. Код запускается на чем-то похожем на машину Тьюринга: бесконечную ленту, на которой можно изменять значения. В этом задании мы сосредоточимся на первых четырех:
+ increment the value at the pointer
- decrement the value at the pointer
> move the pointer right
< move the pointer left
Brainfuck NOPs
Мозговой NOP - это последовательность персонажей, которые при исполнении из любого состояния не приводят к изменению состояния. Они состоят из четырех символов, упомянутых выше.
Соревнование
Задача состоит в том, чтобы написать программу или функцию, которая при исполнении генерирует случайный NOP для мозгового отрыва заданной длины.
вход
В качестве входных данных вы получите неотрицательное четное число n. (НОПы для странного невозможны n.)
Выход
Вы выведете случайный NOP мозгового траха длины n.
правила
- Определение NOP: когда выходные данные программы вставляются в любую точку программы «мозгового штурма», поведение указанной программы не должно меняться каким-либо образом. Другими словами, он не должен изменять состояние переводчика.
- Обратите внимание, что, например,
+>-<это неверно, так как он изменяет значения двух ячеек, не возвращая их обратно. Пожалуйста, проверьте ваше решение для них перед публикацией. - Также обратите внимание, что
+>-<->+<это NOP, который нельзя уменьшить до нуля, просто удалив><<>+--+. Таким образом, вы не можете использовать алгоритм, который просто вставляет их друг в друга.
- Обратите внимание, что, например,
- Каждый действительный NOP длины
nдолжен иметь ненулевой шанс появления в выходных данных. Распределение не обязательно должно быть равномерным. - У рассматриваемого интерпретатора мозгового удара есть вдвойне бесконечная лента произвольных прецизионных ячеек. То есть вы можете бесконечно идти в обоих направлениях и увеличивать / уменьшать каждую ячейку до бесконечности.
- Программа должна завершиться в течение 1 минуты для
n= 100 на моем компьютере, поэтому не нужно создавать все возможные NOP и выбирать один. - Если задан неверный ввод (нецелое, отрицательное, нечетное и т. Д.), Вы можете делать все, что захотите, включая сбой.
счет
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Примеры
Вот все допустимые результаты для n= 4:
++-- +-+- +--+ --++ -+-+ -++-
>><< ><>< ><<> <<>> <><> <>><
><+- ><-+ <>+- <>-+
>+-< >-+< <+-> <-+>
+><- -><+ +<>- -<>+
+->< -+>< +-<> -+<>
Вот несколько возможных выходных данных для n= 20:
+>>->+<->-<<<->>++<<
>+>-<+<->+-<>->+<-<+
+--+-++--++-+--+-++-
>>>>>>>>>+-<<<<<<<<<
.имеет побочный эффект, ,перезаписывает значение, которое не может быть восстановлено без использования []. Но в []итоге установим значение на ноль. Это также перезаписывает значение (поэтому нам понадобится другое []для его восстановления), если только мы не можем быть уверены, что затронутая ячейка была нулевой для начала. Однако нам пришлось бы искать такую камеру с чем-то вроде этого [>], и невозможно надежно вернуться к той позиции, с которой мы пришли.
+-<>как вы просили:a