Run Brainfuck encodé en longueur, 49 octets
Puisqu'il n'y a pas de variables dans Brainfuck, j'ai juste utilisé des entrées et sorties standard à la place.
Le code 32+
doit être interprété comme 32 +
s par l'interprète. Remplacez-les simplement manuellement si votre interprète ne prend pas en charge RLE.
>,[32->+<[16-<[>++<-]>[<+>-]>-<]>[<<.[-]>>-]<,]<.
Version étendue (non RLE): (91 octets)
>,[-------------------------------->+<[----------------<[>++<-]>[<+>-]>-<]>[<<.[-]>>-]<,]<.
Le code suppose que EOF est codé comme 0.
Explication
La disposition suivante est utilisée:
+---+---+------+
| x | a | flag |
+---+---+------+
Où x
est l'octet ASCII à imprimer, a
est le caractère a de l'entrée standard et flag
est 1 si a
était un espace.
>, 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