Obrigado Martin por 6 bytes!
1="/}.!+/M8;
Expandido:
1 = "
/ } . !
+ / M 8 ;
. . . .
. . .
Experimente online
Velho, responda. Isso está sendo deixado de lado porque as imagens e a explicação podem ser úteis para os novos usuários do Hexagony.
!).={!/"*10;$.[+{]
Expandido:
! ) .
= { ! /
" * 1 0 ;
$ . [ +
{ ] .
Isso imprime a sequência de Fibonacci separada por novas linhas.
Experimente online! Tenha cuidado, porém, o intérprete on-line realmente não gosta de saída infinita.
Explicação
Existem duas "sub-rotinas" para este programa, cada uma delas é executada por um dos dois IPs utilizados. A primeira rotina imprime novas linhas e a segunda faz o cálculo e a saída de Fibonacci.
A primeira sub-rotina começa na primeira linha e se move da esquerda para a direita o tempo todo. Primeiro, imprime o valor no ponteiro da memória (inicializado em zero) e depois incrementa o valor no ponteiro da memória 1
. Após o no-op, o IP salta para a terceira linha que primeiro muda para outra célula de memória e depois imprime uma nova linha. Como uma nova linha tem um valor positivo (seu valor é 10), o código sempre passará para a quinta linha, a seguir. A quinta linha retorna o ponteiro da memória para o nosso número de Fibonacci e depois muda para a outra sub-rotina. Quando voltarmos desta sub-rotina, o IP voltará para a terceira linha, depois de executar um no-op.
A segunda sub-rotina começa no canto superior direito e começa a se mover para sudeste. Depois de um no-op, somos levados a viajar para o oeste ao longo da segunda linha. Esta linha imprime o número atual de Fibonacci, antes de mover o ponteiro de memória para o próximo local. Em seguida, o IP salta para a quarta linha, onde calcula o próximo número de Fibonacci usando os dois anteriores. Em seguida, ele devolve o controle à primeira sub-rotina, mas quando recupera o controle do programa, continua até encontrar um salto, onde salta sobre o espelho que foi originalmente usado para apontá-lo para o oeste, quando retorna à segunda linha.
Fotos bonitas preliminares!
O lado esquerdo da imagem é o programa, o lado direito representa a memória. A caixa azul é o primeiro IP e os dois estão apontando para a próxima instrução a ser executada.
Nota: As imagens podem parecer bonitas apenas para pessoas com habilidades igualmente limitadas nos programas de edição de imagens: o PI adicionará pelo menos mais duas iterações para que o uso do *
operador fique mais claro.
Nota 2: Eu só vi a resposta de alefhalpha depois de escrever a maior parte disso, achei que ainda era valiosa por causa da separação, mas as partes reais de Fibonacci de nossos programas são muito semelhantes. Além disso, este é o menor programa Hexagony que eu já vi usando mais de um IP, então achei que seria bom manter assim: P
^2
nisso como substituto0,1
. +1