>>>>,[[<]<<+>>>[>],]<[<]<+<[>>+<[-<-<+>>]<<++[->>+<<]>]>[-]>>[<[->.[-]<[->+<]<+[->+<]>>]++++++++++.[-]<[->+<]>>]
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 abcdefghidopo 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 ncaratteri alla volta, quindi emette una nuova riga, fino a quando il nastro non viene cancellato.