>>>>,[[<]<<+>>>[>],]<[<]<+<[>>+<[-<-<+>>]<<++[->>+<<]>]>[-]>>[<[->.[-]<[->+<]<+[->+<]>>]++++++++++.[-]<[->+<]>>]
Essayez-le en ligne!
Coffre-fort dans les saveurs de BF qui ne masque pas les cellules avec 256
, ne prend pas en charge les octets nuls.
Supprimez les flèches de droite initiales si l'arôme prend en charge la mémoire négative pour 4 octets enregistrés.
Explication
Le programme est divisé en 3 étapes:
Stage 1: >>>>,[[<]<<+>>>[>],]<[<]
Stage 2: <+<[>>+<[-<-<+>>]<<++[->>+<<]>]>[-]>>
Stage 3: [<[->.[-]<[->+<]<+[->+<]>>]++++++++++.[-]<[->+<]>>]
Étape 1
Dans cette étape, nous mettons tous les personnages sur la bande, tout en comptant le nombre de caractères.
Ceci est la bande pour l'entrée abcdefghi
après cette bande:
000 009 000 000 095 096 097 098 099 100 101 102 103
^
C'est 009
le comte.
Pour chaque caractère, nous déplaçons le premier zéro à gauche [<]
, puis nous ajoutons un au nombre <<+>>>
, puis nous nous déplaçons vers le zéro le plus [>]
à droite pour nous préparer pour le caractère suivant.
Étape 2
Cette étape fait la racine carrée de la longueur stockée dans la deuxième cellule.
Il continue de soustraire 1, 3, 5, 7, ...
jusqu'à ce que le nombre atteigne zéro, tout en vérifiant le nombre d'itérations.
Cela fonctionne parce que les nombres carrés peuvent être exprimés comme 1 + 3 + 5 + ...
.
Étape 3
Désigner la racine carrée de la longueur trouvée ci-dessus comme n
.
Cette étape produit des n
caractères à la fois, puis génère une nouvelle ligne, jusqu'à ce que la bande soit effacée.