Lauflängencodiertes Brainfuck, 49 Bytes
Da es in Brainfuck keine Variablen gibt, habe ich stattdessen nur die Standardeingabe und -ausgabe verwendet.
Der Code 32+
sollte vom Interpreter als 32 +
s interpretiert werden. Ersetzen Sie sie einfach manuell, wenn Ihr Dolmetscher RLE nicht unterstützt.
>,[32->+<[16-<[>++<-]>[<+>-]>-<]>[<<.[-]>>-]<,]<.
Erweiterte (Nicht-RLE) Version: (91 Bytes)
>,[-------------------------------->+<[----------------<[>++<-]>[<+>-]>-<]>[<<.[-]>>-]<,]<.
Der Code setzt voraus, dass EOF als 0 codiert ist.
Erläuterung
Das folgende Layout wird verwendet:
+---+---+------+
| x | a | flag |
+---+---+------+
Wo x
soll das ASCII-Byte gedruckt werden, a
ist das Zeichen aus der Standardeingabe und flag
ist 1, wenn a
war ein Leerzeichen.
>, 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