W Befunge-93 często może być korzystne spłaszczenie pętli do pojedynczej linii, przy czym sekcja pętli kodu jest wykonywana w obu kierunkach.
Rozważmy na przykład poniższy kod, który wysyła literę a
osiem razy:
"a"9>1-:#v_@
^\,:\<
Można to spłaszczyć spłaszczić do pojedynczej linii, przerywając sekwencję pętli instrukcjami mostkowania ( #
):
"a"9>1#\-#,:#:>#\_@
Wypróbuj online!
Jeśli patrzysz tylko na znaki niebiałe, możesz odnieść wrażenie, że jest on dłuższy niż oryginał. Ale gdy weźmiesz pod uwagę wysuw linii i dodatkowe wypełnienie wymagane w wersji dwuwierszowej, w rzeczywistości oszczędzasz cztery bajty.
W tym konkretnym przypadku kod można jeszcze bardziej skompresować, zauważając, że sekwencję tę :#:
można po prostu zastąpić :
.
"a"9>1#\-#,:>#\_@
Wypróbuj online!
W rzeczywistości, za każdym razem, gdy ta sama instrukcja jest powtarzana po obu stronach #
polecenia, możesz uprościć to do jednej instrukcji, więc jest to coś, na co powinieneś zawsze zwracać uwagę podczas spłaszczania pętli.
Aby zrozumieć, jak to działa, pomocne może być napisanie sekwencji pętli dwa razy, raz ze wszystkimi znakami po #
usuniętym (tj. Co dzieje się podczas wykonywania od lewej do prawej), a raz ze znakami poprzedzającymi #
usuniętą (tj. Wykonywanie od prawej do lewej ).
"a"9>1#\-#,:>#\_@
>1 - :> _ ; executing left to right
> \ ,: \_ ; executing right to left
Teraz możesz wyraźnie zobaczyć, jak to pasuje do oryginalnej dwuliniowej wersji kodu.