No Befunge-93, muitas vezes pode ser vantajoso achatar um loop em uma única linha, com a seção de código do loop sendo executada em ambas as direções.
Por exemplo, considere o código abaixo, que gera a letra a
oito vezes:
"a"9>1-:#v_@
^\,:\<
Isso pode ser nivelado em uma única linha, intercalando a sequência do loop com as instruções da ponte ( #
):
"a"9>1#\-#,:#:>#\_@
Experimente online!
Se você estiver apenas olhando para os caracteres que não são de espaço em branco, poderá ter a impressão de que isso é mais longo que o original. Porém, depois de levar em conta o avanço de linha e o preenchimento adicional necessário na versão de duas linhas, você acaba economizando quatro bytes.
Nesse caso específico, o código pode ser compactado ainda mais observando que essa sequência :#:
pode ser simplesmente substituída por :
.
"a"9>1#\-#,:>#\_@
Experimente online!
De fato, sempre que você repetir a mesma instrução em ambos os lados de um #
comando, você pode simplificá-la para apenas uma instrução; portanto, isso é algo que você sempre deve procurar ao nivelar um loop.
Para entender como isso funciona, pode ajudar a escrever a sequência do loop duas vezes, uma vez com todos os caracteres após a #
remoção (ou seja, o que acontece ao executar da esquerda para a direita) e uma vez com os caracteres que precedem a #
remoção (ou seja, executando da direita para a esquerda )
"a"9>1#\-#,:>#\_@
>1 - :> _ ; executing left to right
> \ ,: \_ ; executing right to left
Agora você pode ver claramente como isso corresponde à versão original do código em duas linhas.