В Befunge-93 часто может быть выгодно сгладить цикл в одну строку, причем часть цикла кода выполняется в обоих направлениях.
Например, рассмотрим приведенный ниже код, который выводит букву a
восемь раз:
"a"9>1-:#v_@
^\,:\<
Это может быть сведено в одну строку путем разделения последовательности цикла с помощью инструкций моста ( #
):
"a"9>1#\-#,:#:>#\_@
Попробуйте онлайн!
Если вы просто смотрите на символы без пробелов, у вас может сложиться впечатление, что это больше, чем оригинал. Но как только вы примете во внимание перевод строки и дополнительный заполнитель, требуемый в двухстрочной версии, вы фактически сохраните четыре байта.
В этом конкретном случае код сжимается еще больше, отмечая, что эту последовательность :#:
можно просто заменить на :
.
"a"9>1#\-#,:>#\_@
Попробуйте онлайн!
Фактически, когда вы повторяете одну и ту же инструкцию с обеих сторон #
команды, вы можете упростить ее до одной инструкции, так что это то, на что вы всегда должны обращать внимание при выравнивании цикла.
Чтобы понять, как это работает, это может помочь записать последовательность циклов дважды, один раз со всеми символами, следующими за #
удаленным (то есть, что происходит при выполнении слева направо), и один раз с символами, предшествующими #
удаленному (то есть выполнение справа налево) ).
"a"9>1#\-#,:>#\_@
>1 - :> _ ; executing left to right
> \ ,: \_ ; executing right to left
Теперь вы можете ясно видеть, как это соответствует исходной двухстрочной версии кода.