In Befunge-93, può spesso essere vantaggioso appiattire un loop in una singola riga, con la sezione loop del codice eseguita in entrambe le direzioni.
Ad esempio, considera il codice seguente, che emette la lettera a
otto volte:
"a"9>1-:#v_@
^\,:\<
Questo può essere appiattito in un'unica riga intervallando la sequenza del loop con le istruzioni del bridge ( #
):
"a"9>1#\-#,:#:>#\_@
Provalo online!
Se stai solo guardando i caratteri non bianchi, potresti avere l'impressione che questo sia più lungo dell'originale. Ma una volta che si tiene conto dell'alimentazione di linea e dell'imbottitura aggiuntiva richiesta nella versione a due righe, si finisce per salvare quattro byte.
In questo caso particolare, il codice può essere compresso ulteriormente notando che quella sequenza :#:
può essere semplicemente sostituita con :
.
"a"9>1#\-#,:>#\_@
Provalo online!
In effetti, ogni volta che si ripete la stessa istruzione su entrambi i lati di un #
comando, è possibile semplificare questa in una sola istruzione, quindi è qualcosa che si dovrebbe sempre fare attenzione quando si appiattisce un ciclo.
Per capire come funziona, può essere utile scrivere due volte la sequenza di loop, una volta con tutti i caratteri che seguono il #
rimosso (cioè cosa succede quando si esegue da sinistra a destra) e una volta con i caratteri che precedono il #
rimosso (cioè eseguendo da destra a sinistra ).
"a"9>1#\-#,:>#\_@
>1 - :> _ ; executing left to right
> \ ,: \_ ; executing right to left
Ora puoi vedere chiaramente come questo corrisponde alla versione originale a due righe del codice.