summaryrefslogtreecommitdiff
path: root/src/toys/tabloid/js/samples.js
blob: dc7bd585e3b000737612d2fc92908aba65b41395 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
const CONS_SNIPPET = [
  "DISCOVER HOW TO cons WITH a, b",
  "RUMOR HAS IT",
  "    DISCOVER HOW TO retrieve WITH is_first",
  "    RUMOR HAS IT",
  "        WHAT IF is_first IS ACTUALLY TOTALLY RIGHT",
  "            SHOCKING DEVELOPMENT a",
  "        LIES!",
  "            SHOCKING DEVELOPMENT b",
  "    END OF STORY",
  "    SHOCKING DEVELOPMENT retrieve",
  "END OF STORY",
].join('\n');

const BINARY_INORDER_TRAVERSAL_PROGRAM = [
  CONS_SNIPPET,
  '',
  "DISCOVER HOW TO in_order_traverse WITH node, is_dual_ptr",
  "RUMOR HAS IT",
  "    EXPERTS CLAIM left TO BE node OF TOTALLY RIGHT",
  "    EXPERTS CLAIM right TO BE node OF COMPLETELY WRONG",
  '',
  "    WHAT IF is_dual_ptr IS ACTUALLY COMPLETELY WRONG",
  "      RUMOR HAS IT",
  "        YOU WON'T WANT TO MISS left",
  "        WHAT IF right IS ACTUALLY COMPLETELY WRONG",
  "            1",
  "        LIES!",
  "            in_order_traverse OF right, TOTALLY RIGHT",
  "      END OF STORY",
  "    LIES!",
  "      RUMOR HAS IT",
  "        WHAT IF left IS ACTUALLY COMPLETELY WRONG",
  "            1",
  "        LIES!",
  "            in_order_traverse OF left, COMPLETELY WRONG",
  '',
  "        WHAT IF right IS ACTUALLY COMPLETELY WRONG",
  "            1",
  "        LIES!",
  "            in_order_traverse OF right, COMPLETELY WRONG",
  "      END OF STORY",
  "END OF STORY",
  '',
  "EXPERTS CLAIM l TO BE cons OF 1, COMPLETELY WRONG",
  "EXPERTS CLAIM r TO BE cons OF 3, COMPLETELY WRONG",
  "EXPERTS CLAIM root TO BE cons OF l, r",
  "EXPERTS CLAIM head TO BE cons OF 2, root",
  '',
  "in_order_traverse OF head, COMPLETELY WRONG",
  '',
  "PLEASE LIKE AND SUBSCRIBE",
].join('\n');

const MERGE_SORT_PROGRAM = [
  CONS_SNIPPET,
  '',
  "DISCOVER HOW TO print WITH x",
  "RUMOR HAS IT",
  "    YOU WON'T WANT TO MISS x",
  "END OF STORY",
  '',
  "DISCOVER HOW TO map WITH fn, list",
  "RUMOR HAS IT",
  "    WHAT IF list IS ACTUALLY COMPLETELY WRONG",
  "        SHOCKING DEVELOPMENT COMPLETELY WRONG",
  "    LIES!",
  "    RUMOR HAS IT",
  "        EXPERTS CLAIM car TO BE list OF TOTALLY RIGHT",
  "        EXPERTS CLAIM cdr TO BE list OF COMPLETELY WRONG",
  "        EXPERTS CLAIM new_car TO BE fn OF car",
  "        EXPERTS CLAIM rest_mapped TO BE map OF fn, cdr",
  '',
  "        SHOCKING DEVELOPMENT cons OF new_car, rest_mapped",
  "    END OF STORY",
  "END OF STORY",
  '',
  "DISCOVER HOW TO reduce WITH fn, list, accumulator",
  "RUMOR HAS IT",
  "    WHAT IF list IS ACTUALLY COMPLETELY WRONG",
  "        SHOCKING DEVELOPMENT accumulator",
  "    LIES!",
  "    RUMOR HAS IT",
  "        EXPERTS CLAIM car TO BE list OF TOTALLY RIGHT",
  "        EXPERTS CLAIM cdr TO BE list OF COMPLETELY WRONG",
  "        EXPERTS CLAIM added_accumulator TO BE fn OF car, accumulator",
  '',
  "        SHOCKING DEVELOPMENT reduce OF fn, cdr, added_accumulator",
  "    END OF STORY",
  "END OF STORY",
  '',
  "DISCOVER HOW TO str_join_reducer WITH element, accumulator",
  "RUMOR HAS IT",
  "    EXPERTS CLAIM added_comma TO BE element PLUS ', '",
  "    SHOCKING DEVELOPMENT added_comma PLUS accumulator",
  "END OF STORY",
  '',
  "DISCOVER HOW TO join WITH list",
  "RUMOR HAS IT",
  "    SHOCKING DEVELOPMENT reduce OF str_join_reducer, list, ''",
  "END OF STORY",
  '',
  "DISCOVER HOW TO append WITH n, m",
  "RUMOR HAS IT",
  "    WHAT IF n IS ACTUALLY COMPLETELY WRONG",
  "        SHOCKING DEVELOPMENT m",
  "    LIES!",
  "    RUMOR HAS IT",
  "        EXPERTS CLAIM car_n TO BE n OF TOTALLY RIGHT",
  "        EXPERTS CLAIM cdr_n TO BE n OF COMPLETELY WRONG",
  "        EXPERTS CLAIM appended TO BE append OF cdr_n, m",
  '',
  "        SHOCKING DEVELOPMENT cons OF car_n, appended",
  "    END OF STORY",
  "END OF STORY",
  '',
  "DISCOVER HOW TO reverse WITH l",
  "RUMOR HAS IT",
  "    WHAT IF l IS ACTUALLY COMPLETELY WRONG",
  "        SHOCKING DEVELOPMENT COMPLETELY WRONG",
  "    LIES!",
  "        1",
  '',
  "    EXPERTS CLAIM car TO BE l OF TOTALLY RIGHT",
  "    EXPERTS CLAIM cdr TO BE l OF COMPLETELY WRONG",
  "    EXPERTS CLAIM reversed_cdr TO BE reverse OF cdr",
  "    EXPERTS CLAIM car_cons TO BE cons OF car, COMPLETELY WRONG",
  '',
  "    SHOCKING DEVELOPMENT append OF reversed_cdr, car_cons",
  "END OF STORY",
  '',
  "DISCOVER HOW TO merge WITH x, y",
  "RUMOR HAS IT",
  "    WHAT IF x IS ACTUALLY COMPLETELY WRONG",
  "        SHOCKING DEVELOPMENT y",
  "    LIES!",
  "        1",
  '',
  "    WHAT IF y IS ACTUALLY COMPLETELY WRONG",
  "    RUMOR HAS IT",
  "        WHAT IF x IS ACTUALLY COMPLETELY WRONG",
  "            SHOCKING DEVELOPMENT COMPLETELY WRONG",
  "        LIES!",
  "            SHOCKING DEVELOPMENT x",
  "    END OF STORY",
  "    LIES!",
  "        1",
  '',
  "    EXPERTS CLAIM car_x TO BE x OF TOTALLY RIGHT",
  "    EXPERTS CLAIM car_y TO BE y OF TOTALLY RIGHT",
  "    EXPERTS CLAIM cdr_x TO BE x OF COMPLETELY WRONG",
  "    EXPERTS CLAIM cdr_y TO BE y OF COMPLETELY WRONG",
  '',
  "    EXPERTS CLAIM x_gt_y TO BE car_x BEATS car_y",
  '',
  "    WHAT IF x_gt_y IS ACTUALLY TOTALLY RIGHT",
  "    RUMOR HAS IT",
  "        EXPERTS CLAIM rest_x_merge_y TO BE merge OF cdr_x, y",
  "        SHOCKING DEVELOPMENT cons OF car_x, rest_x_merge_y",
  "    END OF STORY",
  "    LIES!",
  "    RUMOR HAS IT",
  "        EXPERTS CLAIM x_merge_rest_y TO BE merge OF x, cdr_y",
  "        SHOCKING DEVELOPMENT cons OF car_y, x_merge_rest_y",
  "    END OF STORY",
  "END OF STORY",
  '',
  "DISCOVER HOW TO split_middle_helper WITH slow, fast, mid_to_head",
  "RUMOR HAS IT",
  "    WHAT IF fast IS ACTUALLY COMPLETELY WRONG",
  "    RUMOR HAS IT",
  "        EXPERTS CLAIM head_to_mid TO BE reverse OF mid_to_head",
  "        SHOCKING DEVELOPMENT cons OF head_to_mid, slow",
  "    END OF STORY",
  "    LIES!",
  "        1",
  '',
  "    EXPERTS CLAIM fast_cdr TO BE fast OF COMPLETELY WRONG",
  "    EXPERTS CLAIM slow_car TO BE slow OF TOTALLY RIGHT",
  "    EXPERTS CLAIM slow_cdr TO BE slow OF COMPLETELY WRONG",
  '',
  "    WHAT IF fast_cdr IS ACTUALLY COMPLETELY WRONG",
  "    RUMOR HAS IT",
  "        EXPERTS CLAIM mid_to_head_plus_slow TO BE cons OF slow_car, mid_to_head",
  "        EXPERTS CLAIM head_to_mid_plus_slow TO BE reverse OF mid_to_head_plus_slow",
  '',
  "        SHOCKING DEVELOPMENT cons OF head_to_mid_plus_slow, slow_cdr",
  "    END OF STORY",
  "    LIES!",
  "        1",
  '',
  "    EXPERTS CLAIM fast_cddr TO BE fast_cdr OF COMPLETELY WRONG",
  "    EXPERTS CLAIM slow_car_mid_to_head TO BE cons OF slow_car, mid_to_head",
  '',
  "    SHOCKING DEVELOPMENT split_middle_helper OF slow_cdr, fast_cddr, slow_car_mid_to_head",
  "END OF STORY",
  '',
  "DISCOVER HOW TO split_middle WITH start",
  "RUMOR HAS IT",
  "    EXPERTS CLAIM cdr TO BE start OF COMPLETELY WRONG",
  '',
  "    SHOCKING DEVELOPMENT split_middle_helper OF start, cdr, COMPLETELY WRONG",
  "END OF STORY",
  '',
  "DISCOVER HOW TO sort WITH root",
  "RUMOR HAS IT",
  "    WHAT IF root IS ACTUALLY COMPLETELY WRONG",
  "        SHOCKING DEVELOPMENT root",
  "    LIES!",
  "        1",
  '',
  "    EXPERTS CLAIM root_cdr TO BE root OF COMPLETELY WRONG",
  "    WHAT IF root_cdr IS ACTUALLY COMPLETELY WRONG",
  "        SHOCKING DEVELOPMENT root",
  "    LIES!",
  "        1",
  '',
  "    EXPERTS CLAIM left_right_cons_cell TO BE split_middle OF root",
  "    EXPERTS CLAIM left TO BE left_right_cons_cell OF TOTALLY RIGHT",
  "    EXPERTS CLAIM right TO BE left_right_cons_cell OF COMPLETELY WRONG",
  "    EXPERTS CLAIM left_s TO BE sort OF left",
  "    EXPERTS CLAIM right_s TO BE sort OF right",
  '',
  "    SHOCKING DEVELOPMENT merge OF left_s, right_s",
  "END OF STORY",
  '',
  "EXPERTS CLAIM a_3 TO BE cons OF 3, COMPLETELY WRONG",
  "EXPERTS CLAIM a_2 TO BE cons OF 1, a_3",
  "EXPERTS CLAIM a_1 TO BE cons OF -2, a_2",
  "EXPERTS CLAIM a_0 TO BE cons OF 5, a_1",
  "EXPERTS CLAIM b_3 TO BE cons OF 2, a_0",
  "EXPERTS CLAIM b_2 TO BE cons OF 7, b_3",
  "EXPERTS CLAIM b_1 TO BE cons OF 3, b_2",
  "EXPERTS CLAIM b_0 TO BE cons OF -1, b_1",
  '',
  "EXPERTS CLAIM b_sorted TO BE sort OF b_0",
  '',
  "YOU WON'T WANT TO MISS join OF b_sorted",
  '',
  "PLEASE LIKE AND SUBSCRIBE",
].join('\n');

export const SAMPLE_PROGRAMS = [
  {
    id: 'fibonacci',
    label: 'Fibonacci',
    code: [
      "DISCOVER HOW TO fibonacci WITH a, b, n",
      "RUMOR HAS IT",
      "    WHAT IF n SMALLER THAN 1",
      "        SHOCKING DEVELOPMENT b",
      "    LIES! RUMOR HAS IT",
      "        YOU WON'T WANT TO MISS b",
      "        SHOCKING DEVELOPMENT",
      "            fibonacci OF b, a PLUS b, n MINUS 1",
      "    END OF STORY",
      "END OF STORY",
      "",
      "EXPERTS CLAIM limit TO BE 10",
      "",
      "fibonacci OF 0, 1, limit",
      "",
      "PLEASE LIKE AND SUBSCRIBE",
    ].join('\n'),
  },
  {
    id: 'countdown',
    label: 'Countdown',
    code: [
      "EXPERTS CLAIM start TO BE 4",
      "YOU WON'T WANT TO MISS 't minus 5...'",
      "",
      "DISCOVER HOW TO countdown WITH current",
      "RUMOR HAS IT",
      "    WHAT IF current SMALLER THAN 1 RUMOR HAS IT",
      "        SHOCKING DEVELOPMENT 'Blastoff!'",
      "    END OF STORY",
      "    LIES! RUMOR HAS IT",
      "        YOU WON'T WANT TO MISS current",
      "        SHOCKING DEVELOPMENT countdown OF current MINUS 1",
      "    END OF STORY",
      "END OF STORY",
      "",
      "YOU WON'T WANT TO MISS countdown OF start",
      "",
      "PLEASE LIKE AND SUBSCRIBE",
    ].join('\n'),
  },
  {
    id: 'hello',
    label: 'Hello!',
    code: [
      "YOU WON'T WANT TO MISS ('Hello, ' PLUS (LATEST NEWS ON 'What is your name?')) PLUS '!'",
      "",
      "PLEASE LIKE AND SUBSCRIBE",
    ].join('\n'),
  },
  {
    id: 'binary-inorder-traversal',
    label: 'Binary tree in-order traversal',
    code: BINARY_INORDER_TRAVERSAL_PROGRAM,
  },
  {
    id: 'merge-sort',
    label: 'Merge sort linked list',
    code: MERGE_SORT_PROGRAM,
  },
];