>>>>,[[<]<<+>>>[>],]<[<]<+<[>>+<[-<-<+>>]<<++[->>+<<]>]>[-]>>[<[->.[-]<[->+<]<+[->+<]>>]++++++++++.[-]<[->+<]>>]
Experimente online!
Seguro nos tipos de BF que não mascaram as células 256
, não suportam bytes nulos.
Remova as setas iniciais à direita se o sabor suportar memória negativa por 4 bytes salvos.
Explicação
O programa está dividido em 3 etapas:
Stage 1: >>>>,[[<]<<+>>>[>],]<[<]
Stage 2: <+<[>>+<[-<-<+>>]<<++[->>+<<]>]>[-]>>
Stage 3: [<[->.[-]<[->+<]<+[->+<]>>]++++++++++.[-]<[->+<]>>]
Estágio 1
Nesta fase, colocamos todos os caracteres na fita, mantendo a contagem do número de caracteres.
Esta é a fita para a entrada abcdefghi
após esta fita:
000 009 000 000 095 096 097 098 099 100 101 102 103
^
O 009
é a contagem.
Para cada personagem, movemos o primeiro zero à esquerda [<]
e, em seguida, adicionamos um à contagem <<+>>>
; depois, movemos para o zero mais à direita [>]
para nos preparar para o próximo caractere.
Etapa 2
Esse estágio faz a raiz quadrada do comprimento armazenado na segunda célula.
Ele continua subtraindo 1, 3, 5, 7, ...
até o número chegar a zero, enquanto verifica o número de iterações.
Funciona porque os números quadrados podem ser expressos como 1 + 3 + 5 + ...
.
Etapa 3
Indique a raiz quadrada do comprimento encontrado acima como n
.
Esse estágio gera n
caracteres de cada vez e, em seguida, gera uma nova linha, até que a fita seja limpa.