Бесконечный счетный цикл в Brainfuck
-
27-10-2019 - |
Вопрос
В качестве программы отладчика/тестирования для моей реализации Brainf*CK я создал следующий цикл подсчета:
+[[>+]+]
При одноместном байте, обертывающих клетках и с 30К клетками с оберткой, это создает бесконечный цикл подсчета. Он устанавливает каждую ячейку на 1, затем каждую ячейку на 2 и т. Д.
Моя проблема заключается в том, что когда он достигает 255, внутренняя петля увеличивает ячейку до 0, а затем внешний цикл сразу же увеличивает ее до 1. Это действует как «двойной шаг», когда он переполняется, вместо одного шага. Это единственный способ, которым я мог бы получить петлю, чтобы продолжить бесконечно с этой тесной программой.
Подсчет для каждой ячейки уходит 0 -> 1 -> 2 ... 254 -> 255 -> 1 ...
Пока я хотел бы, чтобы это было 0 -> 1 -> 2 ... 254 -> 255 -> 0 -> 1 ...
Трудно продолжить цикл, когда текущая ячейка равна нулю. Я играл с вариациями на одной и той же теме, но ни один из них не понимает это правильно.
Эта конкретная программа является лишь тривиальной программой подсчета для тестирования, но что действительно поможет мне с будущими программами, так это знание, как инвертировать кондиционерстные условия, как мне нужно, чтобы этот цикл работы работал.
Решение
Пытаться:
+[[>+]>[+>]+]
После первой внутренней петли мы знаем, что данные 0 составляют кучу 255 -х годов. Перейдите к следующей ячейке и увеличьте их все, пока мы не вернемся к началу. Затем увеличьте первую ячейку и начните все сначала.
Другие советы
Еще одна возможность, которую я рассмотрел прошлой ночью, хотя она немного отличается от ваших требований:
-[[-]>-]
Это тот же размер, что и ваш оригинал, но он отсчитывается. Он циклирует каждую ячейку от 255 до нуля, но модифицирует только одну ячейку за раз. Я думал, что добавлю это, так как это интересный короткий цикл, который вы можете использовать для тестирования.
Вы, конечно, можете сделать любую из этих циклов подсчитать или вниз исключительно, используя только + или только -.