Hexagonia 37 35 34 31
10"+}(=${";<$<1}42/.0@_=<>\;>(_
Expandido:
1 0 " +
} ( = $ {
" ; < $ < 1
} 4 2 / . 0 @
_ = < > \ ;
> ( _ . .
. . . .
Pruébalo en línea
Básicamente solo tiene dos para bucles contando desde diez hasta cero, imprimiendo un asterisco en el bucle interno y una nueva línea en el bucle externo.
Explicación:
Este programa consta de tres partes principales: inicialización de la memoria, un bucle que imprime diez asteriscos y un bucle que imprime una nueva línea. El bucle que imprime una nueva línea también contiene el bucle que imprime los asteriscos.
Primero, el código ejecuta la inicialización de memoria totalmente lineal. El código funciona a ser: 10"+}42
. Esto configura la memoria de los bordes cercanos para que se vea así:
10 \ / 10
|
42
42 es el código ASCII para el carácter de asterisco, y las dos decenas se utilizarán como nuestros contadores de bucle. Es de destacar que el puntero de memoria está apuntando actualmente lejos de las dos decenas, por lo que moverse hacia atrás nos colocará en una de las decenas.
A continuación, comenzamos el ciclo de impresión de astersisk. Linealmente, el código es el siguiente: ;".._(
. Esto imprime un asterisco, mueve el puntero de memoria hacia atrás y hacia la izquierda y finalmente disminuye el valor allí. Después de una iteración, la memoria se vería así:
10 \ / 9
|
42
Luego llegamos a la condición de bucle: el extremo inferior izquierdo >
. Si el borde que acabamos de disminuir sigue siendo positivo, rebotamos y ejecutamos a {
para movernos de nuevo al 42. Luego golpeamos ay regresamos $
al comienzo del ciclo de impresión ;
, saltando el <
. Si el valor era cero, nos dirigimos al otro ciclo.
El bucle externo comienza restableciendo el borde de memoria recientemente puesto a cero a diez (este es 10
el código, que va hacia el suroeste). Luego, imprimimos este diez como un carácter ASCII, que es una nueva línea. A continuación, pasamos a la otra orilla de memoria y disminuirlo con {(
y luego ejecutar lo que equivale a un montón de noops: =${_=
. Ahora, después de una iteración de este ciclo, la memoria se vería así:
9 \ / 10
|
42
Esta vez, la memoria está mirando hacia afuera desde el borde y almacena un nueve en el diagrama anterior. Luego ejecutamos el <
que actúa como la condición del bucle para el bucle externo. Si el valor no es cero, rebotamos en algunos espejos, luego comenzamos a ejecutar instrucciones significativas nuevamente después de ingresar a la parte superior del hexágono en el "
suroeste en movimiento. Esto hace que nos movamos hacia atrás y hacia la izquierda, nuevamente a la 42, pero mirando hacia adentro. Luego, =
cambia nuestra dirección, restableciendo el estado correctamente para comenzar el ciclo interno nuevamente. Si el borde se estableció en cero, el puntero de instrucción se embarca en una pequeña aventura que no hace nada hasta que sale del programa.
La aventura comienza con el puntero de instrucciones que se aventura hacia el noreste, sin tener en cuenta la seguridad de las direcciones cardinales. Valientemente ignora un espejo que está alineado con su dirección ( /
) y salta heroicamente de un trampolín ($
) evadiendo por completo la trampa mortal de otro trampolín totalmente idéntico. Mirando el vacío de los bordes del hexágono no inicializados, el puntero, sin vacilar por un momento, agrega los dos bordes en blanco que enfrenta, estableciendo el borde actual en su suma: 0 (el borde era en realidad cero de antemano, pero al puntero le gusta creo que esto fue bastante importante). Como el borde es cero, el puntero gira a la izquierda en la bifurcación de la carretera y se adentra en un bosque misterioso (de hexágonos). Allí, se encuentra desorientado, moviéndose hacia adelante y hacia atrás y hacia adelante, hasta que termina en el mismo lugar en la memoria que comenzó. Pensando que el problema debe ser que el borde actual se estableció en cero la última vez, el puntero planta valientemente un1
en el borde actual Entonces, el noble puntero investiga otro camino, uno tendido con ... ¡una trampa! ¡El borde actual se reduce y vuelve a cero! El puntero, aturdido por el sorprendente giro de los acontecimientos, vuelve a tropezar en la trampa y establece el borde actual en negativo. Enfurecido, el puntero intenta regresar al bosque relativamente agradable, solo para darse cuenta de que, dado que el borde actual no es positivo, los caminos han cambiado una vez más y el puntero se encuentra caminando hacia una cueva. Y por una cueva, me refiero a la boca de un gusano hexagonal gigante. Indefenso, el puntero maldice la sexinidad con su último aliento. Además, el programa termina.