>>>>,[[<]<<+>>>[>],]<[<]<+<[>>+<[-<-<+>>]<<++[->>+<<]>]>[-]>>[<[->.[-]<[->+<]<+[->+<]>>]++++++++++.[-]<[->+<]>>]
Pruébalo en línea!
Seguro en sabores de BF que no enmascara las celdas 256
, no admite bytes nulos.
Elimine las flechas iniciales hacia la derecha si el sabor admite memoria negativa para 4 bytes guardados.
Explicación
El programa se divide en 3 etapas:
Stage 1: >>>>,[[<]<<+>>>[>],]<[<]
Stage 2: <+<[>>+<[-<-<+>>]<<++[->>+<<]>]>[-]>>
Stage 3: [<[->.[-]<[->+<]<+[->+<]>>]++++++++++.[-]<[->+<]>>]
Nivel 1
En esta etapa, colocamos todos los caracteres en la cinta, mientras contamos la cantidad de caracteres.
Esta es la cinta para la entrada abcdefghi
después de esta cinta:
000 009 000 000 095 096 097 098 099 100 101 102 103
^
El 009
es el conde.
Para cada personaje, movemos el primer cero a la izquierda [<]
y luego agregamos uno al conteo <<+>>>
, y luego nos movemos al cero más a la derecha [>]
para prepararnos para el siguiente personaje.
Etapa 2
Esta etapa hace la raíz cuadrada de la longitud almacenada en la segunda celda.
Sigue restando 1, 3, 5, 7, ...
hasta que el número llega a cero, mientras se mantiene el control del número de iteraciones.
Funciona porque los números cuadrados se pueden expresar como 1 + 3 + 5 + ...
.
Etapa 3
Denote la raíz cuadrada de la longitud que se encuentra arriba como n
.
Esta etapa genera n
caracteres a la vez y luego genera una nueva línea, hasta que se borra la cinta.