Longitud de ejecución codificada Brainfuck, 49 bytes
Como no hay variables en Brainfuck, solo utilicé la entrada y salida estándar.
El 32+
intérprete debe interpretar el código como 32 +
s. Simplemente reemplácelos manualmente si su intérprete no admite RLE.
>,[32->+<[16-<[>++<-]>[<+>-]>-<]>[<<.[-]>>-]<,]<.
Versión ampliada (no RLE): (91 bytes)
>,[-------------------------------->+<[----------------<[>++<-]>[<+>-]>-<]>[<<.[-]>>-]<,]<.
El código supone que EOF está codificado como 0.
Explicación
Se utiliza el siguiente diseño:
+---+---+------+
| x | a | flag |
+---+---+------+
Dónde x
se imprimirá el byte ASCII, a
es el carácter de la entrada estándar y flag
es 1 si a
fuera un espacio.
>, Read a character a into the second cell
[ While not EOF:
32- Decrease a by 32 (a -= ' ')
>+< Set the flag to 1
[ If a was not a space:
16- Decrease by 16 more ('0' == 32+16)
<[>++<-] a += 2*x
>[<+>-] Move it back (x = a)
>-< Reset the flag, it was not a space.
]>
[ If a was a space (flag == 1):
<<.[-] Print and reset x
>>- Reset the flag
]
<, Read the next caracter a
]
<. Print the last character x