about summary refs log tree commit diff stats
path: root/ext
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2023-11-05 19:43:23 -0500
committerStar Rauchenberger <fefferburbia@gmail.com>2023-11-05 19:43:23 -0500
commit5ebd720812764a0850af8c97478117ea872de24f (patch)
treebb1cd2d54fcf8810d7ed4a0599be3dbe7cd3984d /ext
parent9a6abe3ca3fafa1eaedadbb3ac2be65d299d3ca5 (diff)
downloadwittle-5ebd720812764a0850af8c97478117ea872de24f.tar.gz
wittle-5ebd720812764a0850af8c97478117ea872de24f.tar.bz2
wittle-5ebd720812764a0850af8c97478117ea872de24f.zip
some difficulty rebalancing
Diffstat (limited to 'ext')
-rw-r--r--ext/wittle_generator/wittle_generator.cpp3151
1 files changed, 1513 insertions, 1638 deletions
diff --git a/ext/wittle_generator/wittle_generator.cpp b/ext/wittle_generator/wittle_generator.cpp index 7951d15..1a3d287 100644 --- a/ext/wittle_generator/wittle_generator.cpp +++ b/ext/wittle_generator/wittle_generator.cpp
@@ -1,5 +1,7 @@
1#include <functional>
1#include <iostream> 2#include <iostream>
2#include <rice/rice.hpp> 3#include <rice/rice.hpp>
4#include <vector>
3 5
4#include "Generate.h" 6#include "Generate.h"
5#include "Random.h" 7#include "Random.h"
@@ -19,1668 +21,1541 @@ void MakeSecretSymmetryGrid(Generate& generator) {
19} 21}
20 22
21Rice::Object wittle_generator_generate_easy(Rice::Object /* self */) { 23Rice::Object wittle_generator_generate_easy(Rice::Object /* self */) {
24 static std::vector<std::function<void(Generate&)>> generator_fns{
25 [](Generate& generator) {
26 generator.setSymbol(Decoration::Start, 2 * 2, 2 * 2);
27 generator.setSymbol(Decoration::Exit, 4 * 2, 0);
28 generator.generate(
29 4, 4, {{{Decoration::Dot_Intersection, 25}, {Decoration::Gap, 2}}});
30 },
31 [](Generate& generator) {
32 generator.setSymbol(Decoration::Start, 0, 4 * 2);
33 generator.generate(4, 4,
34 {{{Decoration::Stone | Decoration::Color::Black, 7},
35 {Decoration::Stone | Decoration::Color::White, 5},
36 {Decoration::Exit, 1}}});
37 },
38 [](Generate& generator) {
39 generator.setFlag(Generate::RegularStartEnd);
40 generator.setSymmetry(Panel::Rotational);
41 generator.generate(6, 6, {{{Decoration::Gap, 15}}});
42 },
43 [](Generate& generator) {
44 generator.setFlag(Generate::RegularStartEnd);
45 generator.setSymmetry(Panel::Vertical);
46 generator.generate(5, 8, {{{Decoration::Gap, 15}}});
47 },
48 [](Generate& generator) {
49 generator.setFlag(Generate::RegularStartEnd);
50 generator.setSymmetry(Panel::Horizontal);
51 generator.generate(5, 5, {{{Decoration::Dot, 7}}});
52 },
53 [](Generate& generator) {
54 generator.setFlag(Generate::RegularStartEnd);
55 generator.setSymmetry(Panel::Rotational);
56 generator.generate(5, 5, {{{Decoration::Dot, 6}}});
57 },
58 [](Generate& generator) {
59 generator.setFlag(Generate::RegularStartEnd);
60 generator.setSymmetry(Panel::Rotational);
61 generator.generate(5, 5,
62 {{{Decoration::Dot | Decoration::Color::Blue, 1},
63 {Decoration::Dot | Decoration::Color::Yellow, 2},
64 {Decoration::Dot, 4}}});
65 },
66 [](Generate& generator) {
67 generator.setFlag(Generate::RegularStartEnd);
68 generator.generate(
69 4, 4, {{{Decoration::Poly | Decoration::Color::Yellow, 2}}});
70 },
71 [](Generate& generator) {
72 generator.setFlag(Generate::FullGaps);
73 generator.setFlag(Generate::StartEdgeOnly);
74 generator.generate(5, 5,
75 {{{Decoration::Gap, 16},
76 {Decoration::Dot, 10},
77 {Decoration::Exit, 1},
78 {Decoration::Start, 1}}});
79 },
80 [](Generate& generator) {
81 generator.setFlag(Generate::RegularStartEnd);
82 generator.generate(3, 3,
83 {{{Decoration::Eraser | Decoration::Color::Green, 1},
84 {Decoration::Dot, 8}}});
85 },
86 [](Generate& generator) {
87 generator.setFlag(Generate::RegularStartEnd);
88 generator.generate(
89 4, 4,
90 {{{Decoration::Stone | Decoration::Color::White, 8},
91 {Decoration::Stone | Decoration::Color::Black, 4},
92 {Decoration::Eraser | Decoration::Color::Green, 1}}});
93 },
94 [](Generate& generator) {
95 generator.setFlag(Generate::RegularStartEnd);
96 generator.generate(
97 4, 4,
98 {{{Decoration::Stone | Decoration::Color::Red, 4},
99 {Decoration::Stone | Decoration::Color::White, 4},
100 {Decoration::Stone | Decoration::Color::Black, 3},
101 {Decoration::Eraser | Decoration::Color::Green, 1}}});
102 },
103 [](Generate& generator) {
104 generator.setFlag(Generate::RegularStartEnd);
105 generator.setFlag(Generate::RequireCombineShapes);
106 generator.generate(4, 4,
107 {{{Decoration::Poly | Decoration::Color::Yellow, 1},
108 {Decoration::Poly | Decoration::Color::Yellow |
109 Decoration::Can_Rotate,
110 1},
111 {Decoration::Gap, 5}}});
112 },
113 [](Generate& generator) {
114 generator.setFlag(Generate::RegularStartEnd);
115 generator.generate(
116 3, 3,
117 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
118 {Decoration::Eraser | Decoration::Color::White, 1}}});
119 },
120 [](Generate& generator) {
121 generator.setFlag(Generate::FullGaps);
122 generator.generate(4, 4,
123 {{{Decoration::Gap, 8},
124 {Decoration::Dot_Intersection, 10},
125 {Decoration::Exit, 1},
126 {Decoration::Start, 3}}});
127 },
128 [](Generate& generator) {
129 generator.generate(5, 5,
130 {{{Decoration::Exit, 1},
131 {Decoration::Stone | Decoration::Color::Black, 11},
132 {Decoration::Stone | Decoration::Color::White, 8},
133 {Decoration::Start, 3}}});
134 },
135 [](Generate& generator) {
136 generator.setFlag(Generate::RegularStartEnd);
137 generator.generate(4, 4,
138 {{{Decoration::Star | Decoration::Color::Green, 6},
139 {Decoration::Star | Decoration::Color::Orange, 5},
140 {Decoration::Eraser | Decoration::Orange, 1}}});
141 },
142 [](Generate& generator) {
143 generator.setFlag(Generate::RegularStartEnd);
144 generator.generate(4, 4,
145 {{{Decoration::Star | Decoration::Color::Orange, 6},
146 {Decoration::Star | Decoration::Color::Magenta, 5},
147 {Decoration::Star | Decoration::Color::Green, 4},
148 {Decoration::Eraser | Decoration::Magenta, 1}}});
149 },
150 [](Generate& generator) {
151 generator.setFlag(Generate::RegularStartEnd);
152 generator.generate(4, 4,
153 {{{Decoration::Star | Decoration::Color::Magenta, 6},
154 {Decoration::Poly | Decoration::Color::Yellow, 2},
155 {Decoration::Eraser | Decoration::White, 1}}});
156 },
157 [](Generate& generator) {
158 generator.setFlag(Generate::RegularStartEnd);
159 generator.generate(4, 4,
160 {{{Decoration::Star | Decoration::Color::Magenta, 5},
161 {Decoration::Poly | Decoration::Color::Yellow, 2},
162 {Decoration::Eraser | Decoration::White, 1}}});
163 },
164 [](Generate& generator) {
165 generator.setFlag(Generate::TreehouseLayout);
166 generator.generate(4, 4,
167 {{{Decoration::Star | Decoration::Color::Orange, 4},
168 {Decoration::Gap, 10}}});
169 },
170 [](Generate& generator) {
171 generator.setFlag(Generate::RegularStartEnd);
172 generator.generate(5, 5,
173 {{{Decoration::Star | Decoration::Color::Orange, 10},
174 {Decoration::Gap, 3}}});
175 },
176 [](Generate& generator) {
177 generator.setFlag(Generate::TreehouseLayout);
178 generator.generate(4, 4,
179 {{{Decoration::Star | Decoration::Color::Orange, 4},
180 {Decoration::Star | Decoration::Color::Magenta, 4},
181 {Decoration::Gap, 8}}});
182 },
183 [](Generate& generator) {
184 generator.setFlag(Generate::TreehouseLayout);
185 generator.generate(4, 4,
186 {{{Decoration::Star | Decoration::Color::Orange, 4},
187 {Decoration::Star | Decoration::Color::Magenta, 2},
188 {Decoration::Star | Decoration::Color::Green, 2},
189 {Decoration::Gap, 8}}});
190 },
191 [](Generate& generator) {
192 generator.setFlag(Generate::TreehouseLayout);
193 generator.generate(
194 4, 3,
195 {{{Decoration::Star | Decoration::Color::Orange, 6},
196 {Decoration::Star | Decoration::Color::Magenta, 4},
197 {Decoration::Star | Decoration::Color::Green, 2}}});
198 },
199 [](Generate& generator) {
200 generator.setFlag(Generate::TreehouseLayout);
201 generator.setFlag(Generate::FullGaps);
202 generator.generate(4, 4,
203 {{{Decoration::Star | Decoration::Color::Magenta, 6},
204 {Decoration::Dot_Intersection, 6},
205 {Decoration::Gap, 3}}});
206 },
207 [](Generate& generator) {
208 generator.setFlag(Generate::TreehouseLayout);
209 generator.generate(
210 4, 4,
211 {{{Decoration::Star | Decoration::Color::Magenta, 4},
212 {Decoration::Stone | Decoration::Color::Black, 4},
213 {Decoration::Stone | Decoration::Color::White, 4}}});
214 },
215 [](Generate& generator) {
216 generator.setFlag(Generate::TreehouseLayout);
217 generator.generate(
218 3, 3,
219 {{{Decoration::Star | Decoration::Color::Black, 1},
220 {Decoration::Stone | Decoration::Color::Black, 2},
221 {Decoration::Stone | Decoration::Color::White, 2}}});
222 },
223 [](Generate& generator) {
224 generator.setFlag(Generate::TreehouseLayout);
225 generator.generate(
226 4, 4,
227 {{{Decoration::Star | Decoration::Color::White, 2},
228 {Decoration::Stone | Decoration::Color::Black, 2},
229 {Decoration::Stone | Decoration::Color::White, 2},
230 {Decoration::Stone | Decoration::Color::Purple, 2}}});
231 },
232 [](Generate& generator) {
233 generator.setFlag(Generate::TreehouseLayout);
234 generator.generate(
235 4, 4,
236 {{{Decoration::Poly | Decoration::Color::Orange, 2},
237 {Decoration::Star | Decoration::Color::Magenta, 4}}});
238 },
239 [](Generate& generator) {
240 generator.setFlag(Generate::TreehouseLayout);
241 generator.generate(
242 4, 5,
243 {{{Decoration::Stone | Decoration::Color::White, 8},
244 {Decoration::Stone | Decoration::Color::Black, 8},
245 {Decoration::Eraser | Decoration::Color::White, 2}}});
246 },
247 [](Generate& generator) {
248 generator.setFlag(Generate::TreehouseLayout);
249 generator.generate(4, 5,
250 {{{Decoration::Poly | Decoration::Color::Orange, 2},
251 {Decoration::Stone | Decoration::Color::White, 4},
252 {Decoration::Stone | Decoration::Color::Black, 4},
253 {Decoration::Gap, 4}}});
254 },
255 [](Generate& generator) {
256 generator.setFlag(Generate::RegularStartEnd);
257 generator.generate(
258 4, 4,
259 {{{Decoration::Dot_Intersection, 25},
260 {Decoration::Poly | Decoration::Color::Yellow, 2}}});
261 },
262 [](Generate& generator) {
263 generator.setFlag(Generate::RegularStartEnd);
264 generator.generate(
265 4, 4,
266 {{{Decoration::Dot_Intersection, 25},
267 {Decoration::Poly | Decoration::Color::Yellow |
268 Decoration::Can_Rotate,
269 2},
270 {Decoration::Eraser | Decoration::Color::White, 1}}});
271 },
272 [](Generate& generator) {
273 generator.setFlag(Generate::RegularStartEnd);
274 generator.setSymmetry(Panel::Rotational);
275 generator.generate(
276 5, 5,
277 {{{Decoration::Stone | Decoration::Color::Black, 6},
278 {Decoration::Stone | Decoration::Color::White, 6}}});
279 },
280 [](Generate& generator) {
281 generator.setFlag(Generate::RegularStartEnd);
282 generator.setSymmetry(Panel::Rotational);
283 generator.generate(5, 5,
284 {{{Decoration::Stone | Decoration::Color::Black, 5},
285 {Decoration::Stone | Decoration::Color::White, 5},
286 {Decoration::Dot, 3}}});
287 },
288 [](Generate& generator) {
289 generator.setFlag(Generate::RegularStartEnd);
290 generator.setFlag(Generate::SplitShapes);
291 generator.generate(4, 4,
292 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
293 {Decoration::Gap, 8}}});
294 },
295 [](Generate& generator) {
296 generator.setFlag(Generate::RegularStartEnd);
297 generator.setFlag(Generate::BigShapes);
298 generator.generate(5, 5,
299 {{{Decoration::Poly | Decoration::Color::Yellow, 2},
300 {Decoration::Gap, 12}}});
301 },
302 [](Generate& generator) {
303 generator.setFlag(Generate::RegularStartEnd);
304 generator.setFlag(Generate::DisconnectShapes);
305 generator.generate(
306 3, 3, {{{Decoration::Poly | Decoration::Color::Yellow, 2}}});
307 },
308 [](Generate& generator) {
309 generator.setFlag(Generate::RegularStartEnd);
310 generator.setFlag(Generate::DisconnectShapes);
311 generator.setFlag(Generate::BigShapes);
312 generator.generate(
313 4, 4, {{{Decoration::Poly | Decoration::Color::Yellow, 2}}});
314 },
315 [](Generate& generator) {
316 generator.setFlag(Generate::RegularStartEnd);
317 generator.setFlag(Generate::RequireCombineShapes);
318 generator.setFlag(Generate::DisableCancelShapes);
319 generator.generate(3, 3,
320 {{{Decoration::Poly | Decoration::Color::Yellow, 2},
321 {Decoration::Poly | Decoration::Negative |
322 Decoration::Color::Blue,
323 1}}});
324 },
325 [](Generate& generator) {
326 generator.setFlag(Generate::RegularStartEnd);
327 generator.setFlag(Generate::RequireCombineShapes);
328 generator.setFlag(Generate::DisableCancelShapes);
329 generator.generate(4, 4,
330 {{{Decoration::Poly | Decoration::Color::Yellow, 2},
331 {Decoration::Poly | Decoration::Negative |
332 Decoration::Color::Blue,
333 1}}});
334 },
335 [](Generate& generator) {
336 generator.setFlag(Generate::RegularStartEnd);
337 generator.setFlag(Generate::BigShapes);
338 generator.setFlag(Generate::DisableCancelShapes);
339 generator.generate(4, 4,
340 {{{Decoration::Poly | Decoration::Color::Yellow, 2},
341 {Decoration::Poly | Decoration::Negative |
342 Decoration::Color::Blue,
343 1}}});
344 },
345 [](Generate& generator) {
346 generator.setFlag(Generate::RegularStartEnd);
347 generator.setFlag(Generate::RequireCancelShapes);
348 generator.generate(4, 4,
349 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
350 {Decoration::Poly | Decoration::Negative |
351 Decoration::Color::Blue,
352 2}}});
353 },
354 [](Generate& generator) {
355 generator.setFlag(Generate::RegularStartEnd);
356 generator.generate(
357 4, 4, {{{Decoration::Triangle | Decoration::Color::Orange, 6}}});
358 },
359 [](Generate& generator) {
360 generator.setFlag(Generate::TreehouseLayout);
361 generator.setFlag(Generate::LongPath);
362 generator.generate(
363 5, 4,
364 {{{Decoration::Star | Decoration::Color::Magenta, 6},
365 {Decoration::Stone | Decoration::Color::Orange, 4},
366 {Decoration::Stone | Decoration::Color::Green, 4}}});
367 },
368 [](Generate& generator) {
369 generator.setFlag(Generate::RegularStartEnd);
370 generator.generate(
371 4, 4,
372 {{{Decoration::Dot, 6},
373 {Decoration::Stone | Decoration::Color::Black, 3},
374 {Decoration::Stone | Decoration::Color::White, 3}}});
375 },
376 [](Generate& generator) {
377 generator.setFlag(Generate::RegularStartEnd);
378 generator.generate(
379 4, 4,
380 {{{Decoration::Dot, 4},
381 {Decoration::Stone | Decoration::Color::Black, 3},
382 {Decoration::Stone | Decoration::Color::White, 2},
383 {Decoration::Poly | Decoration::Color::Yellow, 1}}});
384 },
385 [](Generate& generator) {
386 generator.setSymmetry(Panel::Rotational);
387 generator.generate(5, 5,
388 {{{Decoration::Dot | Decoration::Color::Blue, 2},
389 {Decoration::Dot | Decoration::Color::Yellow, 2},
390 {Decoration::Dot, 4},
391 {Decoration::Start, 2},
392 {Decoration::Exit, 1}}});
393 },
394 };
395
22 Generate generator; 396 Generate generator;
23 397
24 int choice = Random::rand() % 48; 398 int choice = Random::rand() % generator_fns.size();
25 std::cout << "Generate EASY: choice " << std::dec << choice << std::endl; 399 std::cout << "Generate EASY: choice " << std::dec << choice << std::endl;
26 400
27 switch (choice) { 401 generator_fns.at(choice)(generator);
28 case 0: {
29 generator.setSymbol(Decoration::Start, 2 * 2, 2 * 2);
30 generator.setSymbol(Decoration::Exit, 4 * 2, 0);
31 generator.generate(
32 4, 4, {{{Decoration::Dot_Intersection, 25}, {Decoration::Gap, 2}}});
33 break;
34 }
35 case 1: {
36 generator.setSymbol(Decoration::Start, 0, 4 * 2);
37 generator.generate(4, 4,
38 {{{Decoration::Stone | Decoration::Color::Black, 7},
39 {Decoration::Stone | Decoration::Color::White, 5},
40 {Decoration::Exit, 1}}});
41 break;
42 }
43 case 2: {
44 generator.setFlag(Generate::RegularStartEnd);
45 generator.setSymmetry(Panel::Rotational);
46 generator.generate(6, 6, {{{Decoration::Gap, 15}}});
47 break;
48 }
49 case 3: {
50 generator.setFlag(Generate::RegularStartEnd);
51 generator.setSymmetry(Panel::Vertical);
52 generator.generate(5, 8, {{{Decoration::Gap, 15}}});
53 break;
54 }
55 case 4: {
56 generator.setFlag(Generate::RegularStartEnd);
57 generator.setSymmetry(Panel::Horizontal);
58 generator.generate(5, 5, {{{Decoration::Dot, 7}}});
59 break;
60 }
61 case 5: {
62 generator.setFlag(Generate::RegularStartEnd);
63 generator.setSymmetry(Panel::Rotational);
64 generator.generate(5, 5, {{{Decoration::Dot, 6}}});
65 break;
66 }
67 case 6: {
68 generator.setFlag(Generate::RegularStartEnd);
69 generator.setSymmetry(Panel::Rotational);
70 generator.generate(5, 5,
71 {{{Decoration::Dot | Decoration::Color::Blue, 1},
72 {Decoration::Dot | Decoration::Color::Yellow, 2},
73 {Decoration::Dot, 4}}});
74 break;
75 }
76 case 7: {
77 generator.setFlag(Generate::RegularStartEnd);
78 generator.generate(4, 4,
79 {{{Decoration::Poly | Decoration::Color::Yellow, 2}}});
80 break;
81 }
82 case 8: {
83 generator.setFlag(Generate::FullGaps);
84 generator.setFlag(Generate::StartEdgeOnly);
85 generator.generate(5, 5,
86 {{{Decoration::Gap, 16},
87 {Decoration::Dot, 10},
88 {Decoration::Exit, 1},
89 {Decoration::Start, 1}}});
90 break;
91 }
92 case 9: {
93 generator.setFlag(Generate::RegularStartEnd);
94 generator.generate(3, 3,
95 {{{Decoration::Eraser | Decoration::Color::Green, 1},
96 {Decoration::Dot, 8}}});
97 break;
98 }
99 case 10: {
100 generator.setFlag(Generate::RegularStartEnd);
101 generator.generate(
102 4, 4,
103 {{{Decoration::Stone | Decoration::Color::White, 8},
104 {Decoration::Stone | Decoration::Color::Black, 4},
105 {Decoration::Eraser | Decoration::Color::Green, 1}}});
106 break;
107 }
108 case 11: {
109 generator.setFlag(Generate::RegularStartEnd);
110 generator.generate(
111 4, 4,
112 {{{Decoration::Stone | Decoration::Color::Red, 4},
113 {Decoration::Stone | Decoration::Color::White, 4},
114 {Decoration::Stone | Decoration::Color::Black, 3},
115 {Decoration::Eraser | Decoration::Color::Green, 1}}});
116 break;
117 }
118 case 12: {
119 generator.setFlag(Generate::RegularStartEnd);
120 generator.setFlag(Generate::RequireCombineShapes);
121 generator.generate(4, 4,
122 {{{Decoration::Poly | Decoration::Color::Yellow, 1},
123 {Decoration::Poly | Decoration::Color::Yellow |
124 Decoration::Can_Rotate,
125 1},
126 {Decoration::Gap, 5}}});
127 break;
128 }
129 case 13: {
130 generator.setFlag(Generate::RegularStartEnd);
131 generator.generate(
132 3, 3,
133 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
134 {Decoration::Eraser | Decoration::Color::White, 1}}});
135 break;
136 }
137 case 14: {
138 generator.setFlag(Generate::FullGaps);
139 generator.generate(4, 4,
140 {{{Decoration::Gap, 8},
141 {Decoration::Dot_Intersection, 10},
142 {Decoration::Exit, 1},
143 {Decoration::Start, 3}}});
144 break;
145 }
146 case 15: {
147 generator.generate(5, 5,
148 {{{Decoration::Exit, 1},
149 {Decoration::Stone | Decoration::Color::Black, 11},
150 {Decoration::Stone | Decoration::Color::White, 8},
151 {Decoration::Start, 3}}});
152 break;
153 }
154 case 16: {
155 generator.setFlag(Generate::RegularStartEnd);
156 generator.generate(4, 4,
157 {{{Decoration::Star | Decoration::Color::Green, 6},
158 {Decoration::Star | Decoration::Color::Orange, 5},
159 {Decoration::Eraser | Decoration::Orange, 1}}});
160 break;
161 }
162 case 17: {
163 generator.setFlag(Generate::RegularStartEnd);
164 generator.generate(4, 4,
165 {{{Decoration::Star | Decoration::Color::Orange, 6},
166 {Decoration::Star | Decoration::Color::Magenta, 5},
167 {Decoration::Star | Decoration::Color::Green, 4},
168 {Decoration::Eraser | Decoration::Magenta, 1}}});
169 break;
170 }
171 case 18: {
172 generator.setFlag(Generate::RegularStartEnd);
173 generator.generate(4, 4,
174 {{{Decoration::Star | Decoration::Color::Magenta, 6},
175 {Decoration::Poly | Decoration::Color::Yellow, 2},
176 {Decoration::Eraser | Decoration::White, 1}}});
177 break;
178 }
179 case 19: {
180 generator.setFlag(Generate::RegularStartEnd);
181 generator.generate(4, 4,
182 {{{Decoration::Star | Decoration::Color::Magenta, 5},
183 {Decoration::Poly | Decoration::Color::Yellow, 2},
184 {Decoration::Eraser | Decoration::White, 1}}});
185 break;
186 }
187 case 20: {
188 generator.setFlag(Generate::TreehouseLayout);
189 generator.generate(4, 4,
190 {{{Decoration::Star | Decoration::Color::Orange, 4},
191 {Decoration::Gap, 10}}});
192 break;
193 }
194 case 21: {
195 generator.setFlag(Generate::RegularStartEnd);
196 generator.generate(5, 5,
197 {{{Decoration::Star | Decoration::Color::Orange, 10},
198 {Decoration::Gap, 3}}});
199 break;
200 }
201 case 22: {
202 generator.setFlag(Generate::TreehouseLayout);
203 generator.generate(4, 4,
204 {{{Decoration::Star | Decoration::Color::Orange, 4},
205 {Decoration::Star | Decoration::Color::Magenta, 4},
206 {Decoration::Gap, 8}}});
207 break;
208 }
209 case 23: {
210 generator.setFlag(Generate::TreehouseLayout);
211 generator.generate(4, 4,
212 {{{Decoration::Star | Decoration::Color::Orange, 4},
213 {Decoration::Star | Decoration::Color::Magenta, 2},
214 {Decoration::Star | Decoration::Color::Green, 2},
215 {Decoration::Gap, 8}}});
216 break;
217 }
218 case 24: {
219 generator.setFlag(Generate::TreehouseLayout);
220 generator.generate(4, 3,
221 {{{Decoration::Star | Decoration::Color::Orange, 6},
222 {Decoration::Star | Decoration::Color::Magenta, 4},
223 {Decoration::Star | Decoration::Color::Green, 2}}});
224 break;
225 }
226 case 25: {
227 generator.setFlag(Generate::TreehouseLayout);
228 generator.setFlag(Generate::FullGaps);
229 generator.generate(4, 4,
230 {{{Decoration::Star | Decoration::Color::Magenta, 6},
231 {Decoration::Dot_Intersection, 6},
232 {Decoration::Gap, 3}}});
233 break;
234 }
235 case 26: {
236 generator.setFlag(Generate::TreehouseLayout);
237 generator.generate(4, 4,
238 {{{Decoration::Star | Decoration::Color::Magenta, 4},
239 {Decoration::Stone | Decoration::Color::Black, 4},
240 {Decoration::Stone | Decoration::Color::White, 4}}});
241 break;
242 }
243 case 27: {
244 generator.setFlag(Generate::TreehouseLayout);
245 generator.generate(3, 3,
246 {{{Decoration::Star | Decoration::Color::Black, 1},
247 {Decoration::Stone | Decoration::Color::Black, 2},
248 {Decoration::Stone | Decoration::Color::White, 2}}});
249 break;
250 }
251 case 28: {
252 generator.setFlag(Generate::TreehouseLayout);
253 generator.generate(
254 4, 4,
255 {{{Decoration::Star | Decoration::Color::White, 2},
256 {Decoration::Stone | Decoration::Color::Black, 2},
257 {Decoration::Stone | Decoration::Color::White, 2},
258 {Decoration::Stone | Decoration::Color::Purple, 2}}});
259 break;
260 }
261 case 29: {
262 generator.setFlag(Generate::TreehouseLayout);
263 generator.generate(
264 4, 4,
265 {{{Decoration::Poly | Decoration::Color::Orange, 2},
266 {Decoration::Star | Decoration::Color::Magenta, 4}}});
267 break;
268 }
269 case 30: {
270 generator.setFlag(Generate::TreehouseLayout);
271 generator.generate(
272 4, 5,
273 {{{Decoration::Stone | Decoration::Color::White, 8},
274 {Decoration::Stone | Decoration::Color::Black, 8},
275 {Decoration::Eraser | Decoration::Color::White, 2}}});
276 break;
277 }
278 case 31: {
279 generator.setFlag(Generate::TreehouseLayout);
280 generator.generate(4, 5,
281 {{{Decoration::Poly | Decoration::Color::Orange, 2},
282 {Decoration::Stone | Decoration::Color::White, 4},
283 {Decoration::Stone | Decoration::Color::Black, 4},
284 {Decoration::Gap, 4}}});
285 break;
286 }
287 case 32: {
288 generator.setFlag(Generate::RegularStartEnd);
289 generator.generate(4, 4,
290 {{{Decoration::Dot_Intersection, 25},
291 {Decoration::Poly | Decoration::Color::Yellow, 2}}});
292 break;
293 }
294 case 33: {
295 generator.setFlag(Generate::RegularStartEnd);
296 generator.generate(
297 4, 4,
298 {{{Decoration::Dot_Intersection, 25},
299 {Decoration::Poly | Decoration::Color::Yellow |
300 Decoration::Can_Rotate,
301 2},
302 {Decoration::Eraser | Decoration::Color::White, 1}}});
303 break;
304 }
305 case 34: {
306 generator.setFlag(Generate::RegularStartEnd);
307 generator.setSymmetry(Panel::Rotational);
308 generator.generate(5, 5,
309 {{{Decoration::Stone | Decoration::Color::Black, 6},
310 {Decoration::Stone | Decoration::Color::White, 6}}});
311 break;
312 }
313 case 35: {
314 generator.setFlag(Generate::RegularStartEnd);
315 generator.setSymmetry(Panel::Rotational);
316 generator.generate(5, 5,
317 {{{Decoration::Stone | Decoration::Color::Black, 5},
318 {Decoration::Stone | Decoration::Color::White, 5},
319 {Decoration::Dot, 3}}});
320 break;
321 }
322 case 36: {
323 generator.setFlag(Generate::RegularStartEnd);
324 generator.setFlag(Generate::SplitShapes);
325 generator.generate(4, 4,
326 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
327 {Decoration::Gap, 8}}});
328 break;
329 }
330 case 37: {
331 generator.setFlag(Generate::RegularStartEnd);
332 generator.setFlag(Generate::BigShapes);
333 generator.generate(5, 5,
334 {{{Decoration::Poly | Decoration::Color::Yellow, 2},
335 {Decoration::Gap, 12}}});
336 break;
337 }
338 case 38: {
339 generator.setFlag(Generate::RegularStartEnd);
340 generator.setFlag(Generate::DisconnectShapes);
341 generator.generate(3, 3,
342 {{{Decoration::Poly | Decoration::Color::Yellow, 2}}});
343 break;
344 }
345 case 39: {
346 generator.setFlag(Generate::RegularStartEnd);
347 generator.setFlag(Generate::DisconnectShapes);
348 generator.setFlag(Generate::BigShapes);
349 generator.generate(4, 4,
350 {{{Decoration::Poly | Decoration::Color::Yellow, 2}}});
351 break;
352 }
353 case 40: {
354 generator.setFlag(Generate::RegularStartEnd);
355 generator.setFlag(Generate::RequireCombineShapes);
356 generator.setFlag(Generate::DisableCancelShapes);
357 generator.generate(
358 3, 3,
359 {{{Decoration::Poly | Decoration::Color::Yellow, 2},
360 {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue,
361 1}}});
362 break;
363 }
364 case 41: {
365 generator.setFlag(Generate::RegularStartEnd);
366 generator.setFlag(Generate::RequireCombineShapes);
367 generator.setFlag(Generate::DisableCancelShapes);
368 generator.generate(
369 4, 4,
370 {{{Decoration::Poly | Decoration::Color::Yellow, 2},
371 {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue,
372 1}}});
373 break;
374 }
375 case 42: {
376 generator.setFlag(Generate::RegularStartEnd);
377 generator.setFlag(Generate::BigShapes);
378 generator.setFlag(Generate::DisableCancelShapes);
379 generator.generate(
380 4, 4,
381 {{{Decoration::Poly | Decoration::Color::Yellow, 2},
382 {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue,
383 1}}});
384 break;
385 }
386 case 43: {
387 generator.setFlag(Generate::RegularStartEnd);
388 generator.setFlag(Generate::RequireCancelShapes);
389 generator.generate(
390 4, 4,
391 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
392 {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue,
393 2}}});
394 break;
395 }
396 case 44: {
397 generator.setFlag(Generate::RegularStartEnd);
398 generator.generate(
399 4, 4, {{{Decoration::Triangle | Decoration::Color::Orange, 6}}});
400 break;
401 }
402 case 45: {
403 generator.setFlag(Generate::TreehouseLayout);
404 generator.setFlag(Generate::LongPath);
405 generator.generate(5, 4,
406 {{{Decoration::Star | Decoration::Color::Magenta, 6},
407 {Decoration::Stone | Decoration::Color::Orange, 4},
408 {Decoration::Stone | Decoration::Color::Green, 4}}});
409 break;
410 }
411 case 46: {
412 generator.setFlag(Generate::RegularStartEnd);
413 generator.generate(4, 4,
414 {{{Decoration::Dot, 6},
415 {Decoration::Stone | Decoration::Color::Black, 3},
416 {Decoration::Stone | Decoration::Color::White, 3}}});
417 break;
418 }
419 case 47: {
420 generator.setFlag(Generate::RegularStartEnd);
421 generator.generate(4, 4,
422 {{{Decoration::Dot, 4},
423 {Decoration::Stone | Decoration::Color::Black, 3},
424 {Decoration::Stone | Decoration::Color::White, 2},
425 {Decoration::Poly | Decoration::Color::Yellow, 1}}});
426 break;
427 }
428 }
429 402
430 Rice::String str(generator.AsCode()); 403 Rice::String str(generator.AsCode());
431 return str; 404 return str;
432} 405}
433 406
434Rice::Object wittle_generator_generate_medium(Rice::Object /* self */) { 407Rice::Object wittle_generator_generate_medium(Rice::Object /* self */) {
408 static std::vector<std::function<void(Generate&)>> generator_fns{
409 [](Generate& generator) {
410 generator.setSymbol(Decoration::Start, 2 * 2, 2 * 2);
411 generator.setSymbol(Decoration::Exit, 4 * 2, 0);
412 generator.generate(
413 4, 4,
414 {{{Decoration::Stone | Decoration::Color::White, 5},
415 {Decoration::Stone | Decoration::Color::Black, 5},
416 {Decoration::Dot, 4},
417 {Decoration::Eraser | Decoration::Color::Green, 1}}});
418 },
419 [](Generate& generator) {
420 generator.setSymbol(Decoration::Exit, 0, 0);
421 generator.setSymbol(Decoration::Exit, 7 * 2, 0);
422 generator.setSymbol(Decoration::Exit, 7 * 2, 7 * 2);
423 generator.generate(7, 7,
424 {{{Decoration::Stone | Decoration::Color::White, 10},
425 {Decoration::Stone | Decoration::Color::Black, 10},
426 {Decoration::Dot, 10},
427 {Decoration::Start, 4}}});
428 },
429 [](Generate& generator) {
430 generator.setSymbol(Decoration::Exit, 0, 0);
431 generator.setSymbol(Decoration::Exit, 7 * 2, 0);
432 generator.setSymbol(Decoration::Exit, 7 * 2, 7 * 2);
433 generator.generate(
434 7, 7,
435 {{{Decoration::Stone | Decoration::Color::White, 10},
436 {Decoration::Stone | Decoration::Color::Black, 10},
437 {Decoration::Dot, 10},
438 {Decoration::Eraser | Decoration::Color::Purple, 1},
439 {Decoration::Start, 3}}});
440 },
441 [](Generate& generator) {
442 generator.setFlag(Generate::RegularStartEnd);
443 generator.generate(5, 5,
444 {{{Decoration::Star | Decoration::White, 8},
445 {Decoration::Star | Decoration::Black, 6}}});
446 },
447 [](Generate& generator) {
448 generator.setFlag(Generate::RegularStartEnd);
449 generator.setFlag(Generate::DisconnectShapes);
450 generator.generate(
451 4, 4,
452 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
453 {Decoration::Eraser | Decoration::Color::White, 1}}});
454 },
455 [](Generate& generator) {
456 generator.setSymbol(Decoration::Start, 2 * 2, 2 * 2);
457 generator.setSymbol(Decoration::Exit, 4 * 2, 0);
458 generator.generate(
459 4, 4,
460 {{{Decoration::Dot_Intersection, 25},
461 {Decoration::Stone | Decoration::Color::Black, 2},
462 {Decoration::Stone | Decoration::Color::White, 2}}});
463 },
464 [](Generate& generator) {
465 generator.setFlag(Generate::RegularStartEnd);
466 generator.setFlag(Generate::RequireCancelShapes);
467 generator.generate(6, 6,
468 {{{Decoration::Dot_Intersection, 49},
469 {Decoration::Poly | Decoration::Color::Yellow, 1},
470 {Decoration::Poly | Decoration::Color::Yellow |
471 Decoration::Can_Rotate,
472 2},
473 {Decoration::Poly | Decoration::Color::Blue |
474 Decoration::Negative,
475 3}}});
476 },
477 [](Generate& generator) {
478 generator.setFlag(Generate::RegularStartEnd);
479 generator.generate(
480 4, 4,
481 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
482 {Decoration::Eraser | Decoration::Color::White, 1}}});
483 },
484 [](Generate& generator) {
485 generator.setSymbol(Decoration::Start, 0, 3 * 2);
486 generator.setSymbol(Decoration::Exit, 6 * 2, 3 * 2);
487 generator.generate(6, 3,
488 {{{Decoration::Star | Decoration::Color::Magenta, 3},
489 {Decoration::Poly | Decoration::Color::Yellow, 3},
490 {Decoration::Eraser | Decoration::White, 1}}});
491 },
492 [](Generate& generator) {
493 generator.setSymbol(Decoration::Start, 0, 3 * 2);
494 generator.setSymbol(Decoration::Exit, 6 * 2, 3 * 2);
495 generator.generate(6, 3,
496 {{{Decoration::Star | Decoration::Color::Magenta, 5},
497 {Decoration::Poly | Decoration::Color::Yellow, 3},
498 {Decoration::Eraser | Decoration::White, 1}}});
499 },
500 [](Generate& generator) {
501 generator.setSymbol(Decoration::Start, 0, 3 * 2);
502 generator.setSymbol(Decoration::Exit, 6 * 2, 3 * 2);
503 generator.generate(6, 3,
504 {{{Decoration::Star | Decoration::Color::Magenta, 6},
505 {Decoration::Poly | Decoration::Color::Yellow, 3},
506 {Decoration::Eraser | Decoration::White, 1}}});
507 },
508 [](Generate& generator) {
509 generator.setSymbol(Decoration::Start, 0, 3 * 2);
510 generator.setSymbol(Decoration::Exit, 7 * 2, 3 * 2);
511 generator.generate(7, 3,
512 {{{Decoration::Star | Decoration::Color::Magenta, 5},
513 {Decoration::Poly | Decoration::Color::Yellow, 3},
514 {Decoration::Eraser | Decoration::White, 1}}});
515 },
516 [](Generate& generator) {
517 generator.setFlag(Generate::TreehouseLayout);
518 generator.generate(
519 4, 4,
520 {{{Decoration::Star | Decoration::Color::Orange, 6},
521 {Decoration::Star | Decoration::Color::Magenta, 6},
522 {Decoration::Star | Decoration::Color::Green, 4}}});
523 },
524 [](Generate& generator) {
525 generator.setFlag(Generate::TreehouseLayout);
526 generator.setFlag(Generate::FullGaps);
527 generator.generate(5, 5,
528 {{{Decoration::Star | Decoration::Color::Magenta, 8},
529 {Decoration::Dot_Intersection, 9},
530 {Decoration::Gap, 5}}});
531 },
532 [](Generate& generator) {
533 generator.setFlag(Generate::TreehouseLayout);
534 generator.generate(
535 4, 4,
536 {{{Decoration::Star | Decoration::Color::Black, 4},
537 {Decoration::Star | Decoration::Color::White, 4},
538 {Decoration::Stone | Decoration::Color::Black, 2},
539 {Decoration::Stone | Decoration::Color::White, 2}}});
540 },
541 [](Generate& generator) {
542 generator.setFlag(Generate::TreehouseLayout);
543 generator.generate(
544 5, 5,
545 {{{Decoration::Poly | Decoration::Color::Orange, 2},
546 {Decoration::Poly | Decoration::Color::Magenta, 1},
547 {Decoration::Star | Decoration::Color::Magenta, 3}}});
548 },
549 [](Generate& generator) {
550 generator.setFlag(Generate::TreehouseLayout);
551 generator.setFlag(Generate::RequireCombineShapes);
552 generator.generate(
553 5, 5,
554 {{{Decoration::Poly | Decoration::Color::Orange, 1},
555 {Decoration::Poly | Decoration::Can_Rotate |
556 Decoration::Color::Orange,
557 1},
558 {Decoration::Star | Decoration::Color::Magenta, 4},
559 {Decoration::Star | Decoration::Color::Green, 4}}});
560 },
561 [](Generate& generator) {
562 generator.setFlag(Generate::RegularStartEnd);
563 generator.generate(
564 4, 4,
565 {{{Decoration::Poly | Decoration::Color::Orange, 3},
566 {Decoration::Stone | Decoration::Color::White, 2},
567 {Decoration::Stone | Decoration::Color::Black, 2}}});
568 },
569 [](Generate& generator) {
570 generator.setFlag(Generate::RegularStartEnd);
571 generator.generate(4, 4,
572 {{{Decoration::Dot_Intersection, 25},
573 {Decoration::Poly | Decoration::Can_Rotate |
574 Decoration::Color::Yellow,
575 2}}});
576 },
577 [](Generate& generator) {
578 generator.setFlag(Generate::RegularStartEnd);
579 generator.setFlag(Generate::SmallShapes);
580 generator.generate(
581 5, 5,
582 {{{Decoration::Poly | Decoration::Can_Rotate |
583 Decoration::Color::Yellow,
584 4},
585 {Decoration::Star | Decoration::Color::Orange, 6}}});
586 },
587 [](Generate& generator) {
588 generator.setFlag(Generate::RegularStartEnd);
589 generator.generate(5, 5,
590 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
591 {Decoration::Gap, 5}}});
592 },
593 [](Generate& generator) {
594 generator.setFlag(Generate::RegularStartEnd);
595 generator.generate(
596 5, 5, {{{Decoration::Poly | Decoration::Color::Yellow, 4}}});
597 },
598 [](Generate& generator) {
599 generator.setFlag(Generate::RegularStartEnd);
600 generator.setFlag(Generate::DisconnectShapes);
601 generator.generate(
602 4, 4, {{{Decoration::Poly | Decoration::Color::Yellow, 3}}});
603 },
604 [](Generate& generator) {
605 generator.setFlag(Generate::RegularStartEnd);
606 generator.generate(5, 5,
607 {{{Decoration::Poly | Decoration::Can_Rotate |
608 Decoration::Color::Yellow,
609 2},
610 {Decoration::Poly | Decoration::Color::Yellow, 1},
611 {Decoration::Gap, 2}}});
612 },
613 [](Generate& generator) {
614 generator.setFlag(Generate::RegularStartEnd);
615 generator.setFlag(Generate::BigShapes);
616 generator.generate(5, 5,
617 {{{Decoration::Poly | Decoration::Can_Rotate |
618 Decoration::Color::Yellow,
619 3}}});
620 },
621 [](Generate& generator) {
622 generator.setFlag(Generate::RegularStartEnd);
623 generator.generate(
624 5, 6, {{{Decoration::Poly | Decoration::Color::Yellow, 5}}});
625 },
626 [](Generate& generator) {
627 generator.setFlag(Generate::RegularStartEnd);
628 generator.setFlag(Generate::BigShapes);
629 generator.generate(4, 4,
630 {{{Decoration::Poly | Decoration::Color::Yellow, 2},
631 {Decoration::Poly | Decoration::Negative |
632 Decoration::Color::Blue,
633 2}}});
634 },
635 [](Generate& generator) {
636 generator.setFlag(Generate::RegularStartEnd);
637 generator.generate(4, 4,
638 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
639 {Decoration::Poly | Decoration::Negative |
640 Decoration::Color::Blue,
641 2}}});
642 },
643 [](Generate& generator) {
644 generator.setFlag(Generate::RegularStartEnd);
645 generator.generate(
646 4, 4, {{{Decoration::Triangle | Decoration::Color::Orange, 8}}});
647 },
648 [](Generate& generator) {
649 generator.setFlag(Generate::RegularStartEnd);
650 generator.setFlag(Generate::LongestPath);
651 generator.setFlag(Generate::FullGaps);
652 generator.generate(
653 6, 6,
654 {{{Decoration::Dot_Intersection, 12}, {Decoration::Gap, 18}}});
655 },
656 [](Generate& generator) {
657 generator.generate(5, 5,
658 {{{Decoration::Start, 8},
659 {Decoration::Exit, 1},
660 {Decoration::Dot_Intersection, 36}}});
661 },
662 [](Generate& generator) {
663 generator.setFlag(Generate::RegularStartEnd);
664 generator.setSymmetry(Panel::Horizontal);
665 generator.generate(
666 6, 6,
667 {{{Decoration::Triangle | Decoration::Color::Orange, 12},
668 {Decoration::Start, 1},
669 {Decoration::Exit, 1}}});
670 },
671 [](Generate& generator) {
672 generator.setFlag(Generate::RegularStartEnd);
673 generator.generate(
674 4, 4,
675 {{{Decoration::Dot, 4},
676 {Decoration::Stone | Decoration::Color::Black, 2},
677 {Decoration::Stone | Decoration::Color::White, 2},
678 {Decoration::Star | Decoration::Color::Black, 2},
679 {Decoration::Star | Decoration::Color::White, 2}}});
680 },
681 [](Generate& generator) {
682 generator.setFlag(Generate::RegularStartEnd);
683 generator.generate(
684 4, 4,
685 {{{Decoration::Dot, 4},
686 {Decoration::Stone | Decoration::Color::Black, 1},
687 {Decoration::Stone | Decoration::Color::White, 3},
688 {Decoration::Star | Decoration::Color::Black, 3},
689 {Decoration::Star | Decoration::Color::White, 1}}});
690 },
691 [](Generate& generator) {
692 generator.setFlag(Generate::RegularStartEnd);
693 generator.generate(
694 5, 5,
695 {{{Decoration::Poly | Decoration::Color::Yellow, 2},
696 {Decoration::Stone | Decoration::Color::Black, 4},
697 {Decoration::Stone | Decoration::Color::White, 4}}});
698 },
699 [](Generate& generator) {
700 generator.setFlag(Generate::RegularStartEnd);
701 generator.generate(
702 5, 5,
703 {{{Decoration::Stone | Decoration::Color::Cyan, 2},
704 {Decoration::Stone | Decoration::Color::Yellow, 2},
705 {Decoration::Star | Decoration::Color::Cyan, 3},
706 {Decoration::Star | Decoration::Color::Yellow, 3}}});
707 },
708 [](Generate& generator) {
709 generator.setFlag(Generate::RegularStartEnd);
710 generator.generate(
711 6, 6,
712 {{{Decoration::Stone | Decoration::Color::Cyan, 2},
713 {Decoration::Stone | Decoration::Color::Magenta, 2},
714 {Decoration::Star | Decoration::Color::Cyan, 2},
715 {Decoration::Star | Decoration::Color::Magenta, 1},
716 {Decoration::Poly | Decoration::Color::Cyan, 1},
717 {Decoration::Poly | Decoration::Color::Magenta, 1}}});
718 },
719 [](Generate& generator) {
720 generator.setFlag(Generate::RegularStartEnd);
721 generator.generate(
722 5, 5, {{{Decoration::Triangle | Decoration::Color::Orange, 10}}});
723 },
724 [](Generate& generator) {
725 generator.setFlag(Generate::RegularStartEnd);
726 generator.generate(
727 5, 3,
728 {{{Decoration::Stone | Decoration::Color::Black, 4},
729 {Decoration::Stone | Decoration::Color::White, 3},
730 {Decoration::Triangle | Decoration::Color::Orange, 4}}});
731 },
732 [](Generate& generator) {
733 generator.setFlag(Generate::RegularStartEnd);
734 generator.generate(
735 4, 4,
736 {{{Decoration::Dot, 25},
737 {Decoration::Triangle | Decoration::Color::Orange, 6}}});
738 },
739 [](Generate& generator) {
740 generator.setFlag(Generate::RegularStartEnd);
741 generator.setFlag(Generate::RequireCombineShapes);
742 generator.setSymmetry(Panel::Rotational);
743 generator.generate(
744 5, 5, {{{Decoration::Poly | Decoration::Color::Yellow, 3}}});
745 },
746 [](Generate& generator) {
747 generator.setFlag(Generate::RegularStartEnd);
748 generator.setFlag(Generate::DisconnectShapes);
749 generator.setFlag(Generate::BigShapes);
750 generator.generate(
751 5, 5, {{{Decoration::Poly | Decoration::Color::Yellow, 3}}});
752 },
753 [](Generate& generator) {
754 generator.setFlag(Generate::RegularStartEnd);
755 generator.setFlag(Generate::DisconnectShapes);
756 generator.generate(4, 4,
757 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
758 {Decoration::Poly | Decoration::Color::Blue |
759 Decoration::Negative,
760 1}}});
761 },
762 [](Generate& generator) {
763 generator.setFlag(Generate::RegularStartEnd);
764 generator.generate(
765 4, 4,
766 {{{Decoration::Stone | Decoration::Color::Black, 3},
767 {Decoration::Stone | Decoration::Color::White, 3},
768 {Decoration::Triangle | Decoration::Color::Orange, 4}}});
769 },
770 [](Generate& generator) {
771 generator.setFlag(Generate::RegularStartEnd);
772 generator.generate(
773 4, 4,
774 {{{Decoration::Star | Decoration::Color::Black, 4},
775 {Decoration::Star | Decoration::Color::White, 4},
776 {Decoration::Triangle | Decoration::Color::Orange, 4}}});
777 },
778 [](Generate& generator) {
779 generator.setFlag(Generate::RegularStartEnd);
780 generator.generate(
781 4, 4,
782 {{{Decoration::Star | Decoration::Color::Orange, 3},
783 {Decoration::Triangle | Decoration::Color::Orange, 4}}});
784 },
785 [](Generate& generator) {
786 generator.setFlag(Generate::RegularStartEnd);
787 generator.generate(
788 4, 4,
789 {{{Decoration::Star | Decoration::Color::Black, 2},
790 {Decoration::Star | Decoration::Color::Orange, 2},
791 {Decoration::Stone | Decoration::Color::Black, 1},
792 {Decoration::Stone | Decoration::Color::Orange, 1},
793 {Decoration::Triangle | Decoration::Color::Orange, 4}}});
794 },
795 [](Generate& generator) {
796 generator.setFlag(Generate::RegularStartEnd);
797 generator.setFlag(Generate::BigShapes);
798 generator.generate(
799 4, 4,
800 {{{Decoration::Poly | Decoration::Color::Yellow |
801 Decoration::Can_Rotate,
802 1},
803 {Decoration::Triangle | Decoration::Color::Orange, 3}}});
804 },
805 [](Generate& generator) {
806 generator.setFlag(Generate::RegularStartEnd);
807 generator.setFlag(Generate::BigShapes);
808 generator.generate(
809 5, 5,
810 {{{Decoration::Poly | Decoration::Color::Yellow |
811 Decoration::Can_Rotate,
812 1},
813 {Decoration::Triangle | Decoration::Color::Orange, 6}}});
814 },
815 [](Generate& generator) {
816 generator.setFlag(Generate::RegularStartEnd);
817 generator.setFlag(Generate::BigShapes);
818 generator.generate(
819 5, 5,
820 {{{Decoration::Poly | Decoration::Color::Yellow, 2},
821 {Decoration::Triangle | Decoration::Color::Orange, 4}}});
822 },
823 [](Generate& generator) {
824 generator.setFlag(Generate::RegularStartEnd);
825 generator.generate(
826 4, 4,
827 {{{Decoration::Dot, 25},
828 {Decoration::Triangle | Decoration::Color::Orange, 4}}});
829 },
830 [](Generate& generator) {
831 generator.setSymbol(Decoration::Start, 0, 4 * 2);
832 generator.setSymbol(Decoration::Exit, 0, 0);
833 generator.generate(
834 4, 4,
835 {{{Decoration::Dot, 25},
836 {Decoration::Triangle | Decoration::Color::Orange, 5}}});
837 },
838 [](Generate& generator) {
839 generator.setSymbol(Decoration::Start, 0, 4 * 2);
840 generator.setSymbol(Decoration::Exit, 4 * 2, 4 * 2);
841 generator.generate(
842 4, 4,
843 {{{Decoration::Dot, 25},
844 {Decoration::Triangle | Decoration::Color::Orange, 5}}});
845 },
846 [](Generate& generator) {
847 generator.setFlag(Generate::RegularStartEnd);
848 generator.generate(
849 4, 4,
850 {{{Decoration::Dot, 25},
851 {Decoration::Triangle | Decoration::Color::Orange, 6}}});
852 },
853 [](Generate& generator) {
854 generator.setFlag(Generate::RegularStartEnd);
855 generator.setFlag(Generate::DisconnectShapes);
856 generator.generate(5, 5,
857 {{{Decoration::Poly | Decoration::Color::Yellow |
858 Decoration::Can_Rotate,
859 3}}});
860 },
861 [](Generate& generator) {
862 generator.setFlag(Generate::TreehouseLayout);
863 generator.generate(
864 4, 4,
865 {{{Decoration::Star | Decoration::Color::Black, 4},
866 {Decoration::Star | Decoration::Color::White, 4},
867 {Decoration::Star | Decoration::Color::Orange, 4},
868 {Decoration::Stone | Decoration::Color::Black, 1},
869 {Decoration::Stone | Decoration::Color::White, 1}}});
870 },
871 [](Generate& generator) {
872 generator.setFlag(Generate::RegularStartEnd);
873 generator.generate(
874 3, 3,
875 {{{Decoration::Stone | Decoration::Color::Magenta, 2},
876 {Decoration::Stone | Decoration::Color::Green, 1},
877 {Decoration::Star | Decoration::Color::Magenta, 2},
878 {Decoration::Star | Decoration::Color::Green, 3},
879 {Decoration::Eraser | Decoration::Color::Magenta, 1}}});
880 },
881 [](Generate& generator) {
882 generator.setFlag(Generate::RegularStartEnd);
883 generator.generate(
884 4, 4,
885 {{{Decoration::Dot_Intersection, 25},
886 {Decoration::Poly | Decoration::Color::Yellow, 3}}});
887 },
888 [](Generate& generator) {
889 generator.setSymbol(Decoration::Start, 2 * 2, 2 * 2);
890 generator.setSymbol(Decoration::Exit, 4 * 2, 0);
891 generator.generate(4, 4,
892 {{{Decoration::Dot_Intersection, 25},
893 {Decoration::Poly | Decoration::Color::Yellow |
894 Decoration::Can_Rotate,
895 2}}});
896 },
897 [](Generate& generator) {
898 generator.setFlag(Generate::RegularStartEnd);
899 generator.generate(
900 5, 5,
901 {{{Decoration::Poly | Decoration::Color::Green, 4},
902 {Decoration::Star | Decoration::Color::Green, 3}}});
903 },
904 [](Generate& generator) {
905 generator.setFlag(Generate::RegularStartEnd);
906 generator.generate(
907 4, 4, {{{Decoration::Triangle2 | Decoration::Color::Orange, 12}}});
908 },
909 [](Generate& generator) {
910 generator.setSymbol(Decoration::Exit, 0, 0);
911 generator.setSymbol(Decoration::Exit, 7 * 2, 0);
912 generator.setSymbol(Decoration::Exit, 7 * 2, 7 * 2);
913 generator.generate(
914 7, 7,
915 {{{Decoration::Triangle | Decoration::Color::Orange, 12},
916 {Decoration::Start, 3}}});
917 },
918 [](Generate& generator) {
919 generator.setFlag(Generate::TreehouseLayout);
920 generator.generate(
921 4, 4,
922 {{{Decoration::Star | Decoration::Color::Orange, 1},
923 {Decoration::Triangle | Decoration::Color::Orange, 7}}});
924 },
925 [](Generate& generator) {
926 generator.setFlag(Generate::TreehouseLayout);
927 generator.generate(
928 4, 4,
929 {{{Decoration::Star | Decoration::Color::Orange, 3},
930 {Decoration::Star | Decoration::Color::Magenta, 2},
931 {Decoration::Triangle | Decoration::Color::Orange, 2},
932 {Decoration::Triangle | Decoration::Color::Magenta, 2}}});
933 },
934 [](Generate& generator) {
935 generator.setFlag(Generate::TreehouseLayout);
936 generator.generate(4, 4,
937 {{{Decoration::Star | Decoration::Color::Magenta, 4},
938 {Decoration::Dot_Intersection, 25}}});
939 },
940 [](Generate& generator) {
941 generator.setSymmetry(Panel::Symmetry::FlipNegXY);
942 generator.generate(7, 7,
943 {{{Decoration::Gap, 10},
944 {Decoration::Dot_Intersection, 8},
945 {Decoration::Start, 2},
946 {Decoration::Exit, 1}}});
947 },
948 [](Generate& generator) {
949 generator.setSymmetry(Panel::Symmetry::ParallelV);
950 generator.generate(7, 7,
951 {{{Decoration::Gap, 12},
952 {Decoration::Dot_Intersection, 10},
953 {Decoration::Start, 2},
954 {Decoration::Exit, 1}}});
955 },
956 [](Generate& generator) {
957 generator.setSymmetry(Panel::Symmetry::ParallelHFlip);
958 generator.generate(7, 7,
959 {{{Decoration::Gap, 12},
960 {Decoration::Dot_Intersection, 10},
961 {Decoration::Start, 2},
962 {Decoration::Exit, 1}}});
963 },
964 [](Generate& generator) {
965 generator.setFlag(Generate::StartEdgeOnly);
966 generator.setSymbol(Decoration::Exit, 4 * 2, 0);
967 generator.generate(4, 4,
968 {{{Decoration::Dot_Intersection, 25},
969 {Decoration::Poly | Decoration::Color::Yellow, 1},
970 {Decoration::Poly | Decoration::Color::Yellow |
971 Decoration::Can_Rotate,
972 2},
973 {Decoration::Start, 1}}});
974 },
975 [](Generate& generator) {
976 generator.setFlag(Generate::RegularStartEnd);
977 generator.generate(
978 4, 4,
979 {{{Decoration::Triangle | Decoration::Color::Orange, 15},
980 {Decoration::Eraser | Decoration::Color::Purple, 1}}});
981 },
982 [](Generate& generator) {
983 generator.setFlag(Generate::RegularStartEnd);
984 generator.generate(
985 4, 4,
986 {{{Decoration::Stone | Decoration::Color::White, 1},
987 {Decoration::Stone | Decoration::Color::Black, 2},
988 {Decoration::Stone | Decoration::Color::Red, 2},
989 {Decoration::Star | Decoration::Color::White, 4},
990 {Decoration::Star | Decoration::Color::Black, 3},
991 {Decoration::Star | Decoration::Color::Red, 3},
992 {Decoration::Decoration::Eraser | Decoration::Color::Green, 1}}});
993 },
994 [](Generate& generator) {
995 generator.setFlag(Generate::RegularStartEnd);
996 generator.generate(
997 4, 4,
998 {{{Decoration::Poly | Decoration::Color::Yellow, 1},
999 {Decoration::Poly | Decoration::Color::Yellow |
1000 Decoration::Can_Rotate,
1001 1},
1002 {Decoration::Triangle | Decoration::Color::Orange, 3}}});
1003 },
1004 [](Generate& generator) {
1005 generator.setFlag(Generate::RegularStartEnd);
1006 generator.generate(
1007 4, 4,
1008 {{{Decoration::Poly | Decoration::Color::Yellow, 2},
1009 {Decoration::Poly | Decoration::Color::Yellow |
1010 Decoration::Can_Rotate,
1011 1},
1012 {Decoration::Triangle | Decoration::Color::Orange, 2},
1013 {Decoration::Stone | Decoration::Color::Black, 2},
1014 {Decoration::Stone | Decoration::Color::White, 2}}});
1015 },
1016 [](Generate& generator) {
1017 generator.setFlag(Generate::RegularStartEnd);
1018 generator.setSymmetry(Panel::Vertical);
1019 generator.generate(
1020 7, 7, {{{Decoration::Poly | Decoration::Color::Yellow, 5}}});
1021 },
1022 };
1023
435 Generate generator; 1024 Generate generator;
436 1025
437 int choice = Random::rand() % 69; 1026 int choice = Random::rand() % generator_fns.size();
438 std::cout << "Generate MEDIUM: choice " << std::dec << choice << std::endl; 1027 std::cout << "Generate MEDIUM: choice " << std::dec << choice << std::endl;
439 1028
440 switch (choice) { 1029 generator_fns.at(choice)(generator);
441 case 0: {
442 generator.setSymbol(Decoration::Start, 2 * 2, 2 * 2);
443 generator.setSymbol(Decoration::Exit, 4 * 2, 0);
444 generator.generate(
445 4, 4,
446 {{{Decoration::Stone | Decoration::Color::White, 5},
447 {Decoration::Stone | Decoration::Color::Black, 5},
448 {Decoration::Dot, 4},
449 {Decoration::Eraser | Decoration::Color::Green, 1}}});
450 break;
451 }
452 case 1: {
453 generator.setSymbol(Decoration::Exit, 0, 0);
454 generator.setSymbol(Decoration::Exit, 7 * 2, 0);
455 generator.setSymbol(Decoration::Exit, 7 * 2, 7 * 2);
456 generator.generate(7, 7,
457 {{{Decoration::Stone | Decoration::Color::White, 10},
458 {Decoration::Stone | Decoration::Color::Black, 10},
459 {Decoration::Dot, 10},
460 {Decoration::Start, 4}}});
461 break;
462 }
463 case 2: {
464 generator.setSymbol(Decoration::Exit, 0, 0);
465 generator.setSymbol(Decoration::Exit, 7 * 2, 0);
466 generator.setSymbol(Decoration::Exit, 7 * 2, 7 * 2);
467 generator.generate(7, 7,
468 {{{Decoration::Stone | Decoration::Color::White, 10},
469 {Decoration::Stone | Decoration::Color::Black, 10},
470 {Decoration::Dot, 10},
471 {Decoration::Eraser | Decoration::Color::Purple, 1},
472 {Decoration::Start, 3}}});
473 break;
474 }
475 case 3: {
476 generator.setFlag(Generate::RegularStartEnd);
477 generator.generate(5, 5,
478 {{{Decoration::Star | Decoration::White, 8},
479 {Decoration::Star | Decoration::Black, 6}}});
480 break;
481 }
482 case 4: {
483 generator.setFlag(Generate::RegularStartEnd);
484 generator.setFlag(Generate::DisconnectShapes);
485 generator.generate(
486 4, 4,
487 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
488 {Decoration::Eraser | Decoration::Color::White, 1}}});
489 break;
490 }
491 case 5: {
492 generator.setSymbol(Decoration::Start, 2 * 2, 2 * 2);
493 generator.setSymbol(Decoration::Exit, 4 * 2, 0);
494 generator.generate(4, 4,
495 {{{Decoration::Dot_Intersection, 25},
496 {Decoration::Stone | Decoration::Color::Black, 2},
497 {Decoration::Stone | Decoration::Color::White, 2}}});
498 break;
499 }
500 case 6: {
501 generator.setSymmetry(Panel::Rotational);
502 generator.generate(5, 5,
503 {{{Decoration::Dot | Decoration::Color::Blue, 2},
504 {Decoration::Dot | Decoration::Color::Yellow, 2},
505 {Decoration::Dot, 4},
506 {Decoration::Start, 2},
507 {Decoration::Exit, 1}}});
508 break;
509 }
510 case 7: {
511 generator.setFlag(Generate::RegularStartEnd);
512 generator.setFlag(Generate::RequireCancelShapes);
513 generator.generate(
514 6, 6,
515 {{{Decoration::Dot_Intersection, 49},
516 {Decoration::Poly | Decoration::Color::Yellow, 1},
517 {Decoration::Poly | Decoration::Color::Yellow |
518 Decoration::Can_Rotate,
519 2},
520 {Decoration::Poly | Decoration::Color::Blue | Decoration::Negative,
521 3}}});
522 break;
523 }
524 case 8: {
525 generator.setFlag(Generate::RegularStartEnd);
526 generator.generate(
527 4, 4,
528 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
529 {Decoration::Eraser | Decoration::Color::White, 1}}});
530 break;
531 }
532 case 9: {
533 generator.setSymbol(Decoration::Start, 0, 3 * 2);
534 generator.setSymbol(Decoration::Exit, 6 * 2, 3 * 2);
535 generator.generate(6, 3,
536 {{{Decoration::Star | Decoration::Color::Magenta, 3},
537 {Decoration::Poly | Decoration::Color::Yellow, 3},
538 {Decoration::Eraser | Decoration::White, 1}}});
539 break;
540 }
541 case 10: {
542 generator.setSymbol(Decoration::Start, 0, 3 * 2);
543 generator.setSymbol(Decoration::Exit, 6 * 2, 3 * 2);
544 generator.generate(6, 3,
545 {{{Decoration::Star | Decoration::Color::Magenta, 5},
546 {Decoration::Poly | Decoration::Color::Yellow, 3},
547 {Decoration::Eraser | Decoration::White, 1}}});
548 break;
549 }
550 case 11: {
551 generator.setSymbol(Decoration::Start, 0, 3 * 2);
552 generator.setSymbol(Decoration::Exit, 6 * 2, 3 * 2);
553 generator.generate(6, 3,
554 {{{Decoration::Star | Decoration::Color::Magenta, 6},
555 {Decoration::Poly | Decoration::Color::Yellow, 3},
556 {Decoration::Eraser | Decoration::White, 1}}});
557 break;
558 }
559 case 12: {
560 generator.setSymbol(Decoration::Start, 0, 3 * 2);
561 generator.setSymbol(Decoration::Exit, 7 * 2, 3 * 2);
562 generator.generate(7, 3,
563 {{{Decoration::Star | Decoration::Color::Magenta, 5},
564 {Decoration::Poly | Decoration::Color::Yellow, 3},
565 {Decoration::Eraser | Decoration::White, 1}}});
566 break;
567 }
568 case 13: {
569 generator.setFlag(Generate::TreehouseLayout);
570 generator.generate(4, 4,
571 {{{Decoration::Star | Decoration::Color::Orange, 6},
572 {Decoration::Star | Decoration::Color::Magenta, 6},
573 {Decoration::Star | Decoration::Color::Green, 4}}});
574 break;
575 }
576 case 14: {
577 generator.setFlag(Generate::TreehouseLayout);
578 generator.setFlag(Generate::FullGaps);
579 generator.generate(5, 5,
580 {{{Decoration::Star | Decoration::Color::Magenta, 8},
581 {Decoration::Dot_Intersection, 9},
582 {Decoration::Gap, 5}}});
583 break;
584 }
585 case 15: {
586 generator.setFlag(Generate::TreehouseLayout);
587 generator.generate(4, 4,
588 {{{Decoration::Star | Decoration::Color::Black, 4},
589 {Decoration::Star | Decoration::Color::White, 4},
590 {Decoration::Stone | Decoration::Color::Black, 2},
591 {Decoration::Stone | Decoration::Color::White, 2}}});
592 break;
593 }
594 case 16: {
595 generator.setFlag(Generate::TreehouseLayout);
596 generator.generate(
597 5, 5,
598 {{{Decoration::Poly | Decoration::Color::Orange, 2},
599 {Decoration::Poly | Decoration::Color::Magenta, 1},
600 {Decoration::Star | Decoration::Color::Magenta, 3}}});
601 break;
602 }
603 case 17: {
604 generator.setFlag(Generate::TreehouseLayout);
605 generator.setFlag(Generate::RequireCombineShapes);
606 generator.generate(5, 5,
607 {{{Decoration::Poly | Decoration::Color::Orange, 1},
608 {Decoration::Poly | Decoration::Can_Rotate |
609 Decoration::Color::Orange,
610 1},
611 {Decoration::Star | Decoration::Color::Magenta, 4},
612 {Decoration::Star | Decoration::Color::Green, 4}}});
613 break;
614 }
615 case 18: {
616 generator.setFlag(Generate::RegularStartEnd);
617 generator.generate(4, 4,
618 {{{Decoration::Poly | Decoration::Color::Orange, 3},
619 {Decoration::Stone | Decoration::Color::White, 2},
620 {Decoration::Stone | Decoration::Color::Black, 2}}});
621 break;
622 }
623 case 19: {
624 generator.setFlag(Generate::RegularStartEnd);
625 generator.generate(4, 4,
626 {{{Decoration::Dot_Intersection, 25},
627 {Decoration::Poly | Decoration::Can_Rotate |
628 Decoration::Color::Yellow,
629 2}}});
630 break;
631 }
632 case 20: {
633 generator.setFlag(Generate::RegularStartEnd);
634 generator.setFlag(Generate::SmallShapes);
635 generator.generate(5, 5,
636 {{{Decoration::Poly | Decoration::Can_Rotate |
637 Decoration::Color::Yellow,
638 4},
639 {Decoration::Star | Decoration::Color::Orange, 6}}});
640 break;
641 }
642 case 21: {
643 generator.setFlag(Generate::RegularStartEnd);
644 generator.generate(5, 5,
645 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
646 {Decoration::Gap, 5}}});
647 break;
648 }
649 case 22: {
650 generator.setFlag(Generate::RegularStartEnd);
651 generator.generate(5, 5,
652 {{{Decoration::Poly | Decoration::Color::Yellow, 4}}});
653 break;
654 }
655 case 23: {
656 generator.setFlag(Generate::RegularStartEnd);
657 generator.setFlag(Generate::DisconnectShapes);
658 generator.generate(4, 4,
659 {{{Decoration::Poly | Decoration::Color::Yellow, 3}}});
660 break;
661 }
662 case 24: {
663 generator.setFlag(Generate::RegularStartEnd);
664 generator.generate(5, 5,
665 {{{Decoration::Poly | Decoration::Can_Rotate |
666 Decoration::Color::Yellow,
667 2},
668 {Decoration::Poly | Decoration::Color::Yellow, 1},
669 {Decoration::Gap, 2}}});
670 break;
671 }
672 case 25: {
673 generator.setFlag(Generate::RegularStartEnd);
674 generator.setFlag(Generate::BigShapes);
675 generator.generate(5, 5,
676 {{{Decoration::Poly | Decoration::Can_Rotate |
677 Decoration::Color::Yellow,
678 3}}});
679 break;
680 }
681 case 26: {
682 generator.setFlag(Generate::RegularStartEnd);
683 generator.generate(5, 6,
684 {{{Decoration::Poly | Decoration::Color::Yellow, 5}}});
685 break;
686 }
687 case 27: {
688 generator.setFlag(Generate::RegularStartEnd);
689 generator.setFlag(Generate::BigShapes);
690 generator.generate(
691 4, 4,
692 {{{Decoration::Poly | Decoration::Color::Yellow, 2},
693 {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue,
694 2}}});
695 break;
696 }
697 case 28: {
698 generator.setFlag(Generate::RegularStartEnd);
699 generator.generate(
700 4, 4,
701 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
702 {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue,
703 2}}});
704 break;
705 }
706 case 29: {
707 generator.setFlag(Generate::RegularStartEnd);
708 generator.generate(
709 4, 4, {{{Decoration::Triangle | Decoration::Color::Orange, 8}}});
710 break;
711 }
712 case 30: {
713 generator.setFlag(Generate::RegularStartEnd);
714 generator.setFlag(Generate::LongestPath);
715 generator.setFlag(Generate::FullGaps);
716 generator.generate(
717 6, 6, {{{Decoration::Dot_Intersection, 12}, {Decoration::Gap, 18}}});
718 break;
719 }
720 case 31: {
721 generator.generate(5, 5,
722 {{{Decoration::Start, 8},
723 {Decoration::Exit, 1},
724 {Decoration::Dot_Intersection, 36}}});
725 break;
726 }
727 case 32: {
728 generator.setFlag(Generate::RegularStartEnd);
729 generator.setSymmetry(Panel::Horizontal);
730 generator.generate(
731 6, 6,
732 {{{Decoration::Triangle | Decoration::Color::Orange, 12},
733 {Decoration::Start, 1},
734 {Decoration::Exit, 1}}});
735 break;
736 }
737 case 33: {
738 generator.setFlag(Generate::RegularStartEnd);
739 generator.generate(4, 4,
740 {{{Decoration::Dot, 4},
741 {Decoration::Stone | Decoration::Color::Black, 2},
742 {Decoration::Stone | Decoration::Color::White, 2},
743 {Decoration::Star | Decoration::Color::Black, 2},
744 {Decoration::Star | Decoration::Color::White, 2}}});
745 break;
746 }
747 case 34: {
748 generator.setFlag(Generate::RegularStartEnd);
749 generator.generate(4, 4,
750 {{{Decoration::Dot, 4},
751 {Decoration::Stone | Decoration::Color::Black, 1},
752 {Decoration::Stone | Decoration::Color::White, 3},
753 {Decoration::Star | Decoration::Color::Black, 3},
754 {Decoration::Star | Decoration::Color::White, 1}}});
755 break;
756 }
757 case 35: {
758 generator.setFlag(Generate::RegularStartEnd);
759 generator.generate(5, 5,
760 {{{Decoration::Poly | Decoration::Color::Yellow, 2},
761 {Decoration::Stone | Decoration::Color::Black, 4},
762 {Decoration::Stone | Decoration::Color::White, 4}}});
763 break;
764 }
765 case 36: {
766 generator.setFlag(Generate::RegularStartEnd);
767 generator.generate(5, 5,
768 {{{Decoration::Stone | Decoration::Color::Cyan, 2},
769 {Decoration::Stone | Decoration::Color::Yellow, 2},
770 {Decoration::Star | Decoration::Color::Cyan, 3},
771 {Decoration::Star | Decoration::Color::Yellow, 3}}});
772 break;
773 }
774 case 37: {
775 generator.setFlag(Generate::RegularStartEnd);
776 generator.generate(
777 6, 6,
778 {{{Decoration::Stone | Decoration::Color::Cyan, 2},
779 {Decoration::Stone | Decoration::Color::Magenta, 2},
780 {Decoration::Star | Decoration::Color::Cyan, 2},
781 {Decoration::Star | Decoration::Color::Magenta, 1},
782 {Decoration::Poly | Decoration::Color::Cyan, 1},
783 {Decoration::Poly | Decoration::Color::Magenta, 1}}});
784 break;
785 }
786 case 38: {
787 generator.setFlag(Generate::RegularStartEnd);
788 generator.generate(
789 5, 5, {{{Decoration::Triangle | Decoration::Color::Orange, 10}}});
790 break;
791 }
792 case 39: {
793 generator.setFlag(Generate::RegularStartEnd);
794 generator.generate(
795 5, 3,
796 {{{Decoration::Stone | Decoration::Color::Black, 4},
797 {Decoration::Stone | Decoration::Color::White, 3},
798 {Decoration::Triangle | Decoration::Color::Orange, 4}}});
799 break;
800 }
801 case 40: {
802 generator.setFlag(Generate::RegularStartEnd);
803 generator.generate(
804 4, 4,
805 {{{Decoration::Dot, 25},
806 {Decoration::Triangle | Decoration::Color::Orange, 6}}});
807 break;
808 }
809 case 41: {
810 generator.setFlag(Generate::RegularStartEnd);
811 generator.setFlag(Generate::RequireCombineShapes);
812 generator.setSymmetry(Panel::Rotational);
813 generator.generate(5, 5,
814 {{{Decoration::Poly | Decoration::Color::Yellow, 3}}});
815 break;
816 }
817 case 42: {
818 generator.setFlag(Generate::RegularStartEnd);
819 generator.setFlag(Generate::DisconnectShapes);
820 generator.setFlag(Generate::BigShapes);
821 generator.generate(5, 5,
822 {{{Decoration::Poly | Decoration::Color::Yellow, 3}}});
823 break;
824 }
825 case 43: {
826 generator.setFlag(Generate::RegularStartEnd);
827 generator.setFlag(Generate::DisconnectShapes);
828 generator.generate(
829 4, 4,
830 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
831 {Decoration::Poly | Decoration::Color::Blue | Decoration::Negative,
832 1}}});
833 break;
834 }
835 case 44: {
836 generator.setFlag(Generate::RegularStartEnd);
837 generator.generate(
838 4, 4,
839 {{{Decoration::Stone | Decoration::Color::Black, 3},
840 {Decoration::Stone | Decoration::Color::White, 3},
841 {Decoration::Triangle | Decoration::Color::Orange, 4}}});
842 break;
843 }
844 case 45: {
845 generator.setFlag(Generate::RegularStartEnd);
846 generator.generate(
847 4, 4,
848 {{{Decoration::Star | Decoration::Color::Black, 4},
849 {Decoration::Star | Decoration::Color::White, 4},
850 {Decoration::Triangle | Decoration::Color::Orange, 4}}});
851 break;
852 }
853 case 46: {
854 generator.setFlag(Generate::RegularStartEnd);
855 generator.generate(
856 4, 4,
857 {{{Decoration::Star | Decoration::Color::Orange, 3},
858 {Decoration::Triangle | Decoration::Color::Orange, 4}}});
859 break;
860 }
861 case 47: {
862 generator.setFlag(Generate::RegularStartEnd);
863 generator.generate(
864 4, 4,
865 {{{Decoration::Star | Decoration::Color::Black, 2},
866 {Decoration::Star | Decoration::Color::Orange, 2},
867 {Decoration::Stone | Decoration::Color::Black, 1},
868 {Decoration::Stone | Decoration::Color::Orange, 1},
869 {Decoration::Triangle | Decoration::Color::Orange, 4}}});
870 break;
871 }
872 case 48: {
873 generator.setFlag(Generate::RegularStartEnd);
874 generator.setFlag(Generate::BigShapes);
875 generator.generate(
876 4, 4,
877 {{{Decoration::Poly | Decoration::Color::Yellow |
878 Decoration::Can_Rotate,
879 1},
880 {Decoration::Triangle | Decoration::Color::Orange, 3}}});
881 break;
882 }
883 case 49: {
884 generator.setFlag(Generate::RegularStartEnd);
885 generator.setFlag(Generate::BigShapes);
886 generator.generate(
887 5, 5,
888 {{{Decoration::Poly | Decoration::Color::Yellow |
889 Decoration::Can_Rotate,
890 1},
891 {Decoration::Triangle | Decoration::Color::Orange, 6}}});
892 break;
893 }
894 case 50: {
895 generator.setFlag(Generate::RegularStartEnd);
896 generator.setFlag(Generate::BigShapes);
897 generator.generate(
898 5, 5,
899 {{{Decoration::Poly | Decoration::Color::Yellow, 2},
900 {Decoration::Triangle | Decoration::Color::Orange, 4}}});
901 break;
902 }
903 case 51: {
904 generator.setFlag(Generate::RegularStartEnd);
905 generator.generate(
906 4, 4,
907 {{{Decoration::Dot, 25},
908 {Decoration::Triangle | Decoration::Color::Orange, 4}}});
909 break;
910 }
911 case 52: {
912 generator.setSymbol(Decoration::Start, 0, 4 * 2);
913 generator.setSymbol(Decoration::Exit, 0, 0);
914 generator.generate(
915 4, 4,
916 {{{Decoration::Dot, 25},
917 {Decoration::Triangle | Decoration::Color::Orange, 5}}});
918 break;
919 }
920 case 53: {
921 generator.setSymbol(Decoration::Start, 0, 4 * 2);
922 generator.setSymbol(Decoration::Exit, 4 * 2, 4 * 2);
923 generator.generate(
924 4, 4,
925 {{{Decoration::Dot, 25},
926 {Decoration::Triangle | Decoration::Color::Orange, 5}}});
927 break;
928 }
929 case 54: {
930 generator.setFlag(Generate::RegularStartEnd);
931 generator.generate(
932 4, 4,
933 {{{Decoration::Dot, 25},
934 {Decoration::Triangle | Decoration::Color::Orange, 6}}});
935 break;
936 }
937 case 55: {
938 generator.setFlag(Generate::RegularStartEnd);
939 generator.setFlag(Generate::DisconnectShapes);
940 generator.generate(5, 5,
941 {{{Decoration::Poly | Decoration::Color::Yellow |
942 Decoration::Can_Rotate,
943 3}}});
944 break;
945 }
946 case 56: {
947 generator.setFlag(Generate::TreehouseLayout);
948 generator.generate(4, 4,
949 {{{Decoration::Star | Decoration::Color::Black, 4},
950 {Decoration::Star | Decoration::Color::White, 4},
951 {Decoration::Star | Decoration::Color::Orange, 4},
952 {Decoration::Stone | Decoration::Color::Black, 1},
953 {Decoration::Stone | Decoration::Color::White, 1}}});
954 break;
955 }
956 case 57: {
957 generator.setFlag(Generate::RegularStartEnd);
958 generator.generate(
959 3, 3,
960 {{{Decoration::Stone | Decoration::Color::Magenta, 2},
961 {Decoration::Stone | Decoration::Color::Green, 1},
962 {Decoration::Star | Decoration::Color::Magenta, 2},
963 {Decoration::Star | Decoration::Color::Green, 3},
964 {Decoration::Eraser | Decoration::Color::Magenta, 1}}});
965 break;
966 }
967 case 58: {
968 generator.setFlag(Generate::RegularStartEnd);
969 generator.generate(4, 4,
970 {{{Decoration::Dot_Intersection, 25},
971 {Decoration::Poly | Decoration::Color::Yellow, 3}}});
972 break;
973 }
974 case 59: {
975 generator.setSymbol(Decoration::Start, 2 * 2, 2 * 2);
976 generator.setSymbol(Decoration::Exit, 4 * 2, 0);
977 generator.generate(4, 4,
978 {{{Decoration::Dot_Intersection, 25},
979 {Decoration::Poly | Decoration::Color::Yellow |
980 Decoration::Can_Rotate,
981 2}}});
982 break;
983 }
984 case 60: {
985 generator.setFlag(Generate::RegularStartEnd);
986 generator.generate(5, 5,
987 {{{Decoration::Poly | Decoration::Color::Green, 4},
988 {Decoration::Star | Decoration::Color::Green, 3}}});
989 break;
990 }
991 case 61: {
992 generator.setFlag(Generate::RegularStartEnd);
993 generator.generate(
994 4, 4, {{{Decoration::Triangle2 | Decoration::Color::Orange, 12}}});
995 break;
996 }
997 case 62: {
998 generator.setSymbol(Decoration::Exit, 0, 0);
999 generator.setSymbol(Decoration::Exit, 7 * 2, 0);
1000 generator.setSymbol(Decoration::Exit, 7 * 2, 7 * 2);
1001 generator.generate(
1002 7, 7,
1003 {{{Decoration::Triangle | Decoration::Color::Orange, 12},
1004 {Decoration::Start, 3}}});
1005 break;
1006 }
1007 case 63: {
1008 generator.setFlag(Generate::TreehouseLayout);
1009 generator.generate(
1010 4, 4,
1011 {{{Decoration::Star | Decoration::Color::Orange, 1},
1012 {Decoration::Triangle | Decoration::Color::Orange, 7}}});
1013 break;
1014 }
1015 case 64: {
1016 generator.setFlag(Generate::TreehouseLayout);
1017 generator.generate(
1018 4, 4,
1019 {{{Decoration::Star | Decoration::Color::Orange, 3},
1020 {Decoration::Star | Decoration::Color::Magenta, 2},
1021 {Decoration::Triangle | Decoration::Color::Orange, 2},
1022 {Decoration::Triangle | Decoration::Color::Magenta, 2}}});
1023 break;
1024 }
1025 case 65: {
1026 generator.setFlag(Generate::TreehouseLayout);
1027 generator.generate(4, 4,
1028 {{{Decoration::Star | Decoration::Color::Magenta, 4},
1029 {Decoration::Dot_Intersection, 25}}});
1030 break;
1031 }
1032 case 66: {
1033 generator.setSymmetry(Panel::Symmetry::FlipNegXY);
1034 generator.generate(7, 7,
1035 {{{Decoration::Gap, 10},
1036 {Decoration::Dot_Intersection, 8},
1037 {Decoration::Start, 2},
1038 {Decoration::Exit, 1}}});
1039 break;
1040 }
1041 case 67: {
1042 generator.setSymmetry(Panel::Symmetry::ParallelV);
1043 generator.generate(7, 7,
1044 {{{Decoration::Gap, 12},
1045 {Decoration::Dot_Intersection, 10},
1046 {Decoration::Start, 2},
1047 {Decoration::Exit, 1}}});
1048 break;
1049 }
1050 case 68: {
1051 generator.setSymmetry(Panel::Symmetry::ParallelHFlip);
1052 generator.generate(7, 7,
1053 {{{Decoration::Gap, 12},
1054 {Decoration::Dot_Intersection, 10},
1055 {Decoration::Start, 2},
1056 {Decoration::Exit, 1}}});
1057 break;
1058 }
1059 }
1060 1030
1061 Rice::String str(generator.AsCode()); 1031 Rice::String str(generator.AsCode());
1062 return str; 1032 return str;
1063} 1033}
1064 1034
1065Rice::Object wittle_generator_generate_expert(Rice::Object /* self */) { 1035Rice::Object wittle_generator_generate_expert(Rice::Object /* self */) {
1036 static std::vector<std::function<void(Generate&)>> generator_fns{
1037 [](Generate& generator) {
1038 generator.setFlag(Generate::StartEdgeOnly);
1039 generator.setSymmetry(Panel::Rotational);
1040 generator.generate(
1041 6, 6,
1042 {{{Decoration::Triangle | Decoration::Color::Orange, 12},
1043 {Decoration::Start, 1},
1044 {Decoration::Exit, 1}}});
1045 },
1046 [](Generate& generator) {
1047 generator.setFlag(Generate::StartEdgeOnly);
1048 generator.setFlag(Generate::WriteInvisible);
1049 generator.setSymmetry(Panel::Rotational);
1050 generator.generate(7, 7,
1051 {{{Decoration::Dot | Decoration::Color::Blue, 4},
1052 {Decoration::Dot | Decoration::Color::Yellow, 4},
1053 {Decoration::Dot, 7},
1054 {Decoration::Start, 1},
1055 {Decoration::Exit, 1}}});
1056 },
1057 [](Generate& generator) {
1058 generator.setFlag(Generate::StartEdgeOnly);
1059 generator.setFlag(Generate::WriteInvisible);
1060 generator.setSymmetry(Panel::Rotational);
1061 generator.generate(7, 7,
1062 {{{Decoration::Stone | Decoration::Color::Black, 6},
1063 {Decoration::Stone | Decoration::Color::White, 6},
1064 {Decoration::Start, 1},
1065 {Decoration::Exit, 1}}});
1066 },
1067 [](Generate& generator) {
1068 generator.setFlag(Generate::StartEdgeOnly);
1069 generator.setFlag(Generate::WriteInvisible);
1070 generator.setSymmetry(Panel::Rotational);
1071 generator.generate(7, 7,
1072 {{{Decoration::Star | Decoration::Color::Orange, 6},
1073 {Decoration::Star | Decoration::Color::Green, 6},
1074 {Decoration::Start, 1},
1075 {Decoration::Exit, 1}}});
1076 },
1077 [](Generate& generator) {
1078 generator.setFlag(Generate::StartEdgeOnly);
1079 generator.setFlag(Generate::WriteInvisible);
1080 generator.setFlag(Generate::RequireCombineShapes);
1081 generator.setSymmetry(Panel::Rotational);
1082 generator.generate(5, 5,
1083 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
1084 {Decoration::Start, 1},
1085 {Decoration::Exit, 1}}});
1086 },
1087 [](Generate& generator) {
1088 generator.setFlag(Generate::StartEdgeOnly);
1089 generator.setFlag(Generate::WriteInvisible);
1090 generator.setSymmetry(Panel::Rotational);
1091 generator.generate(
1092 7, 7,
1093 {{{Decoration::Dot | Decoration::Color::Blue, 2},
1094 {Decoration::Dot | Decoration::Color::Yellow, 2},
1095 {Decoration::Dot, 8},
1096 {Decoration::Eraser | Decoration::Color::Purple, 1},
1097 {Decoration::Start, 1},
1098 {Decoration::Exit, 1}}});
1099 },
1100 [](Generate& generator) {
1101 generator.setSymbol(Decoration::Exit, 0, 0);
1102 generator.setSymbol(Decoration::Exit, 0, 4 * 4);
1103 generator.setSymbol(Decoration::Exit, 4 * 4, 0);
1104 generator.setSymbol(Decoration::Exit, 4 * 4, 4 * 4);
1105 generator.generate(8, 8,
1106 {{{Decoration::Stone | Decoration::Color::White, 10},
1107 {Decoration::Stone | Decoration::Color::Black, 10},
1108 {Decoration::Dot_Intersection, 81},
1109 {Decoration::Start, 8}}});
1110 },
1111 [](Generate& generator) {
1112 generator.setFlag(Generate::RegularStartEnd);
1113 generator.generate(
1114 6, 6,
1115 {{{Decoration::Dot_Intersection, 49},
1116 {Decoration::Poly | Decoration::Color::Orange, 1},
1117 {Decoration::Poly | Decoration::Color::Blue, 1},
1118 {Decoration::Poly | Decoration::Negative |
1119 Decoration::Color::Blue,
1120 2},
1121 {Decoration::Poly | Decoration::Negative |
1122 Decoration::Color::Orange,
1123 1},
1124 {Decoration::Star | Decoration::Color::Orange, 4},
1125 {Decoration::Star | Decoration::Color::Blue, 3},
1126 {Decoration::Triangle | Decoration::Color::Orange, 2},
1127 {Decoration::Triangle | Decoration::Color::Blue, 1},
1128 {Decoration::Stone | Decoration::Color::Orange, 1},
1129 {Decoration::Stone | Decoration::Color::Blue, 2},
1130 {Decoration::Eraser | Decoration::Color::White, 1}}});
1131 },
1132 [](Generate& generator) {
1133 generator.setFlag(Generate::RegularStartEnd);
1134 generator.setSymmetry(Panel::Rotational);
1135 generator.generate(
1136 7, 7, {{{Decoration::Poly | Decoration::Color::Yellow, 5}}});
1137 },
1138 [](Generate& generator) {
1139 generator.setFlag(Generate::RegularStartEnd);
1140 generator.generate(
1141 5, 5,
1142 {{{Decoration::Poly | Decoration::Color::Yellow, 2},
1143 {Decoration::Poly | Decoration::Color::Yellow |
1144 Decoration::Can_Rotate,
1145 1},
1146 {Decoration::Stone | Decoration::Color::Black, 5},
1147 {Decoration::Stone | Decoration::Color::White, 3}}});
1148 },
1149 [](Generate& generator) {
1150 generator.setFlag(Generate::RegularStartEnd);
1151 generator.setFlag(Generate::BigShapes);
1152 generator.generate(
1153 5, 5,
1154 {{{Decoration::Poly | Decoration::Color::Yellow |
1155 Decoration::Can_Rotate,
1156 2},
1157 {Decoration::Triangle | Decoration::Color::Orange, 3},
1158 {Decoration::Stone | Decoration::Color::Black, 3},
1159 {Decoration::Stone | Decoration::Color::White, 3}}});
1160 },
1161 [](Generate& generator) {
1162 generator.setFlag(Generate::StartEdgeOnly);
1163 generator.setSymbol(Decoration::Exit, 4 * 2, 0);
1164 generator.generate(5, 5,
1165 {{{Decoration::Dot_Intersection, 36},
1166 {Decoration::Poly | Decoration::Color::Yellow, 3},
1167 {Decoration::Start, 1}}});
1168 },
1169 [](Generate& generator) {
1170 generator.setFlag(Generate::RegularStartEnd);
1171 generator.setFlag(Generate::BigShapes);
1172 generator.setFlag(Generate::RequireCancelShapes);
1173 generator.generate(5, 5,
1174 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
1175 {Decoration::Poly | Decoration::Negative |
1176 Decoration::Color::Blue,
1177 3}}});
1178 },
1179 [](Generate& generator) {
1180 generator.setFlag(Generate::RegularStartEnd);
1181 generator.generate(
1182 5, 6,
1183 {{{Decoration::Dot_Intersection, 42},
1184 {Decoration::Poly | Decoration::Color::Yellow, 2},
1185 {Decoration::Poly | Decoration::Color::Yellow |
1186 Decoration::Can_Rotate,
1187 1},
1188 {Decoration::Triangle | Decoration::Color::Orange, 3},
1189 {Decoration::Stone | Decoration::Color::Black, 2},
1190 {Decoration::Stone | Decoration::Color::White, 2}}});
1191 },
1192 [](Generate& generator) {
1193 generator.setFlag(Generate::RegularStartEnd);
1194 generator.generate(
1195 5, 5,
1196 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
1197 {Decoration::Poly | Decoration::Negative |
1198 Decoration::Color::Blue,
1199 1},
1200 {Decoration::Stone | Decoration::Color::Black, 4},
1201 {Decoration::Stone | Decoration::Color::White, 3}}});
1202 },
1203 [](Generate& generator) {
1204 generator.setFlag(Generate::RegularStartEnd);
1205 generator.generate(
1206 5, 5,
1207 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
1208 {Decoration::Poly | Decoration::Negative |
1209 Decoration::Color::Blue,
1210 2},
1211 {Decoration::Triangle | Decoration::Color::Orange, 5}}});
1212 },
1213 [](Generate& generator) {
1214 generator.setFlag(Generate::RegularStartEnd);
1215 generator.generate(
1216 5, 5,
1217 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
1218 {Decoration::Poly | Decoration::Negative |
1219 Decoration::Color::Blue,
1220 1},
1221 {Decoration::Triangle | Decoration::Color::Orange, 3},
1222 {Decoration::Stone | Decoration::Color::Black, 2},
1223 {Decoration::Stone | Decoration::Color::White, 2}}});
1224 },
1225 [](Generate& generator) {
1226 generator.setFlag(Generate::RegularStartEnd);
1227 generator.generate(
1228 5, 5,
1229 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
1230 {Decoration::Poly | Decoration::Negative |
1231 Decoration::Color::Blue,
1232 2},
1233 {Decoration::Triangle | Decoration::Color::Orange, 3},
1234 {Decoration::Stone | Decoration::Color::Black, 2},
1235 {Decoration::Stone | Decoration::Color::White, 2}}});
1236 },
1237 [](Generate& generator) {
1238 generator.setFlag(Generate::DisconnectShapes);
1239 generator.setFlag(Generate::BigShapes);
1240 generator.setSymbol(Decoration::Start, 0, 5 * 2);
1241 generator.setSymbol(Decoration::Exit, 0, 0);
1242 generator.generate(
1243 5, 5,
1244 {{{Decoration::Poly | Decoration::Color::Yellow, 2},
1245 {Decoration::Poly | Decoration::Negative |
1246 Decoration::Color::Blue,
1247 1},
1248 {Decoration::Triangle | Decoration::Color::Orange, 3},
1249 {Decoration::Stone | Decoration::Color::Black, 2},
1250 {Decoration::Stone | Decoration::Color::White, 2}}});
1251 },
1252 [](Generate& generator) {
1253 generator.setFlag(Generate::StartEdgeOnly);
1254 generator.setFlag(Generate::BigShapes);
1255 generator.setSymbol(Decoration::Exit, 5 * 2, 0);
1256 generator.generate(5, 5,
1257 {{{Decoration::Dot_Intersection, 36},
1258 {Decoration::Poly | Decoration::Color::Yellow, 2},
1259 {Decoration::Poly | Decoration::Negative |
1260 Decoration::Color::Blue,
1261 1},
1262 {Decoration::Start, 1}}});
1263 },
1264 [](Generate& generator) {
1265 generator.setFlag(Generate::StartEdgeOnly);
1266 generator.setFlag(Generate::BigShapes);
1267 generator.setSymbol(Decoration::Exit, 5 * 2, 0);
1268 generator.generate(5, 5,
1269 {{{Decoration::Dot_Intersection, 36},
1270 {Decoration::Poly | Decoration::Color::Yellow, 3},
1271 {Decoration::Poly | Decoration::Negative |
1272 Decoration::Color::Blue,
1273 2},
1274 {Decoration::Start, 1}}});
1275 },
1276 [](Generate& generator) {
1277 generator.setFlag(Generate::TreehouseLayout);
1278 generator.generate(
1279 5, 5,
1280 {{{Decoration::Star | Decoration::Color::Orange, 4},
1281 {Decoration::Triangle | Decoration::Color::Orange, 6}}});
1282 },
1283 [](Generate& generator) {
1284 generator.setFlag(Generate::TreehouseLayout);
1285 generator.generate(
1286 5, 5,
1287 {{{Decoration::Star | Decoration::Color::Orange, 6},
1288 {Decoration::Triangle | Decoration::Color::Orange, 5}}});
1289 },
1290 [](Generate& generator) {
1291 generator.setFlag(Generate::RegularStartEnd);
1292 generator.generate(
1293 5, 5,
1294 {{{Decoration::Star | Decoration::Color::Orange, 5},
1295 {Decoration::Triangle | Decoration::Color::Orange, 3},
1296 {Decoration::Stone | Decoration::Color::Orange, 3}}});
1297 },
1298 [](Generate& generator) {
1299 generator.setFlag(Generate::TreehouseLayout);
1300 generator.generate(5, 5,
1301 {{{Decoration::Poly | Decoration::Color::Orange, 3},
1302 {Decoration::Poly | Decoration::Negative |
1303 Decoration::Color::Blue,
1304 1},
1305 {Decoration::Star | Decoration::Color::Orange, 5},
1306 {Decoration::Star | Decoration::Color::Blue, 3}}});
1307 },
1308 [](Generate& generator) {
1309 generator.setFlag(Generate::TreehouseLayout);
1310 generator.generate(5, 5,
1311 {{{Decoration::Poly | Decoration::Color::Orange, 3},
1312 {Decoration::Poly | Decoration::Negative |
1313 Decoration::Color::Blue,
1314 2},
1315 {Decoration::Star | Decoration::Color::Orange, 5},
1316 {Decoration::Star | Decoration::Color::Blue, 3}}});
1317 },
1318 [](Generate& generator) {
1319 generator.setFlag(Generate::TreehouseLayout);
1320 generator.generate(
1321 5, 5,
1322 {{{Decoration::Poly | Decoration::Color::Orange, 1},
1323 {Decoration::Poly | Decoration::Color::Magenta, 2},
1324 {Decoration::Poly | Decoration::Negative |
1325 Decoration::Color::Orange,
1326 2},
1327 {Decoration::Poly | Decoration::Negative |
1328 Decoration::Color::Blue,
1329 2},
1330 {Decoration::Star | Decoration::Color::Orange, 3},
1331 {Decoration::Star | Decoration::Color::Blue, 3},
1332 {Decoration::Star | Decoration::Color::Magenta, 3}}});
1333 },
1334 [](Generate& generator) {
1335 generator.setFlag(Generate::TreehouseLayout);
1336 generator.generate(
1337 5, 5,
1338 {{{Decoration::Poly | Decoration::Color::Magenta, 2},
1339 {Decoration::Poly | Decoration::Negative |
1340 Decoration::Color::Blue,
1341 2},
1342 {Decoration::Star | Decoration::Color::Magenta, 3},
1343 {Decoration::Star | Decoration::Color::Blue, 3},
1344 {Decoration::Triangle | Decoration::Color::Magenta, 2},
1345 {Decoration::Triangle | Decoration::Color::Blue, 2}}});
1346 },
1347 [](Generate& generator) {
1348 generator.setFlag(Generate::TreehouseLayout);
1349 generator.generate(
1350 5, 5,
1351 {{{Decoration::Poly | Decoration::Color::Orange, 1},
1352 {Decoration::Poly | Decoration::Color::Blue, 1},
1353 {Decoration::Poly | Decoration::Color::Green, 1},
1354 {Decoration::Poly | Decoration::Negative |
1355 Decoration::Color::Blue,
1356 1},
1357 {Decoration::Poly | Decoration::Negative |
1358 Decoration::Color::Magenta,
1359 2},
1360 {Decoration::Star | Decoration::Color::Green, 2},
1361 {Decoration::Star | Decoration::Color::Magenta, 1},
1362 {Decoration::Star | Decoration::Color::Orange, 1},
1363 {Decoration::Star | Decoration::Color::Blue, 2},
1364 {Decoration::Triangle | Decoration::Color::Magenta, 2},
1365 {Decoration::Triangle | Decoration::Color::Orange, 1},
1366 {Decoration::Triangle | Decoration::Color::Green, 2}}});
1367 },
1368 [](Generate& generator) {
1369 generator.setFlag(Generate::TreehouseLayout);
1370 generator.generate(
1371 5, 5,
1372 {{{Decoration::Star | Decoration::Color::Orange, 4},
1373 {Decoration::Star | Decoration::Color::Magenta, 4},
1374 {Decoration::Triangle | Decoration::Color::Orange, 2},
1375 {Decoration::Triangle | Decoration::Color::Magenta, 2}}});
1376 },
1377 [](Generate& generator) {
1378 generator.setFlag(Generate::TreehouseLayout);
1379 generator.generate(
1380 5, 5,
1381 {{{Decoration::Star | Decoration::Color::Orange, 3},
1382 {Decoration::Star | Decoration::Color::Magenta, 3},
1383 {Decoration::Star | Decoration::Color::Green, 6},
1384 {Decoration::Triangle | Decoration::Color::Orange, 2},
1385 {Decoration::Triangle | Decoration::Color::Magenta, 2}}});
1386 },
1387 [](Generate& generator) {
1388 generator.setFlag(Generate::TreehouseLayout);
1389 generator.generate(
1390 5, 5,
1391 {{{Decoration::Star | Decoration::Color::Orange, 4},
1392 {Decoration::Star | Decoration::Color::Magenta, 4},
1393 {Decoration::Star | Decoration::Color::Green, 6},
1394 {Decoration::Triangle | Decoration::Color::Orange, 1},
1395 {Decoration::Triangle | Decoration::Color::Magenta, 1}}});
1396 },
1397 [](Generate& generator) {
1398 generator.setFlag(Generate::TreehouseLayout);
1399 generator.generate(
1400 5, 5,
1401 {{{Decoration::Star | Decoration::Color::Orange, 2},
1402 {Decoration::Star | Decoration::Color::Magenta, 2},
1403 {Decoration::Star | Decoration::Color::White, 2},
1404 {Decoration::Star | Decoration::Color::Green, 2},
1405 {Decoration::Star | Decoration::Color::Black, 2},
1406 {Decoration::Triangle | Decoration::Color::Orange, 1},
1407 {Decoration::Triangle | Decoration::Color::Magenta, 1},
1408 {Decoration::Triangle | Decoration::Color::White, 1},
1409 {Decoration::Triangle | Decoration::Color::Green, 1},
1410 {Decoration::Triangle | Decoration::Color::Black, 1}}});
1411 },
1412 [](Generate& generator) {
1413 generator.setFlag(Generate::TreehouseLayout);
1414 generator.generate(5, 5,
1415 {{{Decoration::Star | Decoration::Color::Magenta, 4},
1416 {Decoration::Star | Decoration::Color::Orange, 6},
1417 {Decoration::Dot_Intersection, 36}}});
1418 },
1419 [](Generate& generator) {
1420 generator.setGridSize(7, 7);
1421 generator.setFlag(Generate::RequireCombineShapes);
1422 generator.setSymmetry(Panel::ParallelV);
1423 generator.setSymbol(Decoration::Start, 0, 14);
1424 generator.setSymbol(Decoration::Start, 8, 14);
1425 generator.setSymbol(Decoration::Exit, 6, 0);
1426 generator.setSymbol(Decoration::Exit, 14, 0);
1427 generator.generate(
1428 7, 7, {{{Decoration::Poly | Decoration::Color::Orange, 5}}});
1429 },
1430 [](Generate& generator) {
1431 generator.setGridSize(7, 7);
1432 generator.setFlag(Generate::RequireCombineShapes);
1433 generator.setSymmetry(Panel::ParallelHFlip);
1434 generator.setSymbol(Decoration::Start, 0, 14);
1435 generator.setSymbol(Decoration::Start, 14, 6);
1436 generator.setSymbol(Decoration::Exit, 0, 0);
1437 generator.setSymbol(Decoration::Exit, 14, 8);
1438 generator.generate(
1439 7, 7, {{{Decoration::Poly | Decoration::Color::Orange, 5}}});
1440 },
1441 [](Generate& generator) {
1442 generator.setGridSize(7, 7);
1443 generator.setFlag(Generate::RequireCombineShapes);
1444 generator.setSymmetry(Panel::ParallelVFlip);
1445 generator.setSymbol(Decoration::Start, 0, 14);
1446 generator.setSymbol(Decoration::Start, 8, 0);
1447 generator.setSymbol(Decoration::Exit, 6, 0);
1448 generator.setSymbol(Decoration::Exit, 14, 14);
1449 generator.generate(
1450 7, 7, {{{Decoration::Poly | Decoration::Color::Orange, 5}}});
1451 },
1452 [](Generate& generator) {
1453 generator.setSymmetry(Panel::Symmetry::RotateLeft);
1454 generator.setSymbol(Decoration::Start, 4, 4);
1455 generator.setSymbol(Decoration::Start, 10, 4);
1456 generator.setSymbol(Decoration::Start, 4, 10);
1457 generator.setSymbol(Decoration::Start, 10, 10);
1458 generator.setSymbol(Decoration::Exit, 4, 0);
1459 generator.setSymbol(Decoration::Exit, 14, 4);
1460 generator.setSymbol(Decoration::Exit, 0, 10);
1461 generator.setSymbol(Decoration::Exit, 10, 14);
1462 generator.generate(
1463 7, 7,
1464 {{{Decoration::Triangle4 | Decoration::Color::Orange, 1},
1465 {Decoration::Triangle | Decoration::Color::Orange, 4}}});
1466 },
1467 [](Generate& generator) {
1468 generator.setFlag(Generate::WriteInvisible);
1469 generator.setFlag(Generate::StartEdgeOnly);
1470 generator.setSymmetry(Panel::Symmetry::FlipXY);
1471 generator.setSymbol(Decoration::Exit, 0, 8);
1472 generator.setSymbol(Decoration::Exit, 8, 0);
1473 generator.generate(7, 7,
1474 {{{Decoration::Dot | Decoration::Color::Blue, 2},
1475 {Decoration::Dot | Decoration::Color::Yellow, 2},
1476 {Decoration::Dot, 8},
1477 {Decoration::Eraser | Decoration::Color::White, 1},
1478 {Decoration::Start, 1}}});
1479 },
1480 [](Generate& generator) {
1481 generator.setSymmetry(Panel::Symmetry::FlipXY);
1482 generator.setSymbol(Decoration::Start, 0, 16);
1483 generator.setSymbol(Decoration::Start, 16, 0);
1484 generator.setSymbol(Decoration::Exit, 8, 0);
1485 generator.setSymbol(Decoration::Exit, 8, 16);
1486 generator.setSymbol(Decoration::Exit, 0, 8);
1487 generator.setSymbol(Decoration::Exit, 16, 8);
1488 generator.generate(
1489 8, 8,
1490 {{{Decoration::Triangle | Decoration::Color::Cyan, 3},
1491 {Decoration::Triangle | Decoration::Color::Yellow, 2},
1492 {Decoration::Star | Decoration::Color::Cyan, 3},
1493 {Decoration::Star | Decoration::Color::Yellow, 3},
1494 {Decoration::Stone | Decoration::Color::Cyan, 2},
1495 {Decoration::Stone | Decoration::Color::Yellow, 3}}});
1496 },
1497 [](Generate& generator) {
1498 generator.setGridSize(7, 7);
1499 generator.setSymmetry((Random::rand() % 2) == 0
1500 ? Panel::Symmetry::Vertical
1501 : Panel::Symmetry::Horizontal);
1502 generator.setFlag(Generate::WriteInvisible);
1503 generator.setFlag(Generate::DisableDotIntersection);
1504 MakeSecretSymmetryGrid(generator);
1505 generator.generate(
1506 7, 7,
1507 {{{Decoration::Dot | Decoration::Color::Cyan, 2},
1508 {Decoration::Dot | Decoration::Color::Yellow, 2},
1509 {Decoration::Triangle | Decoration::Color::Orange, 4}}});
1510 },
1511 [](Generate& generator) {
1512 generator.setGridSize(7, 7);
1513 generator.setSymmetry((Random::rand() % 2) == 0
1514 ? Panel::Symmetry::ParallelH
1515 : Panel::Symmetry::ParallelV);
1516 generator.setFlag(Generate::WriteInvisible);
1517 generator.setFlag(Generate::DisableDotIntersection);
1518 MakeSecretSymmetryGrid(generator);
1519 generator.generate(
1520 7, 7,
1521 {{{Decoration::Dot | Decoration::Color::Cyan, 2},
1522 {Decoration::Dot | Decoration::Color::Yellow, 2},
1523 {Decoration::Triangle | Decoration::Color::Orange, 4}}});
1524 },
1525 [](Generate& generator) {
1526 generator.setGridSize(7, 7);
1527 generator.setSymmetry(Panel::Symmetry::Rotational);
1528 generator.setFlag(Generate::WriteInvisible);
1529 generator.setFlag(Generate::DisableDotIntersection);
1530 MakeSecretSymmetryGrid(generator);
1531 generator.generate(
1532 7, 7,
1533 {{{Decoration::Dot | Decoration::Color::Cyan, 2},
1534 {Decoration::Dot | Decoration::Color::Yellow, 2},
1535 {Decoration::Triangle | Decoration::Color::Orange, 4}}});
1536 },
1537 [](Generate& generator) {
1538 generator.setGridSize(7, 7);
1539 generator.setSymmetry((Random::rand() % 2) == 0
1540 ? Panel::Symmetry::ParallelHFlip
1541 : Panel::Symmetry::ParallelVFlip);
1542 generator.setFlag(Generate::WriteInvisible);
1543 generator.setFlag(Generate::DisableDotIntersection);
1544 MakeSecretSymmetryGrid(generator);
1545 generator.generate(
1546 7, 7,
1547 {{{Decoration::Dot | Decoration::Color::Cyan, 2},
1548 {Decoration::Dot | Decoration::Color::Yellow, 2},
1549 {Decoration::Triangle | Decoration::Color::Orange, 4}}});
1550 },
1551 };
1552
1066 Generate generator; 1553 Generate generator;
1067 1554
1068 int choice = Random::rand() % 50; 1555 int choice = Random::rand() % generator_fns.size();
1069 std::cout << "Generate EXPERT: choice " << std::dec << choice << std::endl; 1556 std::cout << "Generate EXPERT: choice " << std::dec << choice << std::endl;
1070 1557
1071 switch (choice) { 1558 generator_fns.at(choice)(generator);
1072 case 0: {
1073 generator.setFlag(Generate::StartEdgeOnly);
1074 generator.setSymmetry(Panel::Rotational);
1075 generator.generate(
1076 6, 6,
1077 {{{Decoration::Triangle | Decoration::Color::Orange, 12},
1078 {Decoration::Start, 1},
1079 {Decoration::Exit, 1}}});
1080 break;
1081 }
1082 case 1: {
1083 generator.setFlag(Generate::StartEdgeOnly);
1084 generator.setFlag(Generate::WriteInvisible);
1085 generator.setSymmetry(Panel::Rotational);
1086 generator.generate(7, 7,
1087 {{{Decoration::Dot | Decoration::Color::Blue, 4},
1088 {Decoration::Dot | Decoration::Color::Yellow, 4},
1089 {Decoration::Dot, 7},
1090 {Decoration::Start, 1},
1091 {Decoration::Exit, 1}}});
1092 break;
1093 }
1094 case 2: {
1095 generator.setFlag(Generate::StartEdgeOnly);
1096 generator.setFlag(Generate::WriteInvisible);
1097 generator.setSymmetry(Panel::Rotational);
1098 generator.generate(7, 7,
1099 {{{Decoration::Stone | Decoration::Color::Black, 6},
1100 {Decoration::Stone | Decoration::Color::White, 6},
1101 {Decoration::Start, 1},
1102 {Decoration::Exit, 1}}});
1103 break;
1104 }
1105 case 3: {
1106 generator.setFlag(Generate::StartEdgeOnly);
1107 generator.setFlag(Generate::WriteInvisible);
1108 generator.setSymmetry(Panel::Rotational);
1109 generator.generate(7, 7,
1110 {{{Decoration::Star | Decoration::Color::Orange, 6},
1111 {Decoration::Star | Decoration::Color::Green, 6},
1112 {Decoration::Start, 1},
1113 {Decoration::Exit, 1}}});
1114 break;
1115 }
1116 case 4: {
1117 generator.setFlag(Generate::StartEdgeOnly);
1118 generator.setFlag(Generate::WriteInvisible);
1119 generator.setFlag(Generate::RequireCombineShapes);
1120 generator.setSymmetry(Panel::Rotational);
1121 generator.generate(5, 5,
1122 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
1123 {Decoration::Start, 1},
1124 {Decoration::Exit, 1}}});
1125 break;
1126 }
1127 case 5: {
1128 generator.setFlag(Generate::StartEdgeOnly);
1129 generator.setFlag(Generate::WriteInvisible);
1130 generator.setSymmetry(Panel::Rotational);
1131 generator.generate(7, 7,
1132 {{{Decoration::Dot | Decoration::Color::Blue, 2},
1133 {Decoration::Dot | Decoration::Color::Yellow, 2},
1134 {Decoration::Dot, 8},
1135 {Decoration::Eraser | Decoration::Color::Purple, 1},
1136 {Decoration::Start, 1},
1137 {Decoration::Exit, 1}}});
1138 break;
1139 }
1140 case 6: {
1141 generator.setFlag(Generate::RegularStartEnd);
1142 generator.generate(
1143 4, 4,
1144 {{{Decoration::Triangle | Decoration::Color::Orange, 15},
1145 {Decoration::Eraser | Decoration::Color::Purple, 1}}});
1146 break;
1147 }
1148 case 7: {
1149 generator.setFlag(Generate::RegularStartEnd);
1150 generator.generate(
1151 4, 4,
1152 {{{Decoration::Stone | Decoration::Color::White, 1},
1153 {Decoration::Stone | Decoration::Color::Black, 2},
1154 {Decoration::Stone | Decoration::Color::Red, 2},
1155 {Decoration::Star | Decoration::Color::White, 4},
1156 {Decoration::Star | Decoration::Color::Black, 3},
1157 {Decoration::Star | Decoration::Color::Red, 3},
1158 {Decoration::Decoration::Eraser | Decoration::Color::Green, 1}}});
1159 break;
1160 }
1161 case 8: {
1162 generator.setSymbol(Decoration::Exit, 0, 0);
1163 generator.setSymbol(Decoration::Exit, 0, 4 * 4);
1164 generator.setSymbol(Decoration::Exit, 4 * 4, 0);
1165 generator.setSymbol(Decoration::Exit, 4 * 4, 4 * 4);
1166 generator.generate(8, 8,
1167 {{{Decoration::Stone | Decoration::Color::White, 10},
1168 {Decoration::Stone | Decoration::Color::Black, 10},
1169 {Decoration::Dot_Intersection, 81},
1170 {Decoration::Start, 8}}});
1171 break;
1172 }
1173 case 9: {
1174 generator.setFlag(Generate::RegularStartEnd);
1175 generator.generate(
1176 6, 6,
1177 {{{Decoration::Dot_Intersection, 49},
1178 {Decoration::Poly | Decoration::Color::Orange, 1},
1179 {Decoration::Poly | Decoration::Color::Blue, 1},
1180 {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue,
1181 2},
1182 {Decoration::Poly | Decoration::Negative |
1183 Decoration::Color::Orange,
1184 1},
1185 {Decoration::Star | Decoration::Color::Orange, 4},
1186 {Decoration::Star | Decoration::Color::Blue, 3},
1187 {Decoration::Triangle | Decoration::Color::Orange, 2},
1188 {Decoration::Triangle | Decoration::Color::Blue, 1},
1189 {Decoration::Stone | Decoration::Color::Orange, 1},
1190 {Decoration::Stone | Decoration::Color::Blue, 2},
1191 {Decoration::Eraser | Decoration::Color::White, 1}}});
1192 break;
1193 }
1194 case 10: {
1195 generator.setFlag(Generate::RegularStartEnd);
1196 generator.setSymmetry(Panel::Vertical);
1197 generator.generate(7, 7,
1198 {{{Decoration::Poly | Decoration::Color::Yellow, 5}}});
1199 break;
1200 }
1201 case 11: {
1202 generator.setFlag(Generate::RegularStartEnd);
1203 generator.setSymmetry(Panel::Rotational);
1204 generator.generate(7, 7,
1205 {{{Decoration::Poly | Decoration::Color::Yellow, 5}}});
1206 break;
1207 }
1208 case 12: {
1209 generator.setFlag(Generate::RegularStartEnd);
1210 generator.generate(5, 5,
1211 {{{Decoration::Poly | Decoration::Color::Yellow, 2},
1212 {Decoration::Poly | Decoration::Color::Yellow |
1213 Decoration::Can_Rotate,
1214 1},
1215 {Decoration::Stone | Decoration::Color::Black, 5},
1216 {Decoration::Stone | Decoration::Color::White, 3}}});
1217 break;
1218 }
1219 case 13: {
1220 generator.setFlag(Generate::RegularStartEnd);
1221 generator.generate(
1222 4, 4,
1223 {{{Decoration::Poly | Decoration::Color::Yellow, 1},
1224 {Decoration::Poly | Decoration::Color::Yellow |
1225 Decoration::Can_Rotate,
1226 1},
1227 {Decoration::Triangle | Decoration::Color::Orange, 3}}});
1228 break;
1229 }
1230 case 14: {
1231 generator.setFlag(Generate::RegularStartEnd);
1232 generator.generate(
1233 4, 4,
1234 {{{Decoration::Poly | Decoration::Color::Yellow, 2},
1235 {Decoration::Poly | Decoration::Color::Yellow |
1236 Decoration::Can_Rotate,
1237 1},
1238 {Decoration::Triangle | Decoration::Color::Orange, 2},
1239 {Decoration::Stone | Decoration::Color::Black, 2},
1240 {Decoration::Stone | Decoration::Color::White, 2}}});
1241 break;
1242 }
1243 case 15: {
1244 generator.setFlag(Generate::RegularStartEnd);
1245 generator.setFlag(Generate::BigShapes);
1246 generator.generate(
1247 5, 5,
1248 {{{Decoration::Poly | Decoration::Color::Yellow |
1249 Decoration::Can_Rotate,
1250 2},
1251 {Decoration::Triangle | Decoration::Color::Orange, 3},
1252 {Decoration::Stone | Decoration::Color::Black, 3},
1253 {Decoration::Stone | Decoration::Color::White, 3}}});
1254 break;
1255 }
1256 case 16: {
1257 generator.setFlag(Generate::StartEdgeOnly);
1258 generator.setSymbol(Decoration::Exit, 4 * 2, 0);
1259 generator.generate(4, 4,
1260 {{{Decoration::Dot_Intersection, 25},
1261 {Decoration::Poly | Decoration::Color::Yellow, 1},
1262 {Decoration::Poly | Decoration::Color::Yellow |
1263 Decoration::Can_Rotate,
1264 2},
1265 {Decoration::Start, 1}}});
1266 break;
1267 }
1268 case 17: {
1269 generator.setFlag(Generate::StartEdgeOnly);
1270 generator.setSymbol(Decoration::Exit, 4 * 2, 0);
1271 generator.generate(5, 5,
1272 {{{Decoration::Dot_Intersection, 36},
1273 {Decoration::Poly | Decoration::Color::Yellow, 3},
1274 {Decoration::Start, 1}}});
1275 break;
1276 }
1277 case 18: {
1278 generator.setFlag(Generate::RegularStartEnd);
1279 generator.setFlag(Generate::BigShapes);
1280 generator.setFlag(Generate::RequireCancelShapes);
1281 generator.generate(
1282 5, 5,
1283 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
1284 {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue,
1285 3}}});
1286 break;
1287 }
1288 case 19: {
1289 generator.setFlag(Generate::RegularStartEnd);
1290 generator.generate(
1291 5, 6,
1292 {{{Decoration::Dot_Intersection, 42},
1293 {Decoration::Poly | Decoration::Color::Yellow, 2},
1294 {Decoration::Poly | Decoration::Color::Yellow |
1295 Decoration::Can_Rotate,
1296 1},
1297 {Decoration::Triangle | Decoration::Color::Orange, 3},
1298 {Decoration::Stone | Decoration::Color::Black, 2},
1299 {Decoration::Stone | Decoration::Color::White, 2}}});
1300 break;
1301 }
1302 case 20: {
1303 generator.setFlag(Generate::RegularStartEnd);
1304 generator.generate(
1305 5, 5,
1306 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
1307 {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue,
1308 1},
1309 {Decoration::Stone | Decoration::Color::Black, 4},
1310 {Decoration::Stone | Decoration::Color::White, 3}}});
1311 break;
1312 }
1313 case 21: {
1314 generator.setFlag(Generate::RegularStartEnd);
1315 generator.generate(
1316 5, 5,
1317 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
1318 {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue,
1319 2},
1320 {Decoration::Triangle | Decoration::Color::Orange, 5}}});
1321 break;
1322 }
1323 case 22: {
1324 generator.setFlag(Generate::RegularStartEnd);
1325 generator.generate(
1326 5, 5,
1327 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
1328 {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue,
1329 1},
1330 {Decoration::Triangle | Decoration::Color::Orange, 3},
1331 {Decoration::Stone | Decoration::Color::Black, 2},
1332 {Decoration::Stone | Decoration::Color::White, 2}}});
1333 break;
1334 }
1335 case 23: {
1336 generator.setFlag(Generate::RegularStartEnd);
1337 generator.generate(
1338 5, 5,
1339 {{{Decoration::Poly | Decoration::Color::Yellow, 3},
1340 {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue,
1341 2},
1342 {Decoration::Triangle | Decoration::Color::Orange, 3},
1343 {Decoration::Stone | Decoration::Color::Black, 2},
1344 {Decoration::Stone | Decoration::Color::White, 2}}});
1345 break;
1346 }
1347 case 24: {
1348 generator.setFlag(Generate::DisconnectShapes);
1349 generator.setFlag(Generate::BigShapes);
1350 generator.setSymbol(Decoration::Start, 0, 5 * 2);
1351 generator.setSymbol(Decoration::Exit, 0, 0);
1352 generator.generate(
1353 5, 5,
1354 {{{Decoration::Poly | Decoration::Color::Yellow, 2},
1355 {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue,
1356 1},
1357 {Decoration::Triangle | Decoration::Color::Orange, 3},
1358 {Decoration::Stone | Decoration::Color::Black, 2},
1359 {Decoration::Stone | Decoration::Color::White, 2}}});
1360 break;
1361 }
1362 case 25: {
1363 generator.setFlag(Generate::StartEdgeOnly);
1364 generator.setFlag(Generate::BigShapes);
1365 generator.setSymbol(Decoration::Exit, 5 * 2, 0);
1366 generator.generate(
1367 5, 5,
1368 {{{Decoration::Dot_Intersection, 36},
1369 {Decoration::Poly | Decoration::Color::Yellow, 2},
1370 {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue,
1371 1},
1372 {Decoration::Start, 1}}});
1373 break;
1374 }
1375 case 26: {
1376 generator.setFlag(Generate::StartEdgeOnly);
1377 generator.setFlag(Generate::BigShapes);
1378 generator.setSymbol(Decoration::Exit, 5 * 2, 0);
1379 generator.generate(
1380 5, 5,
1381 {{{Decoration::Dot_Intersection, 36},
1382 {Decoration::Poly | Decoration::Color::Yellow, 3},
1383 {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue,
1384 2},
1385 {Decoration::Start, 1}}});
1386 break;
1387 }
1388 case 27: {
1389 generator.setFlag(Generate::TreehouseLayout);
1390 generator.generate(
1391 5, 5,
1392 {{{Decoration::Star | Decoration::Color::Orange, 4},
1393 {Decoration::Triangle | Decoration::Color::Orange, 6}}});
1394 break;
1395 }
1396 case 28: {
1397 generator.setFlag(Generate::TreehouseLayout);
1398 generator.generate(
1399 5, 5,
1400 {{{Decoration::Star | Decoration::Color::Orange, 6},
1401 {Decoration::Triangle | Decoration::Color::Orange, 5}}});
1402 break;
1403 }
1404 case 29: {
1405 generator.setFlag(Generate::RegularStartEnd);
1406 generator.generate(
1407 5, 5,
1408 {{{Decoration::Star | Decoration::Color::Orange, 5},
1409 {Decoration::Triangle | Decoration::Color::Orange, 3},
1410 {Decoration::Stone | Decoration::Color::Orange, 3}}});
1411 break;
1412 }
1413 case 30: {
1414 generator.setFlag(Generate::TreehouseLayout);
1415 generator.generate(
1416 5, 5,
1417 {{{Decoration::Poly | Decoration::Color::Orange, 3},
1418 {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue,
1419 1},
1420 {Decoration::Star | Decoration::Color::Orange, 5},
1421 {Decoration::Star | Decoration::Color::Blue, 3}}});
1422 break;
1423 }
1424 case 31: {
1425 generator.setFlag(Generate::TreehouseLayout);
1426 generator.generate(
1427 5, 5,
1428 {{{Decoration::Poly | Decoration::Color::Orange, 3},
1429 {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue,
1430 2},
1431 {Decoration::Star | Decoration::Color::Orange, 5},
1432 {Decoration::Star | Decoration::Color::Blue, 3}}});
1433 break;
1434 }
1435 case 32: {
1436 generator.setFlag(Generate::TreehouseLayout);
1437 generator.generate(
1438 5, 5,
1439 {{{Decoration::Poly | Decoration::Color::Orange, 1},
1440 {Decoration::Poly | Decoration::Color::Magenta, 2},
1441 {Decoration::Poly | Decoration::Negative |
1442 Decoration::Color::Orange,
1443 2},
1444 {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue,
1445 2},
1446 {Decoration::Star | Decoration::Color::Orange, 3},
1447 {Decoration::Star | Decoration::Color::Blue, 3},
1448 {Decoration::Star | Decoration::Color::Magenta, 3}}});
1449 break;
1450 }
1451 case 33: {
1452 generator.setFlag(Generate::TreehouseLayout);
1453 generator.generate(
1454 5, 5,
1455 {{{Decoration::Poly | Decoration::Color::Magenta, 2},
1456 {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue,
1457 2},
1458 {Decoration::Star | Decoration::Color::Magenta, 3},
1459 {Decoration::Star | Decoration::Color::Blue, 3},
1460 {Decoration::Triangle | Decoration::Color::Magenta, 2},
1461 {Decoration::Triangle | Decoration::Color::Blue, 2}}});
1462 break;
1463 }
1464 case 34: {
1465 generator.setFlag(Generate::TreehouseLayout);
1466 generator.generate(
1467 5, 5,
1468 {{{Decoration::Poly | Decoration::Color::Orange, 1},
1469 {Decoration::Poly | Decoration::Color::Blue, 1},
1470 {Decoration::Poly | Decoration::Color::Green, 1},
1471 {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue,
1472 1},
1473 {Decoration::Poly | Decoration::Negative |
1474 Decoration::Color::Magenta,
1475 2},
1476 {Decoration::Star | Decoration::Color::Green, 2},
1477 {Decoration::Star | Decoration::Color::Magenta, 1},
1478 {Decoration::Star | Decoration::Color::Orange, 1},
1479 {Decoration::Star | Decoration::Color::Blue, 2},
1480 {Decoration::Triangle | Decoration::Color::Magenta, 2},
1481 {Decoration::Triangle | Decoration::Color::Orange, 1},
1482 {Decoration::Triangle | Decoration::Color::Green, 2}}});
1483 break;
1484 }
1485 case 35: {
1486 generator.setFlag(Generate::TreehouseLayout);
1487 generator.generate(
1488 5, 5,
1489 {{{Decoration::Star | Decoration::Color::Orange, 4},
1490 {Decoration::Star | Decoration::Color::Magenta, 4},
1491 {Decoration::Triangle | Decoration::Color::Orange, 2},
1492 {Decoration::Triangle | Decoration::Color::Magenta, 2}}});
1493 break;
1494 }
1495 case 36: {
1496 generator.setFlag(Generate::TreehouseLayout);
1497 generator.generate(
1498 5, 5,
1499 {{{Decoration::Star | Decoration::Color::Orange, 3},
1500 {Decoration::Star | Decoration::Color::Magenta, 3},
1501 {Decoration::Star | Decoration::Color::Green, 6},
1502 {Decoration::Triangle | Decoration::Color::Orange, 2},
1503 {Decoration::Triangle | Decoration::Color::Magenta, 2}}});
1504 break;
1505 }
1506 case 37: {
1507 generator.setFlag(Generate::TreehouseLayout);
1508 generator.generate(
1509 5, 5,
1510 {{{Decoration::Star | Decoration::Color::Orange, 4},
1511 {Decoration::Star | Decoration::Color::Magenta, 4},
1512 {Decoration::Star | Decoration::Color::Green, 6},
1513 {Decoration::Triangle | Decoration::Color::Orange, 1},
1514 {Decoration::Triangle | Decoration::Color::Magenta, 1}}});
1515 break;
1516 }
1517 case 38: {
1518 generator.setFlag(Generate::TreehouseLayout);
1519 generator.generate(
1520 5, 5,
1521 {{{Decoration::Star | Decoration::Color::Orange, 2},
1522 {Decoration::Star | Decoration::Color::Magenta, 2},
1523 {Decoration::Star | Decoration::Color::White, 2},
1524 {Decoration::Star | Decoration::Color::Green, 2},
1525 {Decoration::Star | Decoration::Color::Black, 2},
1526 {Decoration::Triangle | Decoration::Color::Orange, 1},
1527 {Decoration::Triangle | Decoration::Color::Magenta, 1},
1528 {Decoration::Triangle | Decoration::Color::White, 1},
1529 {Decoration::Triangle | Decoration::Color::Green, 1},
1530 {Decoration::Triangle | Decoration::Color::Black, 1}}});
1531 break;
1532 }
1533 case 39: {
1534 generator.setFlag(Generate::TreehouseLayout);
1535 generator.generate(5, 5,
1536 {{{Decoration::Star | Decoration::Color::Magenta, 4},
1537 {Decoration::Star | Decoration::Color::Orange, 6},
1538 {Decoration::Dot_Intersection, 36}}});
1539 break;
1540 }
1541 case 40: {
1542 generator.setGridSize(7, 7);
1543 generator.setFlag(Generate::RequireCombineShapes);
1544 generator.setSymmetry(Panel::ParallelV);
1545 generator.setSymbol(Decoration::Start, 0, 14);
1546 generator.setSymbol(Decoration::Start, 8, 14);
1547 generator.setSymbol(Decoration::Exit, 6, 0);
1548 generator.setSymbol(Decoration::Exit, 14, 0);
1549 generator.generate(7, 7,
1550 {{{Decoration::Poly | Decoration::Color::Orange, 5}}});
1551 break;
1552 }
1553 case 41: {
1554 generator.setGridSize(7, 7);
1555 generator.setFlag(Generate::RequireCombineShapes);
1556 generator.setSymmetry(Panel::ParallelHFlip);
1557 generator.setSymbol(Decoration::Start, 0, 14);
1558 generator.setSymbol(Decoration::Start, 14, 6);
1559 generator.setSymbol(Decoration::Exit, 0, 0);
1560 generator.setSymbol(Decoration::Exit, 14, 8);
1561 generator.generate(7, 7,
1562 {{{Decoration::Poly | Decoration::Color::Orange, 5}}});
1563 break;
1564 }
1565 case 42: {
1566 generator.setGridSize(7, 7);
1567 generator.setFlag(Generate::RequireCombineShapes);
1568 generator.setSymmetry(Panel::ParallelVFlip);
1569 generator.setSymbol(Decoration::Start, 0, 14);
1570 generator.setSymbol(Decoration::Start, 8, 0);
1571 generator.setSymbol(Decoration::Exit, 6, 0);
1572 generator.setSymbol(Decoration::Exit, 14, 14);
1573 generator.generate(7, 7,
1574 {{{Decoration::Poly | Decoration::Color::Orange, 5}}});
1575 break;
1576 }
1577 case 43: {
1578 generator.setSymmetry(Panel::Symmetry::RotateLeft);
1579 generator.setSymbol(Decoration::Start, 4, 4);
1580 generator.setSymbol(Decoration::Start, 10, 4);
1581 generator.setSymbol(Decoration::Start, 4, 10);
1582 generator.setSymbol(Decoration::Start, 10, 10);
1583 generator.setSymbol(Decoration::Exit, 4, 0);
1584 generator.setSymbol(Decoration::Exit, 14, 4);
1585 generator.setSymbol(Decoration::Exit, 0, 10);
1586 generator.setSymbol(Decoration::Exit, 10, 14);
1587 generator.generate(
1588 7, 7,
1589 {{{Decoration::Triangle4 | Decoration::Color::Orange, 1},
1590 {Decoration::Triangle | Decoration::Color::Orange, 4}}});
1591 break;
1592 }
1593 case 44: {
1594 generator.setFlag(Generate::WriteInvisible);
1595 generator.setFlag(Generate::StartEdgeOnly);
1596 generator.setSymmetry(Panel::Symmetry::FlipXY);
1597 generator.setSymbol(Decoration::Exit, 0, 8);
1598 generator.setSymbol(Decoration::Exit, 8, 0);
1599 generator.generate(7, 7,
1600 {{{Decoration::Dot | Decoration::Color::Blue, 2},
1601 {Decoration::Dot | Decoration::Color::Yellow, 2},
1602 {Decoration::Dot, 8},
1603 {Decoration::Eraser | Decoration::Color::White, 1},
1604 {Decoration::Start, 1}}});
1605 break;
1606 }
1607 case 45: {
1608 generator.setSymmetry(Panel::Symmetry::FlipXY);
1609 generator.setSymbol(Decoration::Start, 0, 16);
1610 generator.setSymbol(Decoration::Start, 16, 0);
1611 generator.setSymbol(Decoration::Exit, 8, 0);
1612 generator.setSymbol(Decoration::Exit, 8, 16);
1613 generator.setSymbol(Decoration::Exit, 0, 8);
1614 generator.setSymbol(Decoration::Exit, 16, 8);
1615 generator.generate(
1616 8, 8,
1617 {{{Decoration::Triangle | Decoration::Color::Cyan, 3},
1618 {Decoration::Triangle | Decoration::Color::Yellow, 2},
1619 {Decoration::Star | Decoration::Color::Cyan, 3},
1620 {Decoration::Star | Decoration::Color::Yellow, 3},
1621 {Decoration::Stone | Decoration::Color::Cyan, 2},
1622 {Decoration::Stone | Decoration::Color::Yellow, 3}}});
1623 break;
1624 }
1625 case 46: {
1626 generator.setGridSize(7, 7);
1627 generator.setSymmetry((Random::rand() % 2) == 0
1628 ? Panel::Symmetry::Vertical
1629 : Panel::Symmetry::Horizontal);
1630 generator.setFlag(Generate::WriteInvisible);
1631 generator.setFlag(Generate::DisableDotIntersection);
1632 MakeSecretSymmetryGrid(generator);
1633 generator.generate(
1634 7, 7,
1635 {{{Decoration::Dot | Decoration::Color::Cyan, 2},
1636 {Decoration::Dot | Decoration::Color::Yellow, 2},
1637 {Decoration::Triangle | Decoration::Color::Orange, 4}}});
1638 break;
1639 }
1640 case 47: {
1641 generator.setGridSize(7, 7);
1642 generator.setSymmetry((Random::rand() % 2) == 0
1643 ? Panel::Symmetry::ParallelH
1644 : Panel::Symmetry::ParallelV);
1645 generator.setFlag(Generate::WriteInvisible);
1646 generator.setFlag(Generate::DisableDotIntersection);
1647 MakeSecretSymmetryGrid(generator);
1648 generator.generate(
1649 7, 7,
1650 {{{Decoration::Dot | Decoration::Color::Cyan, 2},
1651 {Decoration::Dot | Decoration::Color::Yellow, 2},
1652 {Decoration::Triangle | Decoration::Color::Orange, 4}}});
1653 break;
1654 }
1655 case 48: {
1656 generator.setGridSize(7, 7);
1657 generator.setSymmetry(Panel::Symmetry::Rotational);
1658 generator.setFlag(Generate::WriteInvisible);
1659 generator.setFlag(Generate::DisableDotIntersection);
1660 MakeSecretSymmetryGrid(generator);
1661 generator.generate(
1662 7, 7,
1663 {{{Decoration::Dot | Decoration::Color::Cyan, 2},
1664 {Decoration::Dot | Decoration::Color::Yellow, 2},
1665 {Decoration::Triangle | Decoration::Color::Orange, 4}}});
1666 break;
1667 }
1668 case 49: {
1669 generator.setGridSize(7, 7);
1670 generator.setSymmetry((Random::rand() % 2) == 0
1671 ? Panel::Symmetry::ParallelHFlip
1672 : Panel::Symmetry::ParallelVFlip);
1673 generator.setFlag(Generate::WriteInvisible);
1674 generator.setFlag(Generate::DisableDotIntersection);
1675 MakeSecretSymmetryGrid(generator);
1676 generator.generate(
1677 7, 7,
1678 {{{Decoration::Dot | Decoration::Color::Cyan, 2},
1679 {Decoration::Dot | Decoration::Color::Yellow, 2},
1680 {Decoration::Triangle | Decoration::Color::Orange, 4}}});
1681 break;
1682 }
1683 }
1684 1559
1685 Rice::String str(generator.AsCode()); 1560 Rice::String str(generator.AsCode());
1686 return str; 1561 return str;