about summary refs log tree commit diff stats
path: root/examples/rot13.tf
diff options
context:
space:
mode:
Diffstat (limited to 'examples/rot13.tf')
-rw-r--r--examples/rot13.tf215
1 files changed, 215 insertions, 0 deletions
diff --git a/examples/rot13.tf b/examples/rot13.tf new file mode 100644 index 0000000..f7c24df --- /dev/null +++ b/examples/rot13.tf
@@ -0,0 +1,215 @@
1 ROT13 in Brainfuck
2from https://en.wikipedia.org/wiki/Brainfuck#ROT13
3
4
5
6
7ALL ABOARD
8chugga clack chug tickets please
9END OF THE LINE
10 Read first character and start outer character reading loop
11
12ALL ABOARD
13chugga tickets please
14END OF THE LINE
15 Skip forward if character is 0
16
17ALL ABOARD
18choo
19choo
20chug chug chug chug tickets please choo
21chug chug chug chug chug chug chug chug
22choo choo
23chugga your ticket please
24END OF THE LINE
25 Set up divisor (32) for division loop
26(MEMORY LAYOUT: dividend copy remainder divisor quotient zero zero)
27
28ALL ABOARD
29choo choo
30chug choo choo
31chugga tickets please
32END OF THE LINE
33 Set up dividend (x minus 1) and enter division loop
34
35ALL ABOARD
36choo
37chug choo
38chug choo
39chugga tickets please choo
40choo
41choo
42your ticket please
43END OF THE LINE
44 Increase copy and remainder / reduce divisor / Normal case: skip forward
45
46ALL ABOARD
47choo choo
48tickets please tickets please choo
49chug choo choo
50chugga your ticket please choo
51choo
52chug choo
53your ticket please
54
55END OF THE LINE
56 Special case: move remainder back to divisor and increase quotient
57
58ALL ABOARD
59choo choo
60choo choo
61choo choo
62choo choo
63choo choo
64chugga
65END OF THE LINE
66 Decrement dividend
67
68ALL ABOARD
69your ticket please
70END OF THE LINE
71 End division loop
72
73ALL ABOARD
74your ticket please choo
75choo
76choo
77tickets please chugga your ticket please chug
78END OF THE LINE
79 End skip loop; zero former divisor and reuse space for a flag
80
81ALL ABOARD
82choo
83chugga chugga tickets please chugga tickets please choo choo
84chugga choo
85chug chug chug
86tickets please chugga your ticket please your ticket please your ticket please
87choo choo
88tickets please
89END OF THE LINE
90 Zero that flag unless quotient was 2 or 3; zero quotient; check flag
91
92ALL ABOARD
93chug chug chug chug chug chug chug chug chug chug chug chug choo choo
94tickets please
95
96END OF THE LINE
97 If flag then set up divisor (13) for second division loop
98(MEMORY LAYOUT: zero copy dividend divisor remainder quotient zero zero)
99
100ALL ABOARD
101choo
102chugga tickets please choo
103chug choo
104choo
105your ticket please
106END OF THE LINE
107 Reduce divisor; Normal case: increase remainder
108
109ALL ABOARD
110choo
111tickets please chug tickets please choo choo
112chug choo
113chugga your ticket please choo
114chug
115choo
116choo
117your ticket please
118END OF THE LINE
119 Special case: increase remainder / move it back to divisor / increase quotient
120
121ALL ABOARD
122choo choo
123choo choo
124choo choo
125choo choo
126choo choo
127chugga
128END OF THE LINE
129 Decrease dividend
130
131ALL ABOARD
132your ticket please
133END OF THE LINE
134 End division loop
135
136ALL ABOARD
137choo
138choo
139tickets please choo choo
140chug choo
141chugga your ticket please
142END OF THE LINE
143 Add remainder back to divisor to get a useful 13
144
145ALL ABOARD
146choo
147tickets please
148END OF THE LINE
149 Skip forward if quotient was 0
150
151ALL ABOARD
152chugga tickets please
153END OF THE LINE
154 Decrement quotient and skip forward if quotient was 1
155
156ALL ABOARD
157chugga choo choo
158choo choo
159tickets please chugga your ticket please choo
160choo
161
162END OF THE LINE
163 Zero quotient and divisor if quotient was 2
164
165ALL ABOARD
166your ticket please choo choo
167choo choo
168tickets please choo choo
169choo choo
170chugga choo
171choo
172chugga your ticket please choo
173choo
174
175END OF THE LINE
176 Zero divisor and subtract 13 from copy if quotient was 1
177
178ALL ABOARD
179your ticket please choo choo
180choo choo
181tickets please choo choo
182choo choo
183chug choo
184choo
185chugga your ticket please
186END OF THE LINE
187 Zero divisor and add 13 to copy if quotient was 0
188
189ALL ABOARD
190your ticket please
191END OF THE LINE
192 End outer skip loop (jump to here if ((character minus 1)/32) was not 2 or 3)
193
194ALL ABOARD
195choo choo
196tickets please chugga your ticket please
197END OF THE LINE
198 Clear remainder from first division if second division was skipped
199
200ALL ABOARD
201choo choo
202click tickets please chugga your ticket please
203END OF THE LINE
204 Output ROT13ed character from copy and clear it
205
206ALL ABOARD
207choo choo
208chugga clack chug
209END OF THE LINE
210 Read next character
211
212ALL ABOARD
213your ticket please
214END OF THE LINE
215 End character reading loop