Dans Befunge-93, il peut souvent être avantageux d'aplatir une boucle en une seule ligne, la section de boucle du code étant exécutée dans les deux sens.
Par exemple, considérez le code ci-dessous, qui génère la lettre a
huit fois:
"a"9>1-:#v_@
^\,:\<
Cela peut s'aplatir être aplati en une seule ligne en intercalant la séquence de boucle avec des instructions de pont ( #
):
"a"9>1#\-#,:#:>#\_@
Essayez-le en ligne!
Si vous regardez simplement les caractères non blancs, vous pouvez avoir l'impression que c'est plus long que l'original. Mais une fois que vous prenez en compte le saut de ligne et le remplissage supplémentaire requis dans la version à deux lignes, vous finissez par économiser quatre octets.
Dans ce cas particulier, le code doit être encore plus compressé en notant que cette séquence :#:
peut simplement être remplacée par :
.
"a"9>1#\-#,:>#\_@
Essayez-le en ligne!
En fait, chaque fois que vous répétez la même instruction de chaque côté d'une #
commande, vous pouvez simplifier celle-ci en une seule instruction, c'est donc quelque chose que vous devriez toujours rechercher lorsque vous aplatissez une boucle.
Pour comprendre comment cela fonctionne, il peut être utile d'écrire la séquence de boucle deux fois, une fois avec tous les caractères suivant la #
suppression (ie ce qui se passe lors de l'exécution de gauche à droite), et une fois avec les caractères précédant la #
suppression (ie exécution de droite à gauche ).
"a"9>1#\-#,:>#\_@
>1 - :> _ ; executing left to right
> \ ,: \_ ; executing right to left
Vous pouvez maintenant voir clairement comment cela correspond à la version originale à deux lignes du code.