Вопрос

В качестве программы отладчика/тестирования для моей реализации Brainf*CK я создал следующий цикл подсчета:

+[[>+]+]

При одноместном байте, обертывающих клетках и с 30К клетками с оберткой, это создает бесконечный цикл подсчета. Он устанавливает каждую ячейку на 1, затем каждую ячейку на 2 и т. Д.

Моя проблема заключается в том, что когда он достигает 255, внутренняя петля увеличивает ячейку до 0, а затем внешний цикл сразу же увеличивает ее до 1. Это действует как «двойной шаг», когда он переполняется, вместо одного шага. Это единственный способ, которым я мог бы получить петлю, чтобы продолжить бесконечно с этой тесной программой.

Подсчет для каждой ячейки уходит 0 -> 1 -> 2 ... 254 -> 255 -> 1 ...

Пока я хотел бы, чтобы это было 0 -> 1 -> 2 ... 254 -> 255 -> 0 -> 1 ...

Трудно продолжить цикл, когда текущая ячейка равна нулю. Я играл с вариациями на одной и той же теме, но ни один из них не понимает это правильно.

Эта конкретная программа является лишь тривиальной программой подсчета для тестирования, но что действительно поможет мне с будущими программами, так это знание, как инвертировать кондиционерстные условия, как мне нужно, чтобы этот цикл работы работал.

Это было полезно?

Решение

Пытаться:

+[[>+]>[+>]+]

После первой внутренней петли мы знаем, что данные 0 составляют кучу 255 -х годов. Перейдите к следующей ячейке и увеличьте их все, пока мы не вернемся к началу. Затем увеличьте первую ячейку и начните все сначала.

Другие советы

Еще одна возможность, которую я рассмотрел прошлой ночью, хотя она немного отличается от ваших требований:

-[[-]>-]

Это тот же размер, что и ваш оригинал, но он отсчитывается. Он циклирует каждую ячейку от 255 до нуля, но модифицирует только одну ячейку за раз. Я думал, что добавлю это, так как это интересный короткий цикл, который вы можете использовать для тестирования.

Вы, конечно, можете сделать любую из этих циклов подсчитать или вниз исключительно, используя только + или только -.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top