Grazie Martin per 6 byte!
1="/}.!+/M8;
Allargato:
1 = "
/ } . !
+ / M 8 ;
. . . .
. . .
Provalo online
Vecchio, rispondi. Questo viene lasciato perché le immagini e la spiegazione potrebbero essere utili ai nuovi utenti di Hexagony.
!).={!/"*10;$.[+{]
Allargato:
! ) .
= { ! /
" * 1 0 ;
$ . [ +
{ ] .
Questo stampa la sequenza di Fibonacci separata da newline.
Provalo online! Attenzione però, all'interprete online non piace davvero l'output infinito.
Spiegazione
Esistono due "subroutine" per questo programma, ognuna è gestita da uno dei due IP utilizzati. La prima routine stampa nuove righe e la seconda esegue il calcolo e l'output di Fibonacci.
La prima subroutine inizia sulla prima riga e si sposta da sinistra a destra per tutto il tempo. Prima stampa il valore sul puntatore di memoria (inizializzato su zero), quindi incrementa il valore sul puntatore di memoria di 1
. Dopo la no-op, l'IP passa alla terza riga che passa prima a un'altra cella di memoria, quindi stampa una nuova riga. Poiché una nuova riga ha un valore positivo (il suo valore è 10), il codice passerà sempre alla quinta riga, successiva. La quinta riga riporta il puntatore di memoria al nostro numero di Fibonacci e quindi passa all'altra subroutine. Quando torniamo da questa subroutine, l'IP tornerà alla terza riga, dopo aver eseguito una no-op.
La seconda subroutine inizia nell'angolo in alto a destra e inizia a spostarsi a sud-est. Dopo una no-op, siamo fatti rimbalzare per viaggiare verso ovest lungo la seconda linea. Questa riga stampa l'attuale numero di Fibonacci, prima di spostare il puntatore della memoria nella posizione successiva. Quindi l'IP passa alla quarta riga, dove calcola il successivo numero di Fibonacci usando i due precedenti. Restituisce quindi il controllo alla prima subroutine, ma quando riprende il controllo del programma, continua fino a quando non incontra un salto, dove rimbalza sul mirror che era originariamente utilizzato per puntarlo a ovest, mentre ritorna alla seconda riga.
Belle immagini preliminari!
Il lato sinistro dell'immagine è il programma, il lato destro rappresenta la memoria. La casella blu è il primo IP ed entrambi gli IP indicano la prossima istruzione da eseguire.
Nota: le immagini possono apparire belle solo per le persone che hanno abilità analogamente limitate con i programmi di modifica delle immagini: PI aggiungerà almeno altre 2 iterazioni in modo che l'uso *
dell'operatore diventi più chiaro.
Nota 2: Ho visto la risposta di alephalpha solo dopo aver scritto la maggior parte di questo, ho pensato che fosse ancora prezioso a causa della separazione, ma le parti effettive di Fibonacci dei nostri programmi sono molto simili. Inoltre, questo è il più piccolo programma Hexagony che ho visto fare uso di più di un IP, quindi ho pensato che potesse essere utile tenere comunque: P
^2
a un sostituto per0,1
. +1