Gracias Martin por 6 bytes!
1="/}.!+/M8;
Expandido:
1 = "
/ } . !
+ / M 8 ;
. . . .
. . .
Pruébalo en línea
Viejo, contesta. Esto se deja porque las imágenes y la explicación pueden ser útiles para los nuevos usuarios de Hexagony.
!).={!/"*10;$.[+{]
Expandido:
! ) .
= { ! /
" * 1 0 ;
$ . [ +
{ ] .
Esto imprime la secuencia de Fibonacci separada por nuevas líneas.
Pruébalo en línea! Sin embargo, tenga cuidado, al intérprete en línea no le gusta la salida infinita.
Explicación
Hay dos "subrutinas" para este programa, cada una de las cuales es ejecutada por una de las dos IP utilizadas. La primera rutina imprime nuevas líneas y la segunda realiza el cálculo y la salida de Fibonacci.
La primera subrutina comienza en la primera línea y se mueve de izquierda a derecha todo el tiempo. Primero imprime el valor en el puntero de memoria (inicializado a cero), y luego incrementa el valor en el puntero de memoria en 1
. Después del no-op, el IP salta a la tercera línea que primero cambia a otra celda de memoria, luego imprime una nueva línea. Como una nueva línea tiene un valor positivo (su valor es 10), el código siempre saltará a la quinta línea, a continuación. La quinta línea devuelve el puntero de memoria a nuestro número de Fibonacci y luego cambia a la otra subrutina. Cuando regresemos de esta subrutina, la IP volverá a la tercera línea, después de ejecutar un no-op.
La segunda subrutina comienza en la esquina superior derecha y comienza a moverse hacia el sudeste. Después de un no-op, nos vemos obligados a viajar al oeste a lo largo de la segunda línea. Esta línea imprime el número actual de Fibonacci, antes de mover el puntero de memoria a la siguiente ubicación. Luego, el IP salta a la cuarta línea, donde calcula el siguiente número de Fibonacci usando los dos anteriores. Luego devuelve el control a la primera subrutina, pero cuando recupera el control del programa, continúa hasta que se encuentra con un salto, donde rebota sobre el espejo que originalmente se usó para apuntarlo al Oeste, ya que regresa a la segunda línea.
Imágenes bonitas preliminares!
El lado izquierdo de la imagen es el programa, el lado derecho representa la memoria. El cuadro azul es la primera IP, y ambas IP apuntan a la siguiente instrucción que se ejecutará.
Nota: Las imágenes solo pueden parecer bonitas para las personas que tienen una habilidad similar limitada con los programas de edición de imágenes: PI agregará al menos 2 iteraciones más para que el uso del *
operador sea más claro.
Nota 2: solo vi la respuesta de alephalpha después de escribir la mayor parte de esto, pensé que todavía era valioso debido a la separación, pero las partes reales de Fibonacci de nuestros programas son muy similares. Además, este es el programa de Hexagony más pequeño que he visto haciendo uso de más de una IP, así que pensé que sería bueno mantenerlo de todos modos: P
^2
en reemplazarlo0,1
. +1