>>>>,[[<]<<+>>>[>],]<[<]<+<[>>+<[-<-<+>>]<<++[->>+<<]>]>[-]>>[<[->.[-]<[->+<]<+[->+<]>>]++++++++++.[-]<[->+<]>>]
Provalo online!
Sicuro nei sapori di BF che non maschera le celle con 256
, non supporta byte null.
Rimuovere le frecce iniziali a destra se il sapore supporta la memoria negativa per 4 byte salvati.
Spiegazione
Il programma è diviso in 3 fasi:
Stage 1: >>>>,[[<]<<+>>>[>],]<[<]
Stage 2: <+<[>>+<[-<-<+>>]<<++[->>+<<]>]>[-]>>
Stage 3: [<[->.[-]<[->+<]<+[->+<]>>]++++++++++.[-]<[->+<]>>]
Fase 1
In questa fase, mettiamo tutti i personaggi sul nastro, tenendo conto del numero di personaggi.
Questo è il nastro per l'input abcdefghi
dopo questo nastro:
000 009 000 000 095 096 097 098 099 100 101 102 103
^
Il 009
è il conteggio.
Per ogni personaggio, spostiamo il primo zero a sinistra, [<]
quindi ne aggiungiamo uno al conteggio <<+>>>
, quindi ci spostiamo sullo zero più [>]
a destra per prepararci al personaggio successivo.
Fase 2
Questa fase esegue la radice quadrata della lunghezza memorizzata nella seconda cella.
Continua a sottrarre 1, 3, 5, 7, ...
fino a quando il numero raggiunge lo zero, mantenendo il controllo del numero di iterazioni.
Funziona perché i numeri quadrati possono essere espressi come 1 + 3 + 5 + ...
.
Fase 3
Indica la radice quadrata della lunghezza trovata sopra come n
.
Questo stage genera i n
caratteri alla volta, quindi emette una nuova riga, fino a quando il nastro non viene cancellato.