In Befunge-93 kann es oft vorteilhaft sein, eine Schleife in eine einzige Zeile zu reduzieren, wobei der Schleifenabschnitt des Codes in beide Richtungen ausgeführt wird.
Betrachten Sie beispielsweise den folgenden Code, der den Buchstaben a
achtmal ausgibt :
"a"9>1-:#v_@
^\,:\<
Dies kann zu einer einzelnen Zeile reduziert werden, indem die Schleifensequenz mit Brückenbefehlen ( #
) durchsetzt wird:
"a"9>1#\-#,:#:>#\_@
Probieren Sie es online!
Wenn Sie sich nur die Zeichen ohne Leerzeichen ansehen, haben Sie möglicherweise den Eindruck, dass diese länger sind als das Original. Wenn Sie jedoch den Zeilenvorschub und den zusätzlichen Abstand berücksichtigen, der in der zweizeiligen Version erforderlich ist, sparen Sie tatsächlich vier Bytes.
In diesem speziellen Fall kann der Code noch weiter komprimiert werden, indem festgestellt wird, dass diese Sequenz :#:
einfach durch ersetzt werden kann :
.
"a"9>1#\-#,:>#\_@
Probieren Sie es online!
Tatsächlich können Sie jedes Mal, wenn Sie denselben Befehl auf beiden Seiten eines #
Befehls wiederholen, diesen auf den einen Befehl vereinfachen. Dies ist also etwas, worauf Sie beim Reduzieren einer Schleife immer achten sollten.
Um zu verstehen, wie dies funktioniert, kann es hilfreich sein, die Schleifenfolge zweimal zu schreiben, einmal mit allen Zeichen nach dem #
Entfernen (dh was passiert, wenn von links nach rechts ausgeführt wird) und einmal mit den Zeichen vor dem #
Entfernen (dh von rechts nach links ausgeführt wird) ).
"a"9>1#\-#,:>#\_@
>1 - :> _ ; executing left to right
> \ ,: \_ ; executing right to left
Sie können jetzt deutlich sehen, wie dies mit der ursprünglichen zweizeiligen Version des Codes übereinstimmt.