Run Length Encoded Brainfuck, 49 ไบต์
เนื่องจากไม่มีตัวแปรใน Brainfuck ฉันจึงใช้อินพุตและเอาต์พุตมาตรฐานแทน
รหัส32+
ควรถูกตีความเป็น 32 +
วินาทีโดยล่าม เพียงแทนที่ด้วยตนเองหากล่ามของคุณไม่รองรับ RLE
>,[32->+<[16-<[>++<-]>[<+>-]>-<]>[<<.[-]>>-]<,]<.
รุ่นที่ขยาย (ไม่ใช่ RLE): (91 ไบต์)
>,[-------------------------------->+<[----------------<[>++<-]>[<+>-]>-<]>[<<.[-]>>-]<,]<.
รหัสจะถือว่า EOF ถูกเข้ารหัสเป็น 0
คำอธิบาย
ใช้เค้าโครงต่อไปนี้:
+---+---+------+
| x | a | flag |
+---+---+------+
โดยx
ที่ ASCII ไบต์ที่จะพิมพ์a
คืออักขระจากอินพุตมาตรฐานและflag
คือ 1 ถ้าa
เป็นช่องว่าง
>, 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