Run Lunghezza codificato Brainfuck, 49 byte
Dato che non ci sono variabili in Brainfuck, ho usato solo input e output standard.
Il codice 32+
deve essere interpretato come 32 +
s dall'interprete. Sostituiscili semplicemente se l'interprete non supporta RLE.
>,[32->+<[16-<[>++<-]>[<+>-]>-<]>[<<.[-]>>-]<,]<.
Versione estesa (non RLE): (91 byte)
>,[-------------------------------->+<[----------------<[>++<-]>[<+>-]>-<]>[<<.[-]>>-]<,]<.
Il codice presuppone che EOF sia codificato come 0.
Spiegazione
Viene utilizzato il seguente layout:
+---+---+------+
| x | a | flag |
+---+---+------+
Dove si x
trova il byte ASCII da stampare, a
è un carattere dall'input standard ed flag
è 1 se a
era uno spazio.
>, 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