En Befunge-93, a menudo puede ser ventajoso aplanar un bucle en una sola línea, con la sección de bucle del código ejecutándose en ambas direcciones.
Por ejemplo, considere el siguiente código, que genera la letra a
ocho veces:
"a"9>1-:#v_@
^\,:\<
Esto se puede aplanar en una sola línea intercalando la secuencia del bucle con las instrucciones del puente ( #
):
"a"9>1#\-#,:#:>#\_@
Pruébalo en línea!
Si solo está mirando los caracteres que no son espacios en blanco, puede tener la impresión de que es más largo que el original. Pero una vez que tiene en cuenta el salto de línea y el relleno adicional requerido en la versión de dos líneas, en realidad termina ahorrando cuatro bytes.
En este caso particular, el código se comprime aún más al observar que esa secuencia :#:
simplemente se puede reemplazar con :
.
"a"9>1#\-#,:>#\_@
Pruébalo en línea!
De hecho, cada vez que repita la misma instrucción a cada lado de un #
comando, puede simplificar eso a una sola instrucción, por lo que esto es algo que siempre debe tener en cuenta al aplanar un bucle.
Para entender cómo funciona esto, puede ayudar escribir la secuencia del bucle dos veces, una con todos los caracteres que siguen a los #
eliminados (es decir, lo que sucede cuando se ejecuta de izquierda a derecha) y una vez con los caracteres que preceden a los #
eliminados (es decir, ejecutar de derecha a izquierda )
"a"9>1#\-#,:>#\_@
>1 - :> _ ; executing left to right
> \ ,: \_ ; executing right to left
Ahora puede ver claramente cómo esto coincide con la versión original de dos líneas del código.