2a6841ad76b8209f24fee78f25ceb1759a509d0b
[ou-summer-of-code-2017.git] / 06-tour-shapes / tour-shapes-problem-creation.ipynb
1 {
2 "cells": [
3 {
4 "cell_type": "markdown",
5 "metadata": {},
6 "source": [
7 "Given a sequence of {F|L|R}, each of which is \"move forward one step\", \"turn left, then move forward one step\", \"turn right, then move forward one step\":\n",
8 "1. which tours are closed?\n",
9 "2. what is the area enclosed by the tour?"
10 ]
11 },
12 {
13 "cell_type": "code",
14 "execution_count": 1301,
15 "metadata": {
16 "collapsed": true
17 },
18 "outputs": [],
19 "source": [
20 "import collections\n",
21 "import enum\n",
22 "import random\n",
23 "import os\n",
24 "\n",
25 "import matplotlib.pyplot as plt\n",
26 "%matplotlib inline\n"
27 ]
28 },
29 {
30 "cell_type": "code",
31 "execution_count": 2,
32 "metadata": {
33 "collapsed": true
34 },
35 "outputs": [],
36 "source": [
37 "class Direction(enum.Enum):\n",
38 " UP = 1\n",
39 " RIGHT = 2\n",
40 " DOWN = 3\n",
41 " LEFT = 4\n",
42 " \n",
43 "turn_lefts = {Direction.UP: Direction.LEFT, Direction.LEFT: Direction.DOWN,\n",
44 " Direction.DOWN: Direction.RIGHT, Direction.RIGHT: Direction.UP}\n",
45 "\n",
46 "turn_rights = {Direction.UP: Direction.RIGHT, Direction.RIGHT: Direction.DOWN,\n",
47 " Direction.DOWN: Direction.LEFT, Direction.LEFT: Direction.UP}\n",
48 "\n",
49 "def turn_left(d):\n",
50 " return turn_lefts[d]\n",
51 "\n",
52 "def turn_right(d):\n",
53 " return turn_rights[d]\n"
54 ]
55 },
56 {
57 "cell_type": "code",
58 "execution_count": 82,
59 "metadata": {
60 "collapsed": true
61 },
62 "outputs": [],
63 "source": [
64 "Step = collections.namedtuple('Step', ['x', 'y', 'dir'])\n",
65 "Mistake = collections.namedtuple('Mistake', ['i', 'step'])"
66 ]
67 },
68 {
69 "cell_type": "code",
70 "execution_count": 4,
71 "metadata": {
72 "collapsed": true
73 },
74 "outputs": [],
75 "source": [
76 "def advance(step, d):\n",
77 " if d == Direction.UP:\n",
78 " return Step(step.x, step.y+1, d)\n",
79 " elif d == Direction.DOWN:\n",
80 " return Step(step.x, step.y-1, d)\n",
81 " elif d == Direction.LEFT:\n",
82 " return Step(step.x-1, step.y, d)\n",
83 " elif d == Direction.RIGHT:\n",
84 " return Step(step.x+1, step.y, d)"
85 ]
86 },
87 {
88 "cell_type": "code",
89 "execution_count": 489,
90 "metadata": {
91 "collapsed": true
92 },
93 "outputs": [],
94 "source": [
95 "def trace_tour(tour, startx=0, starty=0, startdir=Direction.RIGHT):\n",
96 " current = Step(startx, starty, startdir)\n",
97 " trace = [current]\n",
98 " for s in tour:\n",
99 " if s == 'F':\n",
100 " current = advance(current, current.dir)\n",
101 " elif s == 'L':\n",
102 " current = advance(current, turn_left(current.dir))\n",
103 " elif s == 'R':\n",
104 " current = advance(current, turn_right(current.dir))\n",
105 " trace += [current]\n",
106 " return trace "
107 ]
108 },
109 {
110 "cell_type": "code",
111 "execution_count": 490,
112 "metadata": {
113 "collapsed": true
114 },
115 "outputs": [],
116 "source": [
117 "k = Step(1, 2, 3)"
118 ]
119 },
120 {
121 "cell_type": "code",
122 "execution_count": 491,
123 "metadata": {},
124 "outputs": [
125 {
126 "data": {
127 "text/plain": [
128 "Step(x=1, y=2, dir=3)"
129 ]
130 },
131 "execution_count": 491,
132 "metadata": {},
133 "output_type": "execute_result"
134 }
135 ],
136 "source": [
137 "k"
138 ]
139 },
140 {
141 "cell_type": "code",
142 "execution_count": 8,
143 "metadata": {},
144 "outputs": [
145 {
146 "data": {
147 "text/plain": [
148 "__main__.Step"
149 ]
150 },
151 "execution_count": 8,
152 "metadata": {},
153 "output_type": "execute_result"
154 }
155 ],
156 "source": [
157 "Step"
158 ]
159 },
160 {
161 "cell_type": "code",
162 "execution_count": 9,
163 "metadata": {},
164 "outputs": [
165 {
166 "data": {
167 "text/plain": [
168 "<Direction.UP: 1>"
169 ]
170 },
171 "execution_count": 9,
172 "metadata": {},
173 "output_type": "execute_result"
174 }
175 ],
176 "source": [
177 "d = Direction.UP\n",
178 "d"
179 ]
180 },
181 {
182 "cell_type": "code",
183 "execution_count": 10,
184 "metadata": {},
185 "outputs": [
186 {
187 "data": {
188 "text/plain": [
189 "<Direction.RIGHT: 2>"
190 ]
191 },
192 "execution_count": 10,
193 "metadata": {},
194 "output_type": "execute_result"
195 }
196 ],
197 "source": [
198 "turn_right(d)"
199 ]
200 },
201 {
202 "cell_type": "code",
203 "execution_count": 11,
204 "metadata": {},
205 "outputs": [
206 {
207 "data": {
208 "text/plain": [
209 "{<Direction.RIGHT: 2>: <Direction.DOWN: 3>,\n",
210 " <Direction.DOWN: 3>: <Direction.LEFT: 4>,\n",
211 " <Direction.LEFT: 4>: <Direction.UP: 1>,\n",
212 " <Direction.UP: 1>: <Direction.RIGHT: 2>}"
213 ]
214 },
215 "execution_count": 11,
216 "metadata": {},
217 "output_type": "execute_result"
218 }
219 ],
220 "source": [
221 "turn_rights"
222 ]
223 },
224 {
225 "cell_type": "code",
226 "execution_count": 494,
227 "metadata": {},
228 "outputs": [
229 {
230 "data": {
231 "text/plain": [
232 "[Step(x=0, y=0, dir=<Direction.RIGHT: 2>),\n",
233 " Step(x=1, y=0, dir=<Direction.RIGHT: 2>),\n",
234 " Step(x=1, y=1, dir=<Direction.UP: 1>),\n",
235 " Step(x=2, y=1, dir=<Direction.RIGHT: 2>),\n",
236 " Step(x=2, y=2, dir=<Direction.UP: 1>)]"
237 ]
238 },
239 "execution_count": 494,
240 "metadata": {},
241 "output_type": "execute_result"
242 }
243 ],
244 "source": [
245 "trace_tour('FLRL')"
246 ]
247 },
248 {
249 "cell_type": "code",
250 "execution_count": 13,
251 "metadata": {},
252 "outputs": [
253 {
254 "data": {
255 "text/plain": [
256 "[Step(x=0, y=0, dir=<Direction.RIGHT: 2>),\n",
257 " Step(x=1, y=0, dir=<Direction.RIGHT: 2>),\n",
258 " Step(x=2, y=0, dir=<Direction.RIGHT: 2>),\n",
259 " Step(x=2, y=1, dir=<Direction.UP: 1>),\n",
260 " Step(x=3, y=1, dir=<Direction.RIGHT: 2>),\n",
261 " Step(x=3, y=2, dir=<Direction.UP: 1>),\n",
262 " Step(x=2, y=2, dir=<Direction.LEFT: 4>),\n",
263 " Step(x=1, y=2, dir=<Direction.LEFT: 4>),\n",
264 " Step(x=1, y=1, dir=<Direction.DOWN: 3>),\n",
265 " Step(x=0, y=1, dir=<Direction.LEFT: 4>),\n",
266 " Step(x=0, y=0, dir=<Direction.DOWN: 3>)]"
267 ]
268 },
269 "execution_count": 13,
270 "metadata": {},
271 "output_type": "execute_result"
272 }
273 ],
274 "source": [
275 "trace_tour('FFLRLLFLRL')"
276 ]
277 },
278 {
279 "cell_type": "code",
280 "execution_count": 14,
281 "metadata": {},
282 "outputs": [
283 {
284 "data": {
285 "text/plain": [
286 "[Step(x=0, y=0, dir=<Direction.RIGHT: 2>),\n",
287 " Step(x=1, y=0, dir=<Direction.RIGHT: 2>),\n",
288 " Step(x=1, y=1, dir=<Direction.UP: 1>),\n",
289 " Step(x=0, y=1, dir=<Direction.LEFT: 4>),\n",
290 " Step(x=-1, y=1, dir=<Direction.LEFT: 4>),\n",
291 " Step(x=-2, y=1, dir=<Direction.LEFT: 4>),\n",
292 " Step(x=-2, y=0, dir=<Direction.DOWN: 3>),\n",
293 " Step(x=-2, y=-1, dir=<Direction.DOWN: 3>),\n",
294 " Step(x=-2, y=-2, dir=<Direction.DOWN: 3>),\n",
295 " Step(x=-2, y=-3, dir=<Direction.DOWN: 3>),\n",
296 " Step(x=-1, y=-3, dir=<Direction.RIGHT: 2>),\n",
297 " Step(x=0, y=-3, dir=<Direction.RIGHT: 2>),\n",
298 " Step(x=1, y=-3, dir=<Direction.RIGHT: 2>),\n",
299 " Step(x=1, y=-2, dir=<Direction.UP: 1>),\n",
300 " Step(x=1, y=-1, dir=<Direction.UP: 1>),\n",
301 " Step(x=0, y=-1, dir=<Direction.LEFT: 4>),\n",
302 " Step(x=0, y=-2, dir=<Direction.DOWN: 3>),\n",
303 " Step(x=-1, y=-2, dir=<Direction.LEFT: 4>),\n",
304 " Step(x=-1, y=-1, dir=<Direction.UP: 1>),\n",
305 " Step(x=-1, y=0, dir=<Direction.UP: 1>),\n",
306 " Step(x=0, y=0, dir=<Direction.RIGHT: 2>)]"
307 ]
308 },
309 "execution_count": 14,
310 "metadata": {},
311 "output_type": "execute_result"
312 }
313 ],
314 "source": [
315 "trace_tour('FLLFFLFFFLFFLFLLRRFR')"
316 ]
317 },
318 {
319 "cell_type": "code",
320 "execution_count": 15,
321 "metadata": {},
322 "outputs": [
323 {
324 "data": {
325 "text/plain": [
326 "[Step(x=0, y=0, dir=<Direction.RIGHT: 2>),\n",
327 " Step(x=1, y=0, dir=<Direction.RIGHT: 2>),\n",
328 " Step(x=2, y=0, dir=<Direction.RIGHT: 2>),\n",
329 " Step(x=2, y=-1, dir=<Direction.DOWN: 3>),\n",
330 " Step(x=3, y=-1, dir=<Direction.RIGHT: 2>),\n",
331 " Step(x=3, y=0, dir=<Direction.UP: 1>),\n",
332 " Step(x=3, y=1, dir=<Direction.UP: 1>),\n",
333 " Step(x=4, y=1, dir=<Direction.RIGHT: 2>),\n",
334 " Step(x=4, y=2, dir=<Direction.UP: 1>),\n",
335 " Step(x=3, y=2, dir=<Direction.LEFT: 4>),\n",
336 " Step(x=2, y=2, dir=<Direction.LEFT: 4>),\n",
337 " Step(x=1, y=2, dir=<Direction.LEFT: 4>),\n",
338 " Step(x=0, y=2, dir=<Direction.LEFT: 4>),\n",
339 " Step(x=0, y=3, dir=<Direction.UP: 1>),\n",
340 " Step(x=0, y=4, dir=<Direction.UP: 1>),\n",
341 " Step(x=-1, y=4, dir=<Direction.LEFT: 4>),\n",
342 " Step(x=-1, y=3, dir=<Direction.DOWN: 3>),\n",
343 " Step(x=-2, y=3, dir=<Direction.LEFT: 4>),\n",
344 " Step(x=-2, y=2, dir=<Direction.DOWN: 3>),\n",
345 " Step(x=-1, y=2, dir=<Direction.RIGHT: 2>),\n",
346 " Step(x=-1, y=1, dir=<Direction.DOWN: 3>),\n",
347 " Step(x=-2, y=1, dir=<Direction.LEFT: 4>),\n",
348 " Step(x=-2, y=0, dir=<Direction.DOWN: 3>),\n",
349 " Step(x=-1, y=0, dir=<Direction.RIGHT: 2>),\n",
350 " Step(x=-1, y=-1, dir=<Direction.DOWN: 3>),\n",
351 " Step(x=0, y=-1, dir=<Direction.RIGHT: 2>),\n",
352 " Step(x=0, y=0, dir=<Direction.UP: 1>)]"
353 ]
354 },
355 "execution_count": 15,
356 "metadata": {},
357 "output_type": "execute_result"
358 }
359 ],
360 "source": [
361 "trace_tour('FFRLLFRLLFFFRFLLRLLRRLLRLL')"
362 ]
363 },
364 {
365 "cell_type": "code",
366 "execution_count": 16,
367 "metadata": {
368 "collapsed": true
369 },
370 "outputs": [],
371 "source": [
372 "def positions(trace):\n",
373 " return [(s.x, s.y) for s in trace]"
374 ]
375 },
376 {
377 "cell_type": "code",
378 "execution_count": 17,
379 "metadata": {},
380 "outputs": [
381 {
382 "data": {
383 "text/plain": [
384 "[(0, 0),\n",
385 " (1, 0),\n",
386 " (2, 0),\n",
387 " (2, -1),\n",
388 " (3, -1),\n",
389 " (3, 0),\n",
390 " (3, 1),\n",
391 " (4, 1),\n",
392 " (4, 2),\n",
393 " (3, 2),\n",
394 " (2, 2),\n",
395 " (1, 2),\n",
396 " (0, 2),\n",
397 " (0, 3),\n",
398 " (0, 4),\n",
399 " (-1, 4),\n",
400 " (-1, 3),\n",
401 " (-2, 3),\n",
402 " (-2, 2),\n",
403 " (-1, 2),\n",
404 " (-1, 1),\n",
405 " (-2, 1),\n",
406 " (-2, 0),\n",
407 " (-1, 0),\n",
408 " (-1, -1),\n",
409 " (0, -1),\n",
410 " (0, 0)]"
411 ]
412 },
413 "execution_count": 17,
414 "metadata": {},
415 "output_type": "execute_result"
416 }
417 ],
418 "source": [
419 "positions(trace_tour('FFRLLFRLLFFFRFLLRLLRRLLRLL'))"
420 ]
421 },
422 {
423 "cell_type": "code",
424 "execution_count": 18,
425 "metadata": {
426 "collapsed": true
427 },
428 "outputs": [],
429 "source": [
430 "def valid(trace):\n",
431 " return (trace[-1].x == 0 \n",
432 " and trace[-1].y == 0 \n",
433 " and len(set(positions(trace))) + 1 == len(trace))"
434 ]
435 },
436 {
437 "cell_type": "code",
438 "execution_count": 19,
439 "metadata": {},
440 "outputs": [
441 {
442 "data": {
443 "text/plain": [
444 "True"
445 ]
446 },
447 "execution_count": 19,
448 "metadata": {},
449 "output_type": "execute_result"
450 }
451 ],
452 "source": [
453 "valid(trace_tour('FFRLLFRLLFFFRFLLRLLRRLLRLL'))"
454 ]
455 },
456 {
457 "cell_type": "code",
458 "execution_count": 20,
459 "metadata": {},
460 "outputs": [
461 {
462 "data": {
463 "text/plain": [
464 "False"
465 ]
466 },
467 "execution_count": 20,
468 "metadata": {},
469 "output_type": "execute_result"
470 }
471 ],
472 "source": [
473 "valid(trace_tour('FFRLLFRLLFFFRFLLRLLRRLLRLLFF'))"
474 ]
475 },
476 {
477 "cell_type": "code",
478 "execution_count": 21,
479 "metadata": {},
480 "outputs": [
481 {
482 "data": {
483 "text/plain": [
484 "False"
485 ]
486 },
487 "execution_count": 21,
488 "metadata": {},
489 "output_type": "execute_result"
490 }
491 ],
492 "source": [
493 "valid(trace_tour('FFLLLFRR'))"
494 ]
495 },
496 {
497 "cell_type": "code",
498 "execution_count": 22,
499 "metadata": {},
500 "outputs": [
501 {
502 "data": {
503 "text/plain": [
504 "False"
505 ]
506 },
507 "execution_count": 22,
508 "metadata": {},
509 "output_type": "execute_result"
510 }
511 ],
512 "source": [
513 "valid(trace_tour('F'))"
514 ]
515 },
516 {
517 "cell_type": "code",
518 "execution_count": 23,
519 "metadata": {},
520 "outputs": [
521 {
522 "data": {
523 "text/plain": [
524 "True"
525 ]
526 },
527 "execution_count": 23,
528 "metadata": {},
529 "output_type": "execute_result"
530 }
531 ],
532 "source": [
533 "valid(trace_tour('LLLL'))"
534 ]
535 },
536 {
537 "cell_type": "code",
538 "execution_count": 24,
539 "metadata": {
540 "collapsed": true
541 },
542 "outputs": [],
543 "source": [
544 "def chunks(items, n=2):\n",
545 " return [items[i:i+n] for i in range(len(items) - n + 1)]"
546 ]
547 },
548 {
549 "cell_type": "code",
550 "execution_count": 25,
551 "metadata": {},
552 "outputs": [
553 {
554 "data": {
555 "text/plain": [
556 "['abcdefg',\n",
557 " 'bcdefgh',\n",
558 " 'cdefghi',\n",
559 " 'defghij',\n",
560 " 'efghijk',\n",
561 " 'fghijkl',\n",
562 " 'ghijklm',\n",
563 " 'hijklmn',\n",
564 " 'ijklmno',\n",
565 " 'jklmnop',\n",
566 " 'klmnopq',\n",
567 " 'lmnopqr',\n",
568 " 'mnopqrs',\n",
569 " 'nopqrst',\n",
570 " 'opqrstu',\n",
571 " 'pqrstuv',\n",
572 " 'qrstuvw',\n",
573 " 'rstuvwx',\n",
574 " 'stuvwxy',\n",
575 " 'tuvwxyz']"
576 ]
577 },
578 "execution_count": 25,
579 "metadata": {},
580 "output_type": "execute_result"
581 }
582 ],
583 "source": [
584 "import string\n",
585 "chunks(string.ascii_lowercase, 7)"
586 ]
587 },
588 {
589 "cell_type": "markdown",
590 "metadata": {},
591 "source": [
592 "Using the [Shoelace formula](https://en.wikipedia.org/wiki/Shoelace_formula)"
593 ]
594 },
595 {
596 "cell_type": "code",
597 "execution_count": 26,
598 "metadata": {
599 "collapsed": true
600 },
601 "outputs": [],
602 "source": [
603 "def shoelace(trace):\n",
604 " return abs(sum(s.x * t.y - t.x * s.y for s, t in chunks(trace, 2))) // 2"
605 ]
606 },
607 {
608 "cell_type": "code",
609 "execution_count": 27,
610 "metadata": {},
611 "outputs": [
612 {
613 "data": {
614 "text/plain": [
615 "4"
616 ]
617 },
618 "execution_count": 27,
619 "metadata": {},
620 "output_type": "execute_result"
621 }
622 ],
623 "source": [
624 "shoelace(trace_tour('FFLRLLFLRL'))"
625 ]
626 },
627 {
628 "cell_type": "code",
629 "execution_count": 28,
630 "metadata": {},
631 "outputs": [
632 {
633 "data": {
634 "text/plain": [
635 "9"
636 ]
637 },
638 "execution_count": 28,
639 "metadata": {},
640 "output_type": "execute_result"
641 }
642 ],
643 "source": [
644 "shoelace(trace_tour('FLLFFLFFFLFFLFLLRRFR'))"
645 ]
646 },
647 {
648 "cell_type": "code",
649 "execution_count": 29,
650 "metadata": {},
651 "outputs": [
652 {
653 "data": {
654 "text/plain": [
655 "15"
656 ]
657 },
658 "execution_count": 29,
659 "metadata": {},
660 "output_type": "execute_result"
661 }
662 ],
663 "source": [
664 "shoelace(trace_tour('FFRLLFRLLFFFRFLLRLLRRLLRLL'))"
665 ]
666 },
667 {
668 "cell_type": "code",
669 "execution_count": 30,
670 "metadata": {
671 "collapsed": true
672 },
673 "outputs": [],
674 "source": [
675 "def step(s, current):\n",
676 " if s == 'F':\n",
677 " return advance(current, current.dir)\n",
678 " elif s == 'L':\n",
679 " return advance(current, turn_left(current.dir))\n",
680 " elif s == 'R':\n",
681 " return advance(current, turn_right(current.dir))\n",
682 " else:\n",
683 " raise ValueError"
684 ]
685 },
686 {
687 "cell_type": "code",
688 "execution_count": 31,
689 "metadata": {
690 "collapsed": true
691 },
692 "outputs": [],
693 "source": [
694 "def valid_prefix(tour):\n",
695 " current = Step(0, 0, Direction.RIGHT)\n",
696 " prefix = []\n",
697 " posns = []\n",
698 " for s in tour:\n",
699 " current = step(s, current)\n",
700 " prefix += [s]\n",
701 " if (current.x, current.y) in posns:\n",
702 " return ''\n",
703 " elif current.x == 0 and current.y == 0: \n",
704 " return ''.join(prefix)\n",
705 " posns += [(current.x, current.y)]\n",
706 " if current.x == 0 and current.y == 0:\n",
707 " return ''.join(prefix)\n",
708 " else:\n",
709 " return ''"
710 ]
711 },
712 {
713 "cell_type": "code",
714 "execution_count": 267,
715 "metadata": {
716 "collapsed": true
717 },
718 "outputs": [],
719 "source": [
720 "def mistake_positions(trace, debug=False):\n",
721 " mistakes = []\n",
722 " current = trace[0]\n",
723 " posns = [(0, 0)]\n",
724 " for i, current in enumerate(trace[1:]):\n",
725 " if (current.x, current.y) in posns:\n",
726 " if debug: print(i, current)\n",
727 " mistakes += [Mistake(i+1, current)]\n",
728 " posns += [(current.x, current.y)]\n",
729 " if (current.x, current.y) == (0, 0):\n",
730 " return mistakes[:-1]\n",
731 " else:\n",
732 " return mistakes + [Mistake(len(trace)+1, current)]"
733 ]
734 },
735 {
736 "cell_type": "code",
737 "execution_count": 84,
738 "metadata": {
739 "collapsed": true
740 },
741 "outputs": [],
742 "source": [
743 "def returns_to_origin(mistake_positions):\n",
744 " return [i for i, m in mistake_positions\n",
745 " if (m.x, m.y) == (0, 0)]"
746 ]
747 },
748 {
749 "cell_type": "code",
750 "execution_count": 34,
751 "metadata": {
752 "collapsed": true
753 },
754 "outputs": [],
755 "source": [
756 "sample_tours = ['FFLRLLFLRL', 'FLLFFLFFFLFFLFLLRRFR', 'FFRLLFRLLFFFRFLLRLLRRLLRLL']"
757 ]
758 },
759 {
760 "cell_type": "code",
761 "execution_count": 35,
762 "metadata": {},
763 "outputs": [
764 {
765 "data": {
766 "text/plain": [
767 "'FFLRLLFLRL'"
768 ]
769 },
770 "execution_count": 35,
771 "metadata": {},
772 "output_type": "execute_result"
773 }
774 ],
775 "source": [
776 "valid_prefix(sample_tours[0])"
777 ]
778 },
779 {
780 "cell_type": "code",
781 "execution_count": 36,
782 "metadata": {
783 "scrolled": true
784 },
785 "outputs": [
786 {
787 "data": {
788 "text/plain": [
789 "True"
790 ]
791 },
792 "execution_count": 36,
793 "metadata": {},
794 "output_type": "execute_result"
795 }
796 ],
797 "source": [
798 "all(valid_prefix(t) == t for t in sample_tours)"
799 ]
800 },
801 {
802 "cell_type": "code",
803 "execution_count": 37,
804 "metadata": {},
805 "outputs": [
806 {
807 "data": {
808 "text/plain": [
809 "True"
810 ]
811 },
812 "execution_count": 37,
813 "metadata": {},
814 "output_type": "execute_result"
815 }
816 ],
817 "source": [
818 "valid_prefix(sample_tours[0] + 'FLLLL') == sample_tours[0]"
819 ]
820 },
821 {
822 "cell_type": "code",
823 "execution_count": 89,
824 "metadata": {},
825 "outputs": [
826 {
827 "data": {
828 "text/plain": [
829 "[Mistake(i=1, step=Step(x=0, y=0, dir=<Direction.RIGHT: 2>)),\n",
830 " Mistake(i=11, step=Step(x=0, y=0, dir=<Direction.DOWN: 3>)),\n",
831 " (13, Step(x=0, y=-1, dir=<Direction.DOWN: 3>))]"
832 ]
833 },
834 "execution_count": 89,
835 "metadata": {},
836 "output_type": "execute_result"
837 }
838 ],
839 "source": [
840 "mistake_positions(trace_tour(sample_tours[0] + 'F'))"
841 ]
842 },
843 {
844 "cell_type": "code",
845 "execution_count": 90,
846 "metadata": {},
847 "outputs": [
848 {
849 "data": {
850 "text/plain": [
851 "[Mistake(i=1, step=Step(x=0, y=0, dir=<Direction.RIGHT: 2>)),\n",
852 " Mistake(i=11, step=Step(x=0, y=0, dir=<Direction.DOWN: 3>)),\n",
853 " Mistake(i=14, step=Step(x=1, y=0, dir=<Direction.UP: 1>)),\n",
854 " Mistake(i=15, step=Step(x=0, y=0, dir=<Direction.LEFT: 4>)),\n",
855 " Mistake(i=16, step=Step(x=0, y=-1, dir=<Direction.DOWN: 3>)),\n",
856 " (17, Step(x=0, y=-1, dir=<Direction.DOWN: 3>))]"
857 ]
858 },
859 "execution_count": 90,
860 "metadata": {},
861 "output_type": "execute_result"
862 }
863 ],
864 "source": [
865 "mistake_positions(trace_tour(sample_tours[0] + 'FLLLL'))"
866 ]
867 },
868 {
869 "cell_type": "code",
870 "execution_count": 91,
871 "metadata": {},
872 "outputs": [
873 {
874 "data": {
875 "text/plain": [
876 "'FFLRLLFLRL'"
877 ]
878 },
879 "execution_count": 91,
880 "metadata": {},
881 "output_type": "execute_result"
882 }
883 ],
884 "source": [
885 "(sample_tours[0] + 'FLLLL')[:10]"
886 ]
887 },
888 {
889 "cell_type": "code",
890 "execution_count": 574,
891 "metadata": {
892 "collapsed": true
893 },
894 "outputs": [],
895 "source": [
896 "def random_walk(steps=1000):\n",
897 " return ''.join(random.choice('FFLR') for _ in range(steps))"
898 ]
899 },
900 {
901 "cell_type": "code",
902 "execution_count": 42,
903 "metadata": {},
904 "outputs": [
905 {
906 "data": {
907 "text/plain": [
908 "''"
909 ]
910 },
911 "execution_count": 42,
912 "metadata": {},
913 "output_type": "execute_result"
914 }
915 ],
916 "source": [
917 "valid_prefix(random_walk(1000))"
918 ]
919 },
920 {
921 "cell_type": "code",
922 "execution_count": 44,
923 "metadata": {},
924 "outputs": [
925 {
926 "data": {
927 "text/plain": [
928 "''"
929 ]
930 },
931 "execution_count": 44,
932 "metadata": {},
933 "output_type": "execute_result"
934 }
935 ],
936 "source": [
937 "valid_prefix(random_walk(1000))"
938 ]
939 },
940 {
941 "cell_type": "code",
942 "execution_count": 45,
943 "metadata": {
944 "collapsed": true,
945 "scrolled": true
946 },
947 "outputs": [],
948 "source": [
949 "walks = []\n",
950 "while len(walks) < 10:\n",
951 " w = valid_prefix(random_walk())\n",
952 " if len(w) > 30: walks += [w]"
953 ]
954 },
955 {
956 "cell_type": "code",
957 "execution_count": 46,
958 "metadata": {},
959 "outputs": [
960 {
961 "data": {
962 "text/plain": [
963 "['RFLFFLFFFFFFLRRLLRLFFFLFFFLRFRLLFFRR',\n",
964 " 'FLRLFLFFLFRLLRRFLFRFLLFFFLLRRFLF',\n",
965 " 'LRFLFRFRLLRLRLRRLRRFLFRLRLFRLRRFLLRRLFFRFRRL',\n",
966 " 'RFLLRFLFFFFLRFFLFLFLRFRFLRRLLFLFRL',\n",
967 " 'LFFRLFRLLRFFLLRFLFFLRFRFFLLRLRLF',\n",
968 " 'LRFRLFRFFLRRLRLFFRFFFRFLRFFFFRLR',\n",
969 " 'LRFLFFFRRLLRFFFRRLFRFFRLLFLRFRFLRRLR',\n",
970 " 'LLRRLFLFRLFFFFFFLLRLFRLRFLFFRFRLRFLLRFLFLRFLFFFF',\n",
971 " 'FLFRFFRFLRFLLRFRFRLFRRLLRRFLFLRRFFLR',\n",
972 " 'FRFFFRFFRRLLFRFLRFRLFLRRFRFLFFRFRL']"
973 ]
974 },
975 "execution_count": 46,
976 "metadata": {},
977 "output_type": "execute_result"
978 }
979 ],
980 "source": [
981 "walks"
982 ]
983 },
984 {
985 "cell_type": "code",
986 "execution_count": 47,
987 "metadata": {},
988 "outputs": [
989 {
990 "data": {
991 "text/plain": [
992 "[Step(x=0, y=0, dir=<Direction.RIGHT: 2>),\n",
993 " Step(x=1, y=0, dir=<Direction.RIGHT: 2>),\n",
994 " Step(x=1, y=1, dir=<Direction.UP: 1>),\n",
995 " Step(x=0, y=1, dir=<Direction.LEFT: 4>),\n",
996 " Step(x=0, y=0, dir=<Direction.DOWN: 3>)]"
997 ]
998 },
999 "execution_count": 47,
1000 "metadata": {},
1001 "output_type": "execute_result"
1002 }
1003 ],
1004 "source": [
1005 "trace_tour('FLLL')"
1006 ]
1007 },
1008 {
1009 "cell_type": "code",
1010 "execution_count": 48,
1011 "metadata": {},
1012 "outputs": [
1013 {
1014 "data": {
1015 "text/plain": [
1016 "(-1, 3)"
1017 ]
1018 },
1019 "execution_count": 48,
1020 "metadata": {},
1021 "output_type": "execute_result"
1022 },
1023 {
1024 "data": {
1025 "image/png": "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\n",
1026 "text/plain": [
1027 "<matplotlib.figure.Figure at 0x7f40411df278>"
1028 ]
1029 },
1030 "metadata": {},
1031 "output_type": "display_data"
1032 }
1033 ],
1034 "source": [
1035 "import matplotlib.pyplot as plt\n",
1036 "%matplotlib inline\n",
1037 "plt.axis('on')\n",
1038 "plt.arrow(0, 0, 0.8, 0, head_width=0.1, head_length=0.1, fc='k', ec='k', length_includes_head=True)\n",
1039 "plt.arrow(0.2, 0, 0, 1, head_width=0.1, head_length=0.1, fc='k', ec='k', length_includes_head=True)\n",
1040 "plt.xlim([-1, 2])\n",
1041 "plt.ylim([-1, 3])"
1042 ]
1043 },
1044 {
1045 "cell_type": "code",
1046 "execution_count": 49,
1047 "metadata": {
1048 "collapsed": true
1049 },
1050 "outputs": [],
1051 "source": [
1052 "def bounds(trace):\n",
1053 " return (max(s.x for s in trace),\n",
1054 " max(s.y for s in trace),\n",
1055 " min(s.x for s in trace),\n",
1056 " min(s.y for s in trace))"
1057 ]
1058 },
1059 {
1060 "cell_type": "code",
1061 "execution_count": 50,
1062 "metadata": {},
1063 "outputs": [
1064 {
1065 "data": {
1066 "text/plain": [
1067 "(0, 2, -13, -13)"
1068 ]
1069 },
1070 "execution_count": 50,
1071 "metadata": {},
1072 "output_type": "execute_result"
1073 }
1074 ],
1075 "source": [
1076 "bounds(trace_tour('RFRFFLRFLFFRRFFRRRRLLLRRRRRRFRLFRFFRFFRRFRLRRFLLFRLLFRFLFLFRFRLLFRLFRFLRRLLFRRRFRRRRLLFLFRFRRFFRRLLLRLRRFRLRRFFRRFLFRRLLRRFFRFRRRRRFLLLLLRRFFFLLFFFRRLFLFFLRRRFRFLLFFRRLLRFLLRRF'))"
1077 ]
1078 },
1079 {
1080 "cell_type": "code",
1081 "execution_count": 51,
1082 "metadata": {
1083 "collapsed": true
1084 },
1085 "outputs": [],
1086 "source": [
1087 "plot_wh = {Direction.UP: (0, 1), Direction.LEFT: (-1, 0),\n",
1088 " Direction.DOWN: (0, -1), Direction.RIGHT: (1, 0)}"
1089 ]
1090 },
1091 {
1092 "cell_type": "code",
1093 "execution_count": 1198,
1094 "metadata": {
1095 "collapsed": true
1096 },
1097 "outputs": [],
1098 "source": [
1099 "def plot_trace(trace, colour='k', xybounds=None, fig=None, subplot_details=None, filename=None):\n",
1100 " plt.axis('on')\n",
1101 " plt.axes().set_aspect('equal')\n",
1102 " for s, t in chunks(trace, 2):\n",
1103 " w, h = plot_wh[t.dir]\n",
1104 " plt.arrow(s.x, s.y, w, h, head_width=0.1, head_length=0.1, fc=colour, ec=colour, length_includes_head=True)\n",
1105 " xh, yh, xl, yl = bounds(trace)\n",
1106 " if xybounds is not None: \n",
1107 " bxh, byh, bxl, byl = xybounds\n",
1108 " plt.xlim([min(xl, bxl)-1, max(xh, bxh)+1])\n",
1109 " plt.ylim([min(yl, byl)-1, max(yh, byh)+1])\n",
1110 " else:\n",
1111 " plt.xlim([xl-1, xh+1])\n",
1112 " plt.ylim([yl-1, yh+1])\n",
1113 " if filename:\n",
1114 " plt.savefig(filename)"
1115 ]
1116 },
1117 {
1118 "cell_type": "code",
1119 "execution_count": 995,
1120 "metadata": {
1121 "collapsed": true
1122 },
1123 "outputs": [],
1124 "source": [
1125 "# def plot_trace(trace, colour='k', xybounds=None, fig=None, subplot_details=None):\n",
1126 "# plt.ioff()\n",
1127 "# if fig is None:\n",
1128 "# fig = plt.figure()\n",
1129 "# ax = fig.gca()\n",
1130 "# if subplot_details is not None:\n",
1131 "# ax = fig.add_subplot(*subplot_details)\n",
1132 "# plt.axis('on')\n",
1133 "# # plt.axes().set_aspect('equal')\n",
1134 "# ax.set_aspect('equal')\n",
1135 "# for s, t in chunks(trace, 2):\n",
1136 "# w, h = plot_wh[t.dir]\n",
1137 "# ax.arrow(s.x, s.y, w, h, head_width=0.1, head_length=0.1, fc=colour, ec=colour, length_includes_head=True)\n",
1138 "# xh, yh, xl, yl = bounds(trace)\n",
1139 "# if xybounds is not None: \n",
1140 "# bxh, byh, bxl, byl = xybounds\n",
1141 "# ax.set_xlim([min(xl, bxl)-1, max(xh, bxh)+1])\n",
1142 "# ax.set_ylim([min(yl, byl)-1, max(yh, byh)+1])\n",
1143 "# else:\n",
1144 "# ax.set_xlim([xl-1, xh+1])\n",
1145 "# ax.set_ylim([yl-1, yh+1])\n",
1146 "# plt.close(fig)\n",
1147 "# return fig"
1148 ]
1149 },
1150 {
1151 "cell_type": "code",
1152 "execution_count": 967,
1153 "metadata": {
1154 "collapsed": true
1155 },
1156 "outputs": [],
1157 "source": [
1158 "def pqr(p, q, r):\n",
1159 " return '{}:{};{}'.format(p, q, r)"
1160 ]
1161 },
1162 {
1163 "cell_type": "code",
1164 "execution_count": 968,
1165 "metadata": {},
1166 "outputs": [
1167 {
1168 "data": {
1169 "text/plain": [
1170 "'1:2;3'"
1171 ]
1172 },
1173 "execution_count": 968,
1174 "metadata": {},
1175 "output_type": "execute_result"
1176 }
1177 ],
1178 "source": [
1179 "pqrt = (1, 2, 3)\n",
1180 "pqr(*pqrt)"
1181 ]
1182 },
1183 {
1184 "cell_type": "code",
1185 "execution_count": 1002,
1186 "metadata": {},
1187 "outputs": [
1188 {
1189 "data": {
1190 "image/png": "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\nf/99T6fT/tnPftY3b95clDOOVuG5N+xzOcmXFr/Ln19aPOXXZymdJkD/0mrdunXceuutABw8eJBx\n48YVzfsNjhw5grtTVVXFxRdfzO9//3sAampq2LBhA3PmzIk84akOHDjAJz7xCcyGXbFKggr20iKA\nu//C3f/a3S8eLASjwYQJE4omBADV1dWMGTOGjRs38uabbw48wbq7u3nggQciTze4c889VyEoYsXz\n0y1n5Oqrr6alpYWGhgYAHnroIVauXBl5KilFejtyiaurq2PZsmV0dnbS2trKsmXLYo8kJUorAxEB\nFAMRCRQDEQEUAxEJFAMRARQDEQkUAxEBFAMRCRQDEQEUAxEJFAMRARQDEQkUAxEBFAMRCRQDEQEU\nAxEJFAMRARQDEQkUAxEBFAMRCRQDEQEUAxEJFAMRARQDEQkUAxEBFAMRCRQDEQEUAxEJFAMRARQD\nEQkUAxEBFAMRCRQDEQEUg484evQo48ePp7y8HIAFCxZQWVnJ7t27I08mcvblFQMzu9XMfmtmJ8zs\nc0kNFUtFRQWHDx/m+PHjALg7vb29nHPOOZEnEzn78l0Z7ARuBrYmMEt0ZWVlLFmy5CMfy2QyNDQ0\nRJro9J5//nk2b96Mu8ceRUaJvGLg7h3uvhewhOaJrqWlZeA0AWDNmjURpzm9RYsWceONN3LFFVco\nCpIIS+KHyMx+Cdzr7r8ZYhsvlR/Y5cuX861vfYu6ujquvfba2OMM6ic/+cnA/ZqaGsaMGcOf/vQn\nRUFOYWa4+7C/sNM57GgTcP7JHwIceNDdfzqSoVasWDFwP5PJkMlkRvLlBdPS0sL69evZs2fPR550\nxaq3t5cjR47w9a9/PfYoUgSy2SzZbHbEX6eVQYn6/Oc/z/bt2ykvL2fhwoW0tLTwqU99KvZYUoQS\nWxmM5JgJ7kuGMXfuXKZOnaoISGLyWhmY2VeAR4E64BCw3d1vPM22WhmIRJDryiCR04RcKAYiceQa\nA70DUUQAxUBEAsVARADFQEQCxUBEAMVARALFQEQAxUBEAsVARADFQEQCxUBEAMVARALFQEQAxUBE\nAsVARADFQEQCxUBEAMVARALFQEQAxUBEAsVARADFQEQCxUBEAMVARALFQEQAxUBEAsVARADFQEQC\nxUBEAMVARALFQEQAxUBEAsVARADFQEQCxUBEgDxjYGaPmNluM9tuZhvMrDapwUSksPJdGfw3MMXd\nLwf2Ag/kP1LxyGazsUcYkVKbFzRzMckrBu6+2d37wsMXgIb8RyoepfafXmrzgmYuJkleM/gnYGOC\n+xORAkoPt4GZbQLOP/lDgAMPuvtPwzYPAsfcfe1ZmVJEzjpz9/x2YPaPwNeAme7eM8R2+R1IRM6Y\nu9tw2wy7MhiKmd0A3AfMGCoEuQ4jIvHktTIws71ABXAgfOgFd789icFEpLDyPk0QkdGhoO9ANLNb\nzey3ZnbCzD5XyGOPhJndYGZ7zOx/zGxJ7HmGY2ZPmtk+M9sRe5ZcmFmDmW0xs11mttPM7oo903DM\nrNLMXjSzV8PMzbFnyoWZlZnZb8zsP4fbttBvR94J3AxsLfBxc2ZmZcBjwBxgCrDQzCbHnWpYT9E/\nb6k4Dtzj7pcCXwDuKPbvcbgmdp27XwFcDtxoZtMij5WLRcCuXDYsaAzcvcPd99L/8mSxmgbsdfc/\nuPsx4MfA/MgzDcndtwEHY8+RK3d/z923h/tdwG6gPu5Uw3P3w+FuJf0X34v6HNvMGoAvAz/MZXv9\nodKp6oG3T3r8DiXwg1qqzGwi/b9pX4w7yfDCkvtV4D1gk7v/OvZMw/gXoIkco5V4DMxsk5ntOOm2\nM/z7N0kf6ywZbNVS1L8BSpWZjQXWA4vCCqGouXtfOE1oAK42s0tjz3Q6ZnYTsC+swIwcVuN5vc9g\nMO4+K+l9Ftg7wKdPetwAvBtpllHLzNL0h2CNuz8be56RcPdOM8sCN5Dj+XgEjcA8M/syUA2cY2b/\n7u7/cLoviHmaUKzXDX4NTDKzz5hZBfC3wLBXYotATvUvIj8Cdrn7d2MPkgszqzOzceF+NXA9sCfu\nVKfn7kvd/dPufhH9P8NbhgoBFP6lxa+Y2dvAdKDNzIruD5vc/QTwz/T/efbrwI/dfXfcqYZmZmuB\nduCvzOwtM7st9kxDMbNG4O+AmeGlut+Ed7MWs08CvzSz7fRf3/gvd/955JkSpTcdiQigVxNEJFAM\nRARQDEQkUAxEBFAMRCRQDEQEUAxEJFAMRASA/wNQM89DiBxhRAAAAABJRU5ErkJggg==\n",
1191 "text/plain": [
1192 "<matplotlib.figure.Figure at 0x7f4026af4b00>"
1193 ]
1194 },
1195 "metadata": {},
1196 "output_type": "display_data"
1197 }
1198 ],
1199 "source": [
1200 "plot_trace(trace_tour(sample_tours[0] + 'FLLLL'))"
1201 ]
1202 },
1203 {
1204 "cell_type": "code",
1205 "execution_count": 1003,
1206 "metadata": {},
1207 "outputs": [
1208 {
1209 "data": {
1210 "image/png": "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\n0H8Y6szEx/7LWO/o6Ig93i42Nm300lml/o17vuELfr+gIGccqMLPXp8/yzmfJkDXW4t38Nlbi7u8\nfBbTaQKA1RuP/fljXHzYxQBs2r6JYYOGFcz9Bttbt+M4g0oHcdCdB7Fm0xoAhpQN4YnJTzBxzMTI\nE+7q420fs2flnpj1uWKVBOXzNAF3fxb4ehL7KlTDK4fHHuFzKssqAXjmnWd4d/O7GIbjNLU2ccNz\nNxRkDPYavFfsEaQXhfEyJ1/aCTUnUJ+up6aqBoCbT72ZWafOijyVFCPdjlzkqgdXM2P8DLY0b6Fh\naQMzxs+IPZIUKa0MRARQDEQkUAxEBFAMRCRQDEQEUAxEJFAMRARQDEQkUAxEBFAMRCRQDEQEUAxE\nJFAMRARQDEQkUAxEBFAMRCRQDEQEUAxEJFAMRARQDEQkUAxEBFAMRCRQDEQEUAxEJFAMRARQDEQk\nUAxEBFAMRCRQDEQEUAxEJFAMRARQDEQkUAxEBIDS2AMUkh1tOxhx6wiaWpsAmPzYZMpKymi8vJFD\n9z408nQiu1dOKwMzu9jMfmtm7WZ2dFJDxVKeKmdb6zbaOtoAcJyW9hb2qNgj8mQiu1+upwnLgQuB\nRQnMEl0qlWJa7bTPfS59QJqaqppIE/VsyftLWLBmAe4eexQZIHKKgbuvcvfVgCU0T3T16XrKUmVd\nz+f82ZyI0/RsyrNTOPvBsznqF0cpCpIIXTP4gk9XBz/9r59SXVnN1fOujj1St1778DUA3lz/Jhc8\ncgGDywZHnkiKXZ8xMLP5wD47fwpw4EZ3f7o/B5s5c2bX43Q6TTqd7s+35019up7HVzzOyo9X8uTK\nJ2OP06eW9ha2t27n8mMujz2KFIBMJkMmk+n391kSy0szex641t1f72Ub11I2OcfeeyyNHzVSVlLG\nJYdfQn26nv2H7R97LClAZoa793kqn+RpwoC5blAMzj34XI7Y5whFQBKT08rAzC4A7gSqgc1Ao7uf\n3cO2WhmIRJDtyiCR04RsKAYicWQbA92OLCKAYiAigWIgIoBiICKBYiAigGIgIoFiICKAYiAigWIg\nIoBiICKBYiAigGIgIoFiICKAYiAigWIgIoBiICKBYiAigGIgIoFiICKAYiAigWIgIoBiICKBYiAi\ngGIgIoFiICKAYiAigWIgIoBiICKBYiAigGIgIoFiICKAYiAigWIgIoBiICKBYiAiQI4xMLPZZva2\nmTWa2RNmVpXUYCKSX7muDH4DjHX3I4HVwA25j1Q4MplM7BH6pdjmBc1cSHKKgbsvcPeO8PRFoCb3\nkQpHsf2jF9u8oJkLSZLXDL4HzEtwfyKSR6V9bWBm84F9dv4U4MCN7v502OZGoNXdH9otU4rIbmfu\nntsOzL4D/AA4zd2be9kutwOJyJfm7tbXNn2uDHpjZmcB1wPjewtBtsOISDw5rQzMbDVQDnwcPvWi\nu1+ZxGAikl85nyaIyMCQ1zsQzexiM/utmbWb2dH5PHZ/mNlZZrbSzN4xs2mx5+mLmd1nZuvNbFns\nWbJhZjVmttDMVpjZcjO7OvZMfTGzCjN7yczeCDPXxZ4pG2aWMrPXzew/+to237cjLwcuBBbl+bhZ\nM7MUcBcwERgLXGJmh8Sdqk8P0DlvsWgDrnH3w4ATgasK/e84XBM71d2PAo4Ezjaz4yOPlY0pwIps\nNsxrDNx9lbuvpvPtyUJ1PLDa3d9z91bgEWBS5Jl65e6LgU2x58iWu3/k7o3h8VbgbWBk3Kn65u7b\nwsMKOi++F/Q5tpnVAN8E/jWb7fWLSrsaCazd6fk6iuA/arEys9F0vtK+FHeSvoUl9xvAR8B8d38l\n9kx9+CdgKllGK/EYmNl8M1u208fy8Od5SR9rN+lu1VLQrwDFysyGAo8DU8IKoaC5e0c4TagBTjCz\nw2LP1BMzOwdYH1ZgRhar8ZzuM+iOu5+Z9D7zbB0waqfnNcAHkWYZsMyslM4QzHH3p2LP0x/uvsXM\nMsBZZHk+HkEtcL6ZfROoBPYws39392/39A0xTxMK9brBK8AYMzvAzMqBvwT6vBJbALKqfwG5H1jh\n7nfEHiQbZlZtZsPC40rgDGBl3Kl65u7T3X2Uux9I5//hhb2FAPL/1uIFZrYWGAfMNbOC+8Umd28H\n/o7OX89+C3jE3d+OO1XvzOwhYClwsJm9b2aXxp6pN2ZWC3wLOC28Vfd6uJu1kO0LPG9mjXRe3/hP\nd/915JkSpZuORATQuwkiEigGIgIoBiISKAYiAigGIhIoBiICKAYiEigGIgLA/wNoeIjlrOj5kwAA\nAABJRU5ErkJggg==\n",
1211 "text/plain": [
1212 "<matplotlib.figure.Figure at 0x7f4026adc278>"
1213 ]
1214 },
1215 "metadata": {},
1216 "output_type": "display_data"
1217 }
1218 ],
1219 "source": [
1220 "plot_trace(trace_tour(sample_tours[0] + 'FLLLL'), colour='g')"
1221 ]
1222 },
1223 {
1224 "cell_type": "code",
1225 "execution_count": 1004,
1226 "metadata": {},
1227 "outputs": [
1228 {
1229 "data": {
1230 "image/png": "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\nRU5ErkJggg==\n",
1231 "text/plain": [
1232 "<matplotlib.figure.Figure at 0x7f4027cd51d0>"
1233 ]
1234 },
1235 "metadata": {},
1236 "output_type": "display_data"
1237 }
1238 ],
1239 "source": [
1240 "plot_trace(trace_tour('FFFLLFFL'))"
1241 ]
1242 },
1243 {
1244 "cell_type": "code",
1245 "execution_count": 1005,
1246 "metadata": {},
1247 "outputs": [
1248 {
1249 "data": {
1250 "text/plain": [
1251 "[Step(x=0, y=0, dir=<Direction.RIGHT: 2>),\n",
1252 " Step(x=0, y=-1, dir=<Direction.DOWN: 3>),\n",
1253 " Step(x=0, y=-2, dir=<Direction.DOWN: 3>),\n",
1254 " Step(x=1, y=-2, dir=<Direction.RIGHT: 2>),\n",
1255 " Step(x=1, y=-1, dir=<Direction.UP: 1>),\n",
1256 " Step(x=2, y=-1, dir=<Direction.RIGHT: 2>),\n",
1257 " Step(x=3, y=-1, dir=<Direction.RIGHT: 2>),\n",
1258 " Step(x=3, y=0, dir=<Direction.UP: 1>),\n",
1259 " Step(x=3, y=1, dir=<Direction.UP: 1>),\n",
1260 " Step(x=3, y=2, dir=<Direction.UP: 1>),\n",
1261 " Step(x=3, y=3, dir=<Direction.UP: 1>),\n",
1262 " Step(x=3, y=4, dir=<Direction.UP: 1>),\n",
1263 " Step(x=2, y=4, dir=<Direction.LEFT: 4>),\n",
1264 " Step(x=2, y=5, dir=<Direction.UP: 1>),\n",
1265 " Step(x=2, y=6, dir=<Direction.UP: 1>),\n",
1266 " Step(x=2, y=7, dir=<Direction.UP: 1>),\n",
1267 " Step(x=1, y=7, dir=<Direction.LEFT: 4>),\n",
1268 " Step(x=0, y=7, dir=<Direction.LEFT: 4>),\n",
1269 " Step(x=0, y=6, dir=<Direction.DOWN: 3>),\n",
1270 " Step(x=0, y=5, dir=<Direction.DOWN: 3>),\n",
1271 " Step(x=1, y=5, dir=<Direction.RIGHT: 2>),\n",
1272 " Step(x=1, y=4, dir=<Direction.DOWN: 3>),\n",
1273 " Step(x=1, y=3, dir=<Direction.DOWN: 3>),\n",
1274 " Step(x=0, y=3, dir=<Direction.LEFT: 4>),\n",
1275 " Step(x=-1, y=3, dir=<Direction.LEFT: 4>),\n",
1276 " Step(x=-1, y=2, dir=<Direction.DOWN: 3>),\n",
1277 " Step(x=-2, y=2, dir=<Direction.LEFT: 4>),\n",
1278 " Step(x=-2, y=3, dir=<Direction.UP: 1>),\n",
1279 " Step(x=-3, y=3, dir=<Direction.LEFT: 4>),\n",
1280 " Step(x=-3, y=2, dir=<Direction.DOWN: 3>),\n",
1281 " Step(x=-3, y=1, dir=<Direction.DOWN: 3>),\n",
1282 " Step(x=-2, y=1, dir=<Direction.RIGHT: 2>),\n",
1283 " Step(x=-1, y=1, dir=<Direction.RIGHT: 2>),\n",
1284 " Step(x=-1, y=0, dir=<Direction.DOWN: 3>),\n",
1285 " Step(x=0, y=0, dir=<Direction.RIGHT: 2>)]"
1286 ]
1287 },
1288 "execution_count": 1005,
1289 "metadata": {},
1290 "output_type": "execute_result"
1291 }
1292 ],
1293 "source": [
1294 "trace_tour(walks[3])"
1295 ]
1296 },
1297 {
1298 "cell_type": "code",
1299 "execution_count": 1006,
1300 "metadata": {},
1301 "outputs": [
1302 {
1303 "data": {
1304 "image/png": "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\nFUMk4P8ANAvxgu/mStQAAAAASUVORK5CYII=\n",
1305 "text/plain": [
1306 "<matplotlib.figure.Figure at 0x7f4027bb3e80>"
1307 ]
1308 },
1309 "metadata": {},
1310 "output_type": "display_data"
1311 }
1312 ],
1313 "source": [
1314 "plot_trace(trace_tour(walks[3]))"
1315 ]
1316 },
1317 {
1318 "cell_type": "code",
1319 "execution_count": 57,
1320 "metadata": {},
1321 "outputs": [
1322 {
1323 "data": {
1324 "text/plain": [
1325 "10"
1326 ]
1327 },
1328 "execution_count": 57,
1329 "metadata": {},
1330 "output_type": "execute_result"
1331 }
1332 ],
1333 "source": [
1334 "long_walks = [w for w in walks if len(w) >= 30]\n",
1335 "len(long_walks)"
1336 ]
1337 },
1338 {
1339 "cell_type": "code",
1340 "execution_count": 58,
1341 "metadata": {},
1342 "outputs": [
1343 {
1344 "data": {
1345 "image/png": "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\nLJjGS/8Hemre+Ei14dEAAAAASUVORK5CYII=\n",
1346 "text/plain": [
1347 "<matplotlib.figure.Figure at 0x7f4027d30588>"
1348 ]
1349 },
1350 "metadata": {},
1351 "output_type": "display_data"
1352 }
1353 ],
1354 "source": [
1355 "plot_trace(trace_tour(long_walks[0]))"
1356 ]
1357 },
1358 {
1359 "cell_type": "code",
1360 "execution_count": 59,
1361 "metadata": {},
1362 "outputs": [
1363 {
1364 "data": {
1365 "image/png": "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\n",
1366 "text/plain": [
1367 "<matplotlib.figure.Figure at 0x7f4027d86518>"
1368 ]
1369 },
1370 "metadata": {},
1371 "output_type": "display_data"
1372 }
1373 ],
1374 "source": [
1375 "plot_trace(trace_tour(long_walks[1]))"
1376 ]
1377 },
1378 {
1379 "cell_type": "code",
1380 "execution_count": 60,
1381 "metadata": {},
1382 "outputs": [
1383 {
1384 "data": {
1385 "image/png": "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\nEZGA/wZbNepTD8ADbQAAAABJRU5ErkJggg==\n",
1386 "text/plain": [
1387 "<matplotlib.figure.Figure at 0x7f4027c0a8d0>"
1388 ]
1389 },
1390 "metadata": {},
1391 "output_type": "display_data"
1392 }
1393 ],
1394 "source": [
1395 "plot_trace(trace_tour(long_walks[2]))"
1396 ]
1397 },
1398 {
1399 "cell_type": "code",
1400 "execution_count": 61,
1401 "metadata": {},
1402 "outputs": [
1403 {
1404 "data": {
1405 "image/png": "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\nFUMk4P8ANAvxgu/mStQAAAAASUVORK5CYII=\n",
1406 "text/plain": [
1407 "<matplotlib.figure.Figure at 0x7f4027d86518>"
1408 ]
1409 },
1410 "metadata": {},
1411 "output_type": "display_data"
1412 }
1413 ],
1414 "source": [
1415 "plot_trace(trace_tour(long_walks[3]))"
1416 ]
1417 },
1418 {
1419 "cell_type": "code",
1420 "execution_count": 62,
1421 "metadata": {},
1422 "outputs": [
1423 {
1424 "data": {
1425 "image/png": "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\n",
1426 "text/plain": [
1427 "<matplotlib.figure.Figure at 0x7f4027d88ac8>"
1428 ]
1429 },
1430 "metadata": {},
1431 "output_type": "display_data"
1432 }
1433 ],
1434 "source": [
1435 "plot_trace(trace_tour(long_walks[4]))"
1436 ]
1437 },
1438 {
1439 "cell_type": "code",
1440 "execution_count": 63,
1441 "metadata": {},
1442 "outputs": [
1443 {
1444 "data": {
1445 "image/png": "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\n",
1446 "text/plain": [
1447 "<matplotlib.figure.Figure at 0x7f4027db4390>"
1448 ]
1449 },
1450 "metadata": {},
1451 "output_type": "display_data"
1452 }
1453 ],
1454 "source": [
1455 "plot_trace(trace_tour(long_walks[5]))"
1456 ]
1457 },
1458 {
1459 "cell_type": "code",
1460 "execution_count": 64,
1461 "metadata": {},
1462 "outputs": [
1463 {
1464 "data": {
1465 "image/png": "iVBORw0KGgoAAAANSUhEUgAAARkAAAEACAYAAACHyQJEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFlVJREFUeJzt3Xt01PWZx/H3k4QkJESFKjaGS1RKFQ4ocERFXakWxYJh\nV3dtaxXrBbvdunhhwQu0Ac9iXYv10NP2D63r0ZiKVK0FLd4VQa1bCWAAi2yzcjFIqUvQCJqEefaP\nBA5LkwCZ7zeTmXxe58xhJvmd5/v8mOTDb34z/B5zd0REYslKdQMiktkUMiISlUJGRKJSyIhIVAoZ\nEYlKISMiUQUJGTM70sx+Y2bvmdlaMzs9RF0RSX85gerMB37v7v9kZjlAQaC6IpLmLNkP45lZEbDK\n3U8M05KIZJIQL5dOAP5qZg+ZWZWZ3W9mPQPUFZEMECJkcoCRwC/cfSSwC7gtQF0RyQAhzslsATa7\n+zstj58Abj1wIzPTf5ISyWDubq19PekjGXffBmw2s8EtXzofWNfGtlFv5eXl0dfQPmg/0u3WGfvQ\nnlDvLk0FKs2sB1ADXB2oroikuSAh4+6rgdNC1BKRzJJRn/gdO3ZsqltIWibsA2g/upJU70PSn5M5\n5IXMvLPWEpHOZWZ4rBO/IiLtUciISFQKGRGJSiEjIlEpZEQkKoWMiESlkBGRqBQyIhKVQkZEolLI\niEhUChkRiUohIyJRKWREJCqFjIhEFeSiVWb2AbATSACN7j46RF0RSX+hLr+ZAMa6+45A9UQkQ4R6\nuWQBa0kEW7duZefOnaluI2nr168/6IWrk7Fnzx42bNgQrT5AfX09W7ZsibpGV3q+g1wZz8xqgP8F\nHLjf3R9oZRtdGe8Q1NTUsGNH+APC8ePHs2vXLqZPn87UqVPp06dP8DX2ampqYvXq1cHrrlq1iuuu\nu44hQ4Zw5513UlpaGnyNiooK5s+fz7hx45gxYwa9e/cOvsbNN9/Mm2++yeTJk7nmmmvo2TP8LMTO\nfL6h/SvjhQqZL7v7R2Z2DPAicIO7Lz9gGy8vL9/3eOzYsSm/9mhX8/zzzzN+/Pjo6xx//PHU1NRE\nqz927FiWLl0arX5WVhZmxp49e6KukZuby+effx5tjc4S4/l+7bXXeO211/Y9njNnTpshE2P+Sjlw\nSytfd2lbIpHwU045xbOzs/2uu+4KXv+MM87wIUOG+OjRoz3mc1FdXe35+fmen5/vtbW1QWuvXbvW\nCwsL/eqrr/ZNmzYFrb3XwoULvVevXj579mzfuXNnlDWmTp3qffv29QceeMAbGhqirNFZz/deLWu0\nngltfeNQb0AB0KvlfiHwBnBBK9tF39F0tmLFCqf55ab36dPHE4lE0PqNjY2eSCR84sSJUX/orrzy\nyn37MWvWrOD1Gxsbg9fs7DUSiUT0NTrr+d6rvZAJcbL2WGC5ma0E/gAsdvcXAtTtVoYPH861114L\nwIIFCzBr/cizo3JycoLXbM0dd9yx7/6UKVOC18/JCfWGaOrWMLPoa3TW830oQoyp/R93P9XdR7j7\nMHe/O0Rj3U1OTg6TJk0CYNy4cSnupuNOOukkAIqLixkwYECKu5GuQG87i0hUChkRiUohIyJRKWRE\nJCqFjIhEpZARkagUMiISlUJGRKJSyIhIVAoZEYlKISMiUSlkRCQqhYyIRKWQEZGoFDIiEpVCRkSi\nChYyZpZlZlVmtihUTRFJfyGPZG4E1gWsJ4G9+OKLPPPMMwDMmDEjxd1IbF3l+Q4SMmbWD/gG8KsQ\n9SSOrKwsevToQXZ2NvX19UFruztPPfUUmzdvDlq3O9i9ezeVlZXBn5OYz/fhCHU14/uA6cCRgep1\nSx55+N15553HySefTHV1NZ988gnXX399sNoNDQ08/PDD5OfnA5CbmxusdiabO3cu8+bNo66ujqFD\nhzJmzJhgtd2dI444grq6On74wx8Gq3u4kg4ZM5sAbHP3VWY2luaRta2aPXv2vvsa7va3amtrycrK\nYuvWrRQXFwevb2b85Cc/4cILL6SysjJ4fWj+wc7Ly+O+++6LUj+TLF26lFmzZpGXlwfA2rVrWbt2\nbfB1pk2bFvzn6cDhbu1qa1bKod6Au4BNQA2wFagHHmllu4hTX9JfY2Ojl5SUeHZ2tn//+99PdTuH\nrbGx0c8++2wvLy/3urq6VLeTFhYtWuSAP/744z5q1ChfvXp1qlvqMNqZuxRkTO1eZnYuMM3dy1r5\nnodcK9NUVVUxatQoAL70pS+xffv2LjM3R+JYvHgxZWVl0V8md4b2ZmHrczJdxIgRI/jpT38KNAeO\nAkYyRdAxdu6+FIg3aT2DmRmDBg0C0FA0ySg6khGRqBQyIhKVQkZEolLIiEhUChkRiUohIyJRKWRE\nJCqFjIhEpZARkagUMiISlUJGRKJSyIhIVAoZEYlKISMiUSlkRCQqhYyIRBXiQuJ5wOtAbku9J9x9\nTrJ1RSQzJH0k4+5fAF9z9xHAqcBFZjY66c5EMti6desoK2u+FHZpaWlGXOe3LUFeLrn7rpa7eTQf\nzWTu31iGWLZsGTfeeCO7du06+MYS3IABAygqKsLMGDZsWEZf0znUBMksM1sJfAS86O5/DFG3u2ls\nbIy+Rm1tLcOGDWP8+PH87Gc/o7CwEDMLeistLeWdd96Jvi/prFevXkyfPh135+677051O1EFuZC4\nuyeAEWZ2BPC0mQ1x97+Zi63hbu3bO9hr7dq1DB06NMoat9xyC2vWrKGgoCBKfYAtW7bw3e9+l+rq\n6oz+FzpZe5/jWM91TJ063O3AG/Aj4JZWvh5hpFTm+PTTT72oqMjNzCdOnBhtnYkTJzrgr7/+uk+d\nOtU/++yzoPUfeeQRLyws9IKCAn/55ZeD1s40e4e7ZQLaGe6W9MslMzvazI5sud8T+Drwp2Trdjeb\nNm3i008/xd2prq6OfiLwnHPOYf78+cGPaN566y0+++wzdu3axdtvvx20tqSnEOdkioFXzWwV8Dbw\nvLv/PkDdbmXIkCEsWrQIgA8++CBtX2b88pe/BKC4uJjbb789xd1IV5D0ORl3rwZGBuhFRDKQPvEr\nIlEpZEQkKoWMiESlkBGRqBQyIhKVQkZEolLIiEhUChkRiUohIyJRKWREJCqFjIhEpZARkagUMiIS\nlUJGRKJSyIhIVCGujNfPzF4xs3VmVm1mU0M0JiKZIcSRTBPN1/QdApwJ/MDMTgpQVwL74osv2LRp\nEwDbt29PcTfdm7uzYcMGgH3PSaYKMdztI3df1XK/HngPKEm2roT30EMP8e677wLwzW9+M8XddG8r\nV65k2rRpAIwcOVLD3Q6VmZXSPEVSV5DugiZNmkR+fj49e/bkmmuuibpWIpHgpptuYsKECdHWWL9+\nPZdeeim33nprtDWWLVvG2WefzcKFC4PWHT58OCUlJWRnZ3PZZZel7TWdD0lbYwwO9wb0At4BJrXx\n/XjzGDLEb3/7Wwc8kUhEW+Oyyy7z3r17e1NTU7Q1jj/+eDcz79Gjh9M8TTTKzczczKLVP+aYYzw7\nOzvqPmRlZXltbW2056Kz0M5IlCDD3cwsB3gCqHD337W1nYa7te+FF14A4NVXX+W8886Lssbu3bvZ\nsWMH2dnZUeoDLFmyhNtuu40lS5YAMGXKlOBrFBUVsXz5cqqqqmhqaoqyRp8+fViwYAGbNm0iNzeX\nyZMnB63v7lx11VUUFxcHrdsZDme4m3mA14Jm9gjwV3e/pZ1tPMRamWrr1q0MHDiQxsZGRowYwYoV\nK6IcQl988cU888wznXIO4P333+fPf/4zF110UbQ1li1bRkFBAaNGjYpSP5FI8PTTT3PaaafRv3//\nKGtkAjPD3Vv9gU36SMbMzgK+A1S3zMN24A53fy7Z2t1JU1MTBQUF7Ny5k5KSzDhvPnjwYAYPHhx1\njXPOOSdq/aysLC655JKoa2S6EHOX3gDiHXt3E/3796eiooKysjIWL16c6nZEgtEnfkUkKoWMiESl\nkBGRqBQyIhKVQkZEolLIiEhUChkRiUohIyJRKWREJCqFjIhEpZARkagUMiISlUJGRKJSyIhIVAoZ\nEYlKISMiUQUJGTN70My2mdm7IeqJSOYIdSTzEHBhoFoSyfbt23n99dcBqKqqSnE30l0ECRl3Xw7s\nCFGrK2pqaopa392jrwHw5JNP8sknnwAwffr04PU7Yx8k/eiczEEsXLiQ3r17M3v27H2/oKHddNNN\nlJSU7BuJEssVV1xBUVEReXl5zJw5M2jthoYGjj32WC644AJWrlwZtLakubYGMh3uDRgIvNvO9yON\nlXJPJBI+cuTI6EO48vPzo66x9xbTrFmzog9cA/zHP/5x1P2QroV2hrsFmbsEYGYDgcXuPryN73t5\nefm+xyGHu7388suMGzeOwYMH8+ijjwadV1RRUcH8+fMZN24cM2bMoHfv3sFq73XzzTfz5ptvMnny\nZH70ox9RWloafI39VVdX09DQELRmQ0MDY8aMoW/fvvzlL3+huLiY2traoGtI13HgcLc5c+a0OXcp\nZMiU0hwyw9r4voda60CjRo2iqqoKM+OVV14JOplyz5491NTU8JWvfCVYzQPV19dTV1dHv379oq3R\nGWpqaujfvz+5ubkKmW6mveFuod7C/jXwJjDYzDaZ2dUh6h6q6667DoCjjjqKr371q0FrZ2dnRw0Y\ngF69eqV9wACccMIJ9OjRI9VtSBcT7EjmoAtFHlNrZpSXl/+/eduSGmamI5luJvqRjIhIWxQyIhKV\nQkZEolLIiEhUChkRiUohIyJRKWREJCqFjIhEpZARkagUMiISlUJGRKJSyIhIVAoZEYlKISMiUSlk\nRCQqhYyIRBXqynjjzexPZva+md0aoqaIZIakQ8bMsoCf0zzcbSjwbTM7Kdm6kp6effZZALZu3cob\nb7yR4m6kKwhxJDMa2ODuG929EVgATApQV9LQkiVLMDOysrJYvnx5qtuRLiBEyJQAm/d7vKXla9IN\nzZw5k9zcXAoLC7nhhhtS3Y50ATkBarR28eBWrxi+/0W+Q85dampq4uijjyYvLy9IPem44uJiBg8e\nTElJCYWFhaluRyI5cO5Se5KeVmBmZwCz3X18y+PbaJ4m9x8HbBdtWkFFRQXXXnstffv2ZePGjWRn\nZ0dZRw6NphV0P7GnFfwRGGRmA80sF/gWsChA3UM2d+5cGhsb+fDDD3nuuec6c2kROYikQ8bd9wA3\nAC8Aa4EF7v5esnUPx4MPPgjA6aefHnR6pIgkL8Q5Gdz9OSDs6MbDcNZZZwEwfvx4nQcQ6WL0iV8R\niUohIyJRKWREJCqFjIhEpZARkagUMiISlUJGRKJSyIhIVAoZEYlKISMiUSlkRCQqhYyIRKWQEZGo\nFDIiEpVCRkSiUsiISFRJhYyZ/aOZrTGzPWY2MlRTIpI5kj2SqQb+AVgaoBfJAPPmzQOah7s9+uij\nKe5GuoKkQsbd17v7Blofi5ISy5YtY8WKFaluIym7d++msrKS+vr6aGts376dBQsWsGfPnqB1Gxoa\n6NGjB7m5ucSaTiHpJemRKABm9iowzd2r2tkm2kiUlvqUlJSwbds2mpqamDJlSvA1zj33XC6//HLM\n4mXq3LlzmTdvHnV1dQwdOpQxY8YEre/uJBIJHnvsMXbv3k1ZWRnHHntssPqNjY1UVlZyzDHHsHHj\nRnJyglxGWrq49kaiHDRkzOxFYP+fQqN5eNtMd1/css0hhUx5efm+xyGHuwFceeWVVFZWAkT9F/Sl\nl17i/PPPj1J76dKljB07lry8PL744osoawAUFBSQSCT4/PPPo61RUVHBFVdcEa2+pNaBw93mzJnT\nZsjg7knfgFeBkQfZxmNbv369X3rppT5jxozgtSdMmOBm5iNGjPBEIhG8vrv7okWLHPDHH3/cR40a\n5atXr46yzq5du/zee+/10aNH+44dO6KsId1Ly+93q7/7IV8u/Zu7t3kyJPbLpZh2797NUUcdRUND\nAwAffvghxx13XPB1Fi9eTFlZmc5lSNqJNkHSzP7ezDYDZwDPmNmSZOp1VT179mTdunVA80uaGAEj\nkqmSOivn7k8DTwfqpUs78cQTARg0aFCKOxFJL/rEr4hEpZARkagUMiISlUJGRKJSyIhIVAoZEYlK\nISMiUSlkRCQqhYyIRKWQEZGoFDIiEpVCRkSiUsiISFQKGRGJSiEjIlEpZEQkqmSvjHePmb1nZqvM\n7EkzOyJUYyKSGZI9knkBGOrupwIbgNuTb6l7WrduHWVlZQCUlpbqOr+SMZId7vaSuydaHv4B6Jd8\nS13bxx9/zPTp03nrrbeC1h0wYABFRUWYGcOGDYs620mkMwWZVgBgZouABe7+6za+n7bTCvYyM/Lz\n86PNK2q54jtr1qxh6NChUdYQiaG9aQUHvZD4IQ53mwk0thUwe82ePXvf/dDD3TrD9773PR5++OGo\na5SXlytgpMs7cLhbe5I+kjGzq4DrgfPcvc2xh5lwJAPNM6TvueceLrnkEs4888xUtyPSJSQ1pvYg\nhccD9wJ/5+4fH2TbjAgZEflbMUNmA5AL7A2YP7j7v7SxrUJGJENFC5nDbEIhI5Khoo2pFRE5GIWM\niESlkBGRqBQyIhKVQkZEolLIiEhUChkRiUohIyJRKWREJCqFjIhEpZARkagUMiISlUJGRKJSyIhI\nVAoZEYkq2blLd5rZajNbaWbPmdmXQzUmIpkh2SOZe9z9FHcfATwLlAfoqcMO9cLGXVkm7ANoP7qS\nVO9DsnOX6vd7WAgk2tq2M6T6LzOETNgH0H50Janeh4OORDkYM/t3YDJQB3wt6Y5EJKMc9EjGzF40\ns3f3u1W3/HkxgLvPcvcBQCXwr7EbFpH0EnKC5ADgWXcf1sb3dRVxkQzW4QmS7TGzQe7+3y0PJwHv\nHW4DIpLZkp279AQwmOYTvhuBf3b3rYF6E5EM0Glzl0Ske8qIT/ya2Xgz+5OZvW9mt6a6n44ws35m\n9oqZrWs5uT411T11lJllmVmVmS1KdS8dZWZHmtlvzOw9M1trZqenuqeOMLObzWxNy5s1lWaW29k9\npH3ImFkW8HPgQmAo8G0zOym1XXVIE3CLuw8BzgR+kKb7AXAjsC7VTSRpPvB7dz8ZOIV2zjd2VWZ2\nHM3v+I509+E0n4P9Vmf3kfYhA4wGNrj7RndvBBbQfBI6rbj7R+6+quV+Pc0/1CWp7erwmVk/4BvA\nr1LdS0eZWRFwjrs/BODuTe7+SYrb6qhsoNDMcoACoLazG8iEkCkBNu/3eAtp+Mu5PzMrBU4F3k5t\nJx1yHzAdSOeTfScAfzWzh1pe9t1vZj1T3dThcvda4F5gE/AhUOfuL3V2H5kQMq29NZ62P+Bm1gt4\nArjxgP+20eWZ2QRgW8sRmdH6c5MOcoCRwC/cfSSwC7gttS0dPjM7iuaj+oHAcUAvM7u8s/vIhJDZ\nAgzY73E/UnBIGELLIe0TQIW7/y7V/XTAWUCZmdUAjwFfM7NHUtxTR2wBNrv7Oy2Pn6A5dNLN14Ea\nd/9fd98DPAWM6ewmMiFk/ggMMrOBLWfOvwWk67sa/wmsc/f5qW6kI9z9Dncf4O4n0Pw8vOLuk1Pd\n1+Fy923AZjMb3PKl80nPE9mbgDPMLN/MjOb96PQT2En/B8lUc/c9ZnYD8ALNofmgu6fjOwFnAd8B\nqs1sJc0v+e5w9+dS21m3NRWoNLMeQA1wdYr7OWzu/l8tH5hdCTS2/Hl/Z/ehD+OJSFSZ8HJJRLow\nhYyIRKWQEZGoFDIiEpVCRkSiUsiISFQKGRGJSiEjIlH9H8jaA16UZfPjAAAAAElFTkSuQmCC\n",
1466 "text/plain": [
1467 "<matplotlib.figure.Figure at 0x7f4027d1fcf8>"
1468 ]
1469 },
1470 "metadata": {},
1471 "output_type": "display_data"
1472 }
1473 ],
1474 "source": [
1475 "plot_trace(trace_tour(long_walks[6]))"
1476 ]
1477 },
1478 {
1479 "cell_type": "code",
1480 "execution_count": 65,
1481 "metadata": {},
1482 "outputs": [
1483 {
1484 "data": {
1485 "image/png": "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\nPKIrV0QCUPBEAlDwRAJQ8EQCUPBEAlDwRAJQ8EQCUPBEAlDwRAJQ8EQCUPAkJyxfvhyAysrKwJ1k\nh4InOeHgdJwnn3wycCfZoeBJTpg5cybFxcVNswNC8dRk7Uxm9adDwZOc0KNHD+rq6ujRo0fQPt56\n6y0AXn/99UTHUfAkJ5i1eIeErFu8eDEAjz76aKLjKHgizcyePRuA1157LdFxFDyRABQ8kQAUPJEA\nFDyRABQ8kQAUPJEAFDyRABQ8kQAUPJEAFDyRACIFz8xmmVmFma0xsxfNrGtcjYnks6hnvLeAwe4+\nFNgE3Bm9JSlEB9f527NnT+BOsiNS8Nx9ibs3pJ6uoHFtPClA7s7KlSsznsd2zz33APDggw/G2VbO\nimW1oJRraVz/XArMRx99xMiRI9m6dWukOmbG+PHjY+oqmqQnwrYbPDNbDPRt/inAgbvcfVFqm7uA\nOnd/tq1aWhE2P91yyy1/F7q+ffu2sXXLzIzp06dzzDHHxNla2lavXt3039LS0rT2TWdF2DjWQP8R\ncB0w0t33t7GdRx1LctPo0aNZsmQJW7Zs4dhjj82ZSa2ZmDBhAnPnzgX+dhuITLW1BnrUdzUvACYD\nF7UVOikM/fv379Chg8Z7vwA8/fTTiY4T9V3NOUAXYLGZrTazuTH0JBJMly5dAOjZs2ei40R6c8Xd\nB8bViEgh0ZUrIgEoeCIBKHgiASh4IgEoeCIBKHgiASh4IgEoeCIBKHgiASh4EtkXX3wBRL+ouJAo\neB2cu7N3797IdTKtsW/fvqZllN94443IfRSKOCfCSpa9+uqrTJo0iQ0bNvDd736XoqL0f4526dKF\nvXv3snz5cr71rW/Ru3fvtGt07dqVmpoazjrrrLT3zVX19fWJ1lfwOrDS0tKmsJWXl2dc58gjjwRg\n/fr1GdeYOXNm8NVc41BZWYmZsWXLlkTHiTwR9isPpImwsTMzrrrqKq6++mrOO++8jOt8/vnnLFu2\njPPPPz+js2Y+6RATYSW8zp07RwodNJ7xxo4dW/ChA5g6dSoADzzwQKLj6Cst0szBe74MGjQo0XEU\nPJEAFDyRABQ8kQAUPJEAFDyRABQ8kQAUPJEAFDyRABQ8kQBiCZ6Z3WFmDWaW7H2vRfJE5OCZWT/g\ne0C0xdFECkgcZ7wHgUkx1JE0vPLKKwD89Kc/pa6uLqMami0STqT5eGZWCmx397UdfXmmjub4448H\n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\nr2s6ANnE1QAAAABJRU5ErkJggg==\n",
1486 "text/plain": [
1487 "<matplotlib.figure.Figure at 0x7f4027ca70b8>"
1488 ]
1489 },
1490 "metadata": {},
1491 "output_type": "display_data"
1492 }
1493 ],
1494 "source": [
1495 "plot_trace(trace_tour(long_walks[7]))"
1496 ]
1497 },
1498 {
1499 "cell_type": "code",
1500 "execution_count": 66,
1501 "metadata": {},
1502 "outputs": [
1503 {
1504 "data": {
1505 "image/png": "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\nrkJggg==\n",
1506 "text/plain": [
1507 "<matplotlib.figure.Figure at 0x7f402c0d3588>"
1508 ]
1509 },
1510 "metadata": {},
1511 "output_type": "display_data"
1512 }
1513 ],
1514 "source": [
1515 "plot_trace(trace_tour(long_walks[8]))"
1516 ]
1517 },
1518 {
1519 "cell_type": "code",
1520 "execution_count": 67,
1521 "metadata": {},
1522 "outputs": [
1523 {
1524 "data": {
1525 "text/plain": [
1526 "['RFLFFLFFFFFFLRRLLRLFFFLFFFLRFRLLFFRR',\n",
1527 " 'FLRLFLFFLFRLLRRFLFRFLLFFFLLRRFLF',\n",
1528 " 'LRFLFRFRLLRLRLRRLRRFLFRLRLFRLRRFLLRRLFFRFRRL',\n",
1529 " 'RFLLRFLFFFFLRFFLFLFLRFRFLRRLLFLFRL',\n",
1530 " 'LFFRLFRLLRFFLLRFLFFLRFRFFLLRLRLF',\n",
1531 " 'LRFRLFRFFLRRLRLFFRFFFRFLRFFFFRLR',\n",
1532 " 'LRFLFFFRRLLRFFFRRLFRFFRLLFLRFRFLRRLR',\n",
1533 " 'LLRRLFLFRLFFFFFFLLRLFRLRFLFFRFRLRFLLRFLFLRFLFFFF',\n",
1534 " 'FLFRFFRFLRFLLRFRFRLFRRLLRRFLFLRRFFLR',\n",
1535 " 'FRFFFRFFRRLLFRFLRFRLFLRRFRFLFFRFRL']"
1536 ]
1537 },
1538 "execution_count": 67,
1539 "metadata": {},
1540 "output_type": "execute_result"
1541 }
1542 ],
1543 "source": [
1544 "walks"
1545 ]
1546 },
1547 {
1548 "cell_type": "code",
1549 "execution_count": 68,
1550 "metadata": {},
1551 "outputs": [
1552 {
1553 "data": {
1554 "image/png": "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\n8v89qQ80wuYWhQAAAABJRU5ErkJggg==\n",
1555 "text/plain": [
1556 "<matplotlib.figure.Figure at 0x7f402c0babe0>"
1557 ]
1558 },
1559 "metadata": {},
1560 "output_type": "display_data"
1561 }
1562 ],
1563 "source": [
1564 "plot_trace(trace_tour('FLFFLRFRLFRRRR'))"
1565 ]
1566 },
1567 {
1568 "cell_type": "code",
1569 "execution_count": 69,
1570 "metadata": {},
1571 "outputs": [
1572 {
1573 "data": {
1574 "text/plain": [
1575 "(310, [])"
1576 ]
1577 },
1578 "execution_count": 69,
1579 "metadata": {},
1580 "output_type": "execute_result"
1581 }
1582 ],
1583 "source": [
1584 "w = random_walk()\n",
1585 "ms = mistake_positions(w)\n",
1586 "len(ms), returns_to_origin(ms)"
1587 ]
1588 },
1589 {
1590 "cell_type": "code",
1591 "execution_count": 70,
1592 "metadata": {},
1593 "outputs": [
1594 {
1595 "data": {
1596 "image/png": "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\nRK5CYII=\n",
1597 "text/plain": [
1598 "<matplotlib.figure.Figure at 0x7f402c0b97f0>"
1599 ]
1600 },
1601 "metadata": {},
1602 "output_type": "display_data"
1603 }
1604 ],
1605 "source": [
1606 "plot_trace(trace_tour(w))"
1607 ]
1608 },
1609 {
1610 "cell_type": "code",
1611 "execution_count": 1216,
1612 "metadata": {},
1613 "outputs": [],
1614 "source": [
1615 "def trim_loop(tour, random_mistake=False):\n",
1616 " trace = trace_tour(tour)\n",
1617 " mistakes = mistake_positions(trace)\n",
1618 " if random_mistake:\n",
1619 " end_mistake_index = random.randrange(len(mistakes))\n",
1620 " else:\n",
1621 " end_mistake_index = 0\n",
1622 "# print('end_mistake_index {} pointing to trace position {}; {} mistakes and {} in trace; {}'.format(end_mistake_index, mistakes[end_mistake_index].i, len(mistakes), len(trace), mistakes))\n",
1623 " # while this mistake extends to the next step in the trace...\n",
1624 " while (mistakes[end_mistake_index].i + 1 < len(trace) and \n",
1625 " end_mistake_index + 1 < len(mistakes) and\n",
1626 " mistakes[end_mistake_index].i + 1 == \n",
1627 " mistakes[end_mistake_index + 1].i):\n",
1628 "# print('end_mistake_index {} pointing to trace position {}; {} mistakes and {} in trace'.format(end_mistake_index, mistakes[end_mistake_index].i, len(mistakes), len(trace), mistakes))\n",
1629 " # push this mistake finish point later\n",
1630 " end_mistake_index += 1\n",
1631 " mistake = mistakes[end_mistake_index]\n",
1632 " \n",
1633 " # find the first location that mentions where this mistake ends (which the point where the loop starts)\n",
1634 " mistake_loop_start = max(i for i, loc in enumerate(trace[:mistake.i])\n",
1635 " if (loc.x, loc.y) == (mistake.step.x, mistake.step.y))\n",
1636 "# print('Dealing with mistake from', mistake_loop_start, 'to', mistake.i, ', trace has len', len(trace))\n",
1637 " \n",
1638 " # direction before entering the loop\n",
1639 " direction_before = trace[mistake_loop_start].dir\n",
1640 " \n",
1641 " # find the new instruction to turn from heading before the loop to heading after the loop\n",
1642 " new_instruction = 'F'\n",
1643 " if (mistake.i + 1) < len(trace):\n",
1644 " if turn_left(direction_before) == trace[mistake.i + 1].dir:\n",
1645 " new_instruction = 'L'\n",
1646 " if turn_right(direction_before) == trace[mistake.i + 1].dir:\n",
1647 " new_instruction = 'R'\n",
1648 "# if (mistake.i + 1) < len(trace):\n",
1649 "# print('turning from', direction_before, 'to', trace[mistake.i + 1].dir, 'with', new_instruction )\n",
1650 "# else:\n",
1651 "# print('turning from', direction_before, 'to BEYOND END', 'with', new_instruction )\n",
1652 " return tour[:mistake_loop_start] + new_instruction + tour[mistake.i+1:]\n",
1653 "# return mistake, mistake_loop_start, trace[mistake_loop_start-2:mistake_loop_start+8]"
1654 ]
1655 },
1656 {
1657 "cell_type": "code",
1658 "execution_count": 299,
1659 "metadata": {},
1660 "outputs": [
1661 {
1662 "data": {
1663 "text/plain": [
1664 "'RFFRRFFFRFFRFLLRFLFFLLLLFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLRRLRRRRFFFFFFRRRLLFFFFFFLRRRLLLRLLLLRFRLRFRRRFRLRLLRFRLFLLRFRFLRRRRLRFLLRLRRLFFFRLRRFFRFLRFLLFLFRLRLRLRRRLFFRLRRFFRRFFLLRLLFLLLFRFRFLRLFFLFRRRRLRRLRRLRFRRLRRRFRRRRLLRFLLRRFFRLRFFLFLFRRLLLRLFFFRFRLRLLFRRFLLRLFFFLLRLLRRLRFRFFFFFRRFFLFRFLRFRFLFLFRLFLFLRFFLFRLRRRLRRRRFFFRFLLRLFRFRRRLRFFFFFLLFRRLFRRFRFRFLRLLFRFFFLLRRFRRRRLFFFLFLLLFFLRRLRFLFLFFRLLFFRRFFLRLLRFLRLLFLFRLLLRFFFFFFFFLFLRLLRLRLRFLLFFFLFLFFLFRRRRRFFRLLFFFRLFFLFRLFFRFFFFRLRRRLLFLRRFLRFFLRRFRRFLRFLRRLFRRLFFFFRLFLFFLRFFFFFRLFLFLRFFFLLLFLLLFFLRRLFLFRRFRRFFRRRFFRFLFLLFLFRFRFLLLRRRLFRRFFRLRFLFLFLRRLFFFLFRLRFRFFRFLRRFFFFFLFRLRRFRLLRLLFFLLLFFLFFFRLFRFRRRRLFLFLLLLRLFRFRLRLLFLFLLLRRRLLLFRRFRLRFFRRRLLLFRLRLLFFLLRFFFFRLLRLRLLLRLFFFRRLRFRFFRRRFFFRFFFFLRFLFRFLRFRRLLLRLLFRRLFFLRRFFFRLLFRLFLRRFLRLLRRFFLLFLLLFFFFRRFFRLFFLLFLLFRFRLRFLRFFRFRLRLLLFFFLFLRFRFRFLRRLLLLLRFRRLFLLLLRRFFFLLRFLFFRLLLLFLFRLRFFFFFLRLLFFLLLFFLLRRFLRRFLRLRRLLLRRRRRLLLFLRRLFFFRFLRRLF'"
1665 ]
1666 },
1667 "execution_count": 299,
1668 "metadata": {},
1669 "output_type": "execute_result"
1670 }
1671 ],
1672 "source": [
1673 "w = 'RFFRRFFFRFFRFLLRFLFFLLLLFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLRRLRRRRFFFFFFRRRLLFFFFFFLRRRLLLRLLLLRFRLRFRRRFRLRLLRFRLFLLRFRFLRRRRLRFLLRLRRLFFFRLRRFFRFLRFLLFLFRLRLRLRRRLFFRLRRFFRRFFLLRLLFLLLFRFRFLRLFFLFRRRRLRRLRRLRFRRLRRRFRRRRLLRFLLRRFFRLRFFLFLFRRLLLRLFFFRFRLRLLFRRFLLRLFFFLLRLLRRLRFRFFFFFRRFFLFRFLRFRFLFLFRLFLFLRFFLFRLRRRLRRRRFFFRFLLRLFRFRRRLRFFFFFLLFRRLFRRFRFRFLRLLFRFFFLLRRFRRRRLFFFLFLLLFFLRRLRFLFLFFRLLFFRRFFLRLLRFLRLLFLFRLLLRFFFFFFFFLFLRLLRLRLRFLLFFFLFLFFLFRRRRRFFRLLFFFRLFFLFRLFFRFFFFRLRRRLLFLRRFLRFFLRRFRRFLRFLRRLFRRLFFFFRLFLFFLRFFFFFRLFLFLRFFFLLLFLLLFFLRRLFLFRRFRRFFRRRFFRFLFLLFLFRFRFLLLRRRLFRRFFRLRFLFLFLRRLFFFLFRLRFRFFRFLRRFFFFFLFRLRRFRLLRLLFFLLLFFLFFFRLFRFRRRRLFLFLLLLRLFRFRLRLLFLFLLLRRRLLLFRRFRLRFFRRRLLLFRLRLLFFLLRFFFFRLLRLRLLLRLFFFRRLRFRFFRRRFFFRFFFFLRFLFRFLRFRRLLLRLLFRRLFFLRRFFFRLLFRLFLRRFLRLLRRFFLLFLLLFFFFRRFFRLFFLLFLLFRFRLRFLRFFRFRLRLLLFFFLFLRFRFRFLRRLLLLLRFRRLFLLLLRRFFFLLRFLFFRLLLLFLFRLRFFFFFLRLLFFLLLFFLLRRFLRRFLRLRRLLLRRRRRLLLFLRRLFFFRFLRRLF'\n",
1674 "w"
1675 ]
1676 },
1677 {
1678 "cell_type": "code",
1679 "execution_count": 238,
1680 "metadata": {},
1681 "outputs": [
1682 {
1683 "data": {
1684 "image/png": "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\nrC2Hf85MaAAAAABJRU5ErkJggg==\n",
1685 "text/plain": [
1686 "<matplotlib.figure.Figure at 0x7f4027310390>"
1687 ]
1688 },
1689 "metadata": {},
1690 "output_type": "display_data"
1691 }
1692 ],
1693 "source": [
1694 "w_short = w[:100]\n",
1695 "plot_trace(trace_tour(w_short))"
1696 ]
1697 },
1698 {
1699 "cell_type": "code",
1700 "execution_count": 214,
1701 "metadata": {},
1702 "outputs": [
1703 {
1704 "name": "stdout",
1705 "output_type": "stream",
1706 "text": [
1707 "turning from Direction.UP to Direction.UP with F\n",
1708 "RFFRRFFFRFFRFLLRFLFFLLLLFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLR\n",
1709 "RFFRRFFFRFFRFLLRFLFFFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLR\n"
1710 ]
1711 },
1712 {
1713 "data": {
1714 "image/png": "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\nHk9j8/PzmT59Opdccgk33nhjwuPWrl1LSUkJzz//POPHj/dUc+nSpdx8c3QdujFjxtCrV6+Ex65e\nvZqNGzcC8JOf/KRxnaTzUVV+8Ytf0NDQQFlZGUVFRZ7m3LTxIr4kbCKqqqrYtm0bEP0VICur5f+h\nZPr06UyaNIkhQ4Z4aot999132b17N1VVVQl3mXlZFTHoxv//DbzbzP/5/inkkpkzZyqgr776quex\nS5YsUb+fpwkTJvgaW19f37inOHz4sOfxgObk5Hget23btsa6dXV1nsenw4IFCxTQOXPmeB77pz/9\nyffXVvXce+KW/+PPMT/+8Y8B+OEPf5jmmSQmKyuLwYMHA1BYWJiyugMGDACgU6dO5OQEta5fuO6+\nO7pO4L333pvmmXxVoJ89Vf1P4D+D3KYx5txsT2yM4yzExjjOQmyM4yzExjjOQmyM4yzExjjOQmyM\n4yzExjjOQtyC7N27F/jvtkIv4ouxee1+CkIkEkl5TdfEv7aHDx8OfNsW4pDMmTPH85pKzz33HAC/\n/e1vPdeLrzfV9KT5sFVUVDTer6ysTHhcXV0ds2fPTqq2qvLOO++wevVqz2Pr6+t57bXX2LJli6/a\nr7zyCrt37/Y0Zvr06QAsWLDAV81zau6k6qBvZEgDxKlTp5JqzWvXrp1WVlZ6rvuzn/1MCwsLNRKJ\neB575513aq9evTyPU1Xt3r17Uq+3f//+vupec801aWnZTOaWl5enFRUVvl4v52iAcOPMc4fk5+ez\nYcMG7rvvPn70ox/xzW9+09P4AQMG0KFDB891a2pqKC8v97yeUyQS4fXXXweiF1Do2bNnwmMrKys5\ndOgQAIsXLyYvLy+hcadPn2bcuHEcPHiQ7du309DQ4LkVsaSkhMsvv5z+/fs3Np0kYtWqVTz//PPk\n5+dz9913M3LkyITHzp8/n7feeouCggLGjx/Pt771LU9z7tevHwUFBZ7GJKS5dAd9I0P2xOnitxWx\noaGhcU9x4sQJT2Nra2t9txMeP368cWxDQ4OnsarRPdOUKVM8j/vzn/+sgN52222ex8ZbRRcvXux5\nbLKwVkTTHBFpbEVs3769p7G5ubmN9722E8ZXVBw6dGhKV3S86qqrAG8XMIi76aabvvJvS2EhNsZx\nFmJjHGchNsZxFmJjHGchNsZxFmJjHGchNsZxSYdYRIpFZLWIfCwiH4nIT4OYmDEmMUGcdhkBHlHV\n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\nYII=\n",
1715 "text/plain": [
1716 "<matplotlib.figure.Figure at 0x7f40274ccbe0>"
1717 ]
1718 },
1719 "metadata": {},
1720 "output_type": "display_data"
1721 }
1722 ],
1723 "source": [
1724 "trimmed = trim_loop(w_short)\n",
1725 "print('{}\\n{}'.format(w_short, trimmed))\n",
1726 "plot_trace(trace_tour(trimmed))"
1727 ]
1728 },
1729 {
1730 "cell_type": "code",
1731 "execution_count": 215,
1732 "metadata": {},
1733 "outputs": [
1734 {
1735 "name": "stdout",
1736 "output_type": "stream",
1737 "text": [
1738 "turning from Direction.UP to Direction.LEFT with L\n",
1739 "RFFRRFFFRFFRFLLRFLFFFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLR\n",
1740 "RFFRRFFFRFFRFLLRFLFFLLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLR\n"
1741 ]
1742 },
1743 {
1744 "data": {
1745 "image/png": "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\n",
1746 "text/plain": [
1747 "<matplotlib.figure.Figure at 0x7f40271e3240>"
1748 ]
1749 },
1750 "metadata": {},
1751 "output_type": "display_data"
1752 }
1753 ],
1754 "source": [
1755 "trimmed2 = trim_loop(trimmed)\n",
1756 "print('{}\\n{}'.format(trimmed, trimmed2))\n",
1757 "plot_trace(trace_tour(trimmed2))"
1758 ]
1759 },
1760 {
1761 "cell_type": "code",
1762 "execution_count": 250,
1763 "metadata": {},
1764 "outputs": [
1765 {
1766 "data": {
1767 "text/plain": [
1768 "[Mistake(i=104, step=Step(x=-4, y=6, dir=<Direction.DOWN: 3>)),\n",
1769 " Mistake(i=105, step=Step(x=-5, y=6, dir=<Direction.LEFT: 4>)),\n",
1770 " Mistake(i=106, step=Step(x=-5, y=7, dir=<Direction.UP: 1>)),\n",
1771 " Mistake(i=107, step=Step(x=-5, y=8, dir=<Direction.UP: 1>)),\n",
1772 " Mistake(i=108, step=Step(x=-5, y=9, dir=<Direction.UP: 1>)),\n",
1773 " Mistake(i=115, step=Step(x=-5, y=12, dir=<Direction.LEFT: 4>)),\n",
1774 " Mistake(i=116, step=Step(x=-5, y=11, dir=<Direction.DOWN: 3>)),\n",
1775 " Mistake(i=127, step=Step(x=2, y=11, dir=<Direction.LEFT: 4>)),\n",
1776 " Mistake(i=130, step=Step(x=3, y=11, dir=<Direction.UP: 1>)),\n",
1777 " (132, Step(x=3, y=11, dir=<Direction.UP: 1>))]"
1778 ]
1779 },
1780 "execution_count": 250,
1781 "metadata": {},
1782 "output_type": "execute_result"
1783 }
1784 ],
1785 "source": [
1786 "mistake_positions(trace_tour(w[:130]))[-10:]"
1787 ]
1788 },
1789 {
1790 "cell_type": "code",
1791 "execution_count": 288,
1792 "metadata": {},
1793 "outputs": [
1794 {
1795 "name": "stdout",
1796 "output_type": "stream",
1797 "text": [
1798 "Step(x=40, y=36, dir=<Direction.UP: 1>)\n"
1799 ]
1800 },
1801 {
1802 "data": {
1803 "image/png": "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\nRK5CYII=\n",
1804 "text/plain": [
1805 "<matplotlib.figure.Figure at 0x7f4027beb4a8>"
1806 ]
1807 },
1808 "metadata": {},
1809 "output_type": "display_data"
1810 }
1811 ],
1812 "source": [
1813 "w_tour_start = w #[:250]\n",
1814 "print(trace_tour(w_tour_start)[-1])\n",
1815 "plot_trace(trace_tour(w_tour_start))"
1816 ]
1817 },
1818 {
1819 "cell_type": "code",
1820 "execution_count": 289,
1821 "metadata": {},
1822 "outputs": [
1823 {
1824 "name": "stdout",
1825 "output_type": "stream",
1826 "text": [
1827 "RFFRRFFFRFFRFLLRFLFFLLLLFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLRRLRRRRFFFFFFRRRLLFFFFFFLRRRLLLRLLLLRFRLRFRRRFRLRLLRFRLFLLRFRFLRRRRLRFLLRLRRLFFFRLRRFFRFLRFLLFLFRLRLRLRRRLFFRLRRFFRRFFLLRLLFLLLFRFRFLRLFFLFRRRRLRRLRRLRFRRLRRRFRRRRLLRFLLRRFFRLRFFLFLFRRLLLRLFFFRFRLRLLFRRFLLRLFFFLLRLLRRLRFRFFFFFRRFFLFRFLRFRFLFLFRLFLFLRFFLFRLRRRLRRRRFFFRFLLRLFRFRRRLRFFFFFLLFRRLFRRFRFRFLRLLFRFFFLLRRFRRRRLFFFLFLLLFFLRRLRFLFLFFRLLFFRRFFLRLLRFLRLLFLFRLLLRFFFFFFFFLFLRLLRLRLRFLLFFFLFLFFLFRRRRRFFRLLFFFRLFFLFRLFFRFFFFRLRRRLLFLRRFLRFFLRRFRRFLRFLRRLFRRLFFFFRLFLFFLRFFFFFRLFLFLRFFFLLLFLLLFFLRRLFLFRRFRRFFRRRFFRFLFLLFLFRFRFLLLRRRLFRRFFRLRFLFLFLRRLFFFLFRLRFRFFRFLRRFFFFFLFRLRRFRLLRLLFFLLLFFLFFFRLFRFRRRRLFLFLLLLRLFRFRLRLLFLFLLLRRRLLLFRRFRLRFFRRRLLLFRLRLLFFLLRFFFFRLLRLRLLLRLFFFRRLRFRFFRRRFFFRFFFFLRFLFRFLRFRRLLLRLLFRRLFFLRRFFFRLLFRLFLRRFLRLLRRFFLLFLLLFFFFRRFFRLFFLLFLLFRFRLRFLRFFRFRLRLLLFFFLFLRFRFRFLRRLLLLLRFRRLFLLLLRRFFFLLRFLFFRLLLLFLFRLRFFFFFLRLLFFLLLFFLLRRFLRRFLRLRRLLLRRRRRLLLFLRRLFFFRFLRRLF\n",
1828 "RFFRRFFFRFLRFRFLLRFLLRLRRLFRLRRFFLLRLLRRFRFLRLFFLFLRRLRRLRLFLLRRFFLRLLFFFFFRRFFLFRLFFRLLRRFLFFFLRFLRRLRFLFLFFRLLFFRRFFLRLFRFFRLFFLRRFLRFLRRLFRRLFFFFRLFLFFLRFFLFRFLRRFFFFFLFRLRRFRLLRLLFRFLFFFRLFRFLFLRLRFFFFFLFFRFFFFLRFLFRFLRLRLFFLRRFFFRLLFRLFLRRFLRLLRLFFRFLRRLFLLRFLFFRFLFRLRFFFFFLRLLFRFLLRRFLRRFLRLRFLRRLFFFRFLRRLF\n",
1829 "Step(x=40, y=36, dir=<Direction.UP: 1>)\n"
1830 ]
1831 },
1832 {
1833 "data": {
1834 "image/png": "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\n",
1835 "text/plain": [
1836 "<matplotlib.figure.Figure at 0x7f4026fcb9b0>"
1837 ]
1838 },
1839 "metadata": {},
1840 "output_type": "display_data"
1841 }
1842 ],
1843 "source": [
1844 "w_tour = w_tour_start\n",
1845 "w_trace = trace_tour(w_tour)\n",
1846 "mks = mistake_positions(w_trace)\n",
1847 "while len(mks) > 1:\n",
1848 "# print(len(mks))\n",
1849 " w_tour = trim_loop(w_tour)\n",
1850 " w_trace = trace_tour(w_tour)\n",
1851 " mks = mistake_positions(w_trace)\n",
1852 "print('{}\\n{}\\n{}'.format(w_tour_start, w_tour, trace_tour(w_tour)[-1]))\n",
1853 "plot_trace(trace_tour(w_tour))"
1854 ]
1855 },
1856 {
1857 "cell_type": "code",
1858 "execution_count": 950,
1859 "metadata": {},
1860 "outputs": [],
1861 "source": [
1862 "def trim_all_loops(tour, mistake_reduction_attempt_limit=10):\n",
1863 " trace = trace_tour(tour)\n",
1864 " mistake_limit = 1\n",
1865 " if trace[-1].x == 0 and trace[-1].y == 0:\n",
1866 " mistake_limit = 0\n",
1867 " mistakes = mistake_positions(trace)\n",
1868 " \n",
1869 " old_mistake_count = len(mistakes)\n",
1870 " mistake_reduction_tries = 0\n",
1871 " \n",
1872 " while len(mistakes) > mistake_limit and mistake_reduction_tries < mistake_reduction_attempt_limit:\n",
1873 " tour = trim_loop(tour)\n",
1874 " trace = trace_tour(tour)\n",
1875 " mistakes = mistake_positions(trace)\n",
1876 " if len(mistakes) < old_mistake_count:\n",
1877 " old_mistake_count = len(mistakes)\n",
1878 " mistake_reduction_tries = 0\n",
1879 " else:\n",
1880 " mistake_reduction_tries += 1\n",
1881 " if mistake_reduction_tries >= mistake_reduction_attempt_limit:\n",
1882 " return ''\n",
1883 " else:\n",
1884 " return tour"
1885 ]
1886 },
1887 {
1888 "cell_type": "code",
1889 "execution_count": 306,
1890 "metadata": {},
1891 "outputs": [
1892 {
1893 "data": {
1894 "text/plain": [
1895 "'RFFRRFFFRFLRFRFLLRFLLRLRRLFRLRRFFLLRLLRRFRFLRLFFLFLRRLRRLRLFLLRRFFLRLLFFFFFRRFFLFRLFFRLLRRFLFFFLRFLRRLRFLFLFFRLLFFRRFFLRLFRFFRLFFLRRFLRFLRRLFRRLFFFFRLFLFFLRFFLFRFLRRFFFFFLFRLRRFRLLRLLFRFLFFFRLFRFLFLRLRFFFFFLFFRFFFFLRFLFRFLRLRLFFLRRFFFRLLFRLFLRRFLRLLRLFFRFLRRLFLLRFLFFRFLFRLRFFFFFLRLLFRFLLRRFLRRFLRLRFLRRLFFFRFLRRLF'"
1896 ]
1897 },
1898 "execution_count": 306,
1899 "metadata": {},
1900 "output_type": "execute_result"
1901 }
1902 ],
1903 "source": [
1904 "w_trimmed = trim_all_loops(w)\n",
1905 "w_trimmed"
1906 ]
1907 },
1908 {
1909 "cell_type": "code",
1910 "execution_count": 304,
1911 "metadata": {},
1912 "outputs": [
1913 {
1914 "data": {
1915 "image/png": "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\n",
1916 "text/plain": [
1917 "<matplotlib.figure.Figure at 0x7f40271d91d0>"
1918 ]
1919 },
1920 "metadata": {},
1921 "output_type": "display_data"
1922 }
1923 ],
1924 "source": [
1925 "plot_trace(trace_tour(trim_all_loops(w)))"
1926 ]
1927 },
1928 {
1929 "cell_type": "code",
1930 "execution_count": 309,
1931 "metadata": {
1932 "collapsed": true
1933 },
1934 "outputs": [],
1935 "source": [
1936 "def reverse_tour(tour):\n",
1937 " def swap(tour_step):\n",
1938 " if tour_step == 'R':\n",
1939 " return 'L'\n",
1940 " elif tour_step == 'L':\n",
1941 " return 'R'\n",
1942 " else:\n",
1943 " return tour_step\n",
1944 " \n",
1945 " return ''.join(swap(s) for s in reversed(tour))"
1946 ]
1947 },
1948 {
1949 "cell_type": "code",
1950 "execution_count": 308,
1951 "metadata": {},
1952 "outputs": [
1953 {
1954 "data": {
1955 "image/png": "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\n",
1956 "text/plain": [
1957 "<matplotlib.figure.Figure at 0x7f4027562b38>"
1958 ]
1959 },
1960 "metadata": {},
1961 "output_type": "display_data"
1962 }
1963 ],
1964 "source": [
1965 "plot_trace(trace_tour(w_trimmed))"
1966 ]
1967 },
1968 {
1969 "cell_type": "code",
1970 "execution_count": 310,
1971 "metadata": {},
1972 "outputs": [
1973 {
1974 "data": {
1975 "image/png": "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\nSS/UKxgF+/bt45JLLuGbb74Je0+yfjalfdQr6BCDBg1i3759ISPNJ02alGj1lASihuUQmkonvVHD\ncohevXppdvo0Rg3LIWpra3WKRxqjhqUoDqCG5RDHjh1LtApKAlHDcoiWUelKeqGG5RDav0pvNPLC\nIawJievWrQOgsLCQkSNHhrx37969HDp0CPhuNVsrWfegQYPo109X50421LAcoqysjLVr1/K9733P\nPnfo0CH69OkTdF9FRQVDhgxpsyyN3kg+tCnoENYESGsDOH78eKv7rPSm1n3WCrfGGJYsWRJXnZXY\noYblMnSxmNQg2oyOz/gzNm4Skb+ISEHANVdndFy9enWr9f1OnjzpiCyrxrKWkw7EqrFCTZoMdX8k\nLFq0KOizWUuuhdry8vKCjvfv39++gBiwZcuWVmstHjlyJC6y40G0fawVwEPGGK+IzAVmA7NFZCTf\nZXTsD6wUkWFuCmN/6KGHAJg2bRrgWy/w22+/JS8vL+ay2sq4aK16G6qmClx2uiPMnDkT8H22U6dO\nUVRUZL806urqKCwsxOPxUFdXR9++fTlx4gTGGJYuXcr8+fMdW9otkD/+8Y80NTUxbdo0vF4vy5Yt\n4+233+bWW291XHY8iMqwjDErAw4/Af6bf/9f8Gd0BPaKiJXRcX008mKJ5X3705/+BPgMy2naaubF\n0rB69+5NVVWV/dkiZenSpZ2S1xny8/OB777/ZcuWxU12PIilV3AGYP1n+gHrAq65LqNjZWVlq3Nz\n586loKCg1Sq28F02kMzMTE6cOGFnBWlqarJrndLSUm688cawMjvaf7KaiU8++STgS6Awe/ZswNe8\nfPHFF6mqqsIYE1T2t99+2yE5gVgOFst5cvDgQYwxFBUVcffdd3e63Ej461//yjfffEN9fT0zZsxg\n+PDhjspzkphkdBSRh4EmY8zSgHta4qqMjueeey719fX2sYgwf/78qMutq6uzm2IWVgs41KBxYB+r\nZQ01ceJEAB555BH7XL9+/bjlllu45ZZbeOWVV8LqYTV1O4o1HHD//ffz29/+Nuja+PHjg4YPosH6\n3BYjR47kzTff5M033wTg97//PYcPH46JrFgR14yOInIrcA3w/YDTrs/oWFFREdRZjsWKSyJCY2Nj\nyPMQet11q7YL1ew766yzgsawRIR9+/YB3zVlY91ttWq7luWLSEx/6C0zqnzxxRf2/sSJE1m7dm3M\n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\ngjJMbcJZvAAAAABJRU5ErkJggg==\n",
1976 "text/plain": [
1977 "<matplotlib.figure.Figure at 0x7f40275594e0>"
1978 ]
1979 },
1980 "metadata": {},
1981 "output_type": "display_data"
1982 }
1983 ],
1984 "source": [
1985 "plot_trace(trace_tour(reverse_tour(w_trimmed)))"
1986 ]
1987 },
1988 {
1989 "cell_type": "code",
1990 "execution_count": 575,
1991 "metadata": {},
1992 "outputs": [
1993 {
1994 "data": {
1995 "image/png": "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\nAAAAAElFTkSuQmCC\n",
1996 "text/plain": [
1997 "<matplotlib.figure.Figure at 0x7f4026efc4e0>"
1998 ]
1999 },
2000 "metadata": {},
2001 "output_type": "display_data"
2002 }
2003 ],
2004 "source": [
2005 "w1 = random_walk()\n",
2006 "w2 = random_walk()\n",
2007 "plot_trace(trace_tour(w1))\n",
2008 "w1bounds = bounds(trace_tour(w1))\n",
2009 "plot_trace(trace_tour(w2), colour='r', xybounds=w1bounds)"
2010 ]
2011 },
2012 {
2013 "cell_type": "code",
2014 "execution_count": 562,
2015 "metadata": {},
2016 "outputs": [
2017 {
2018 "name": "stdout",
2019 "output_type": "stream",
2020 "text": [
2021 "w1 = 'FFRFFRRFFFRRFRFRFRLFRRLLFFLRFFLLRFLLRRLFFLLLFLRRFFLLLFLFLRFRRLRRFLLLFFRRFRFRRRRFRRRFLRLLRRRFRFFFLFLRLFFLRFLRLFLRRFFRRFFLFLRFLLFRFLLRRRLLFFRLLRRLFRRFLLLRLRLLLLRRRRRRFFLRRRFLLLLRFRRFRFLRLFRFLFLLLLLFFFLFRLLLRLRFRRFRRRRLRFFRRFRLRFFRLRFLLFLLLRLRFFRLRFFRFLRRLLRRRFFRLRLFLRFLLRLFFRFFLFFFFFLFFLFLLLFLFRFLLFRLFRFRFLFFRRLLFRLRFRFFLRFRFFLRFFLFFLFRLRFRLLRFRRRRFRFRRFRRRRFLFRFLFFLFLFFRFLFFFFLLRRFFLLRFRRFLFRFLLRLRLRRFFLFFLFFRLFLLRFFLRRFLFLRRRRFLFFLFRLFFFRRLFRLFLLFRRLFLFFRRLRLRFFFFFFRFRRRRFLLLFRFRFRFLRFFRFRRRRFFFFRLFRRLLFLLLRRLFLFRLRLLRRFFLRRFRLFLLFRLLRRLLRLFLRRFLLLRFLRFRFFFFRFLLLRRFRFFFFFRFRLRFFLFFLRLLRFRLRFLRLRLRFRFRLLLLFFLFRLRLLRFRRLRLFLLRFLLRRLRRFRLLFRFRLFLLRFRLFLRLLLLLFRFFRLLFFLLFRLFLRFRFLFFRRRFRFRRFRFFRLFFRRLRRRLLLFLFRFRRRFFFRFFFFRRFLRLLLRFFFFFRLRLRLLLLFRRRLFRLFRRLRFFFLFFLRFRFRFFFFFRLFLLRFRRRFFLFLFFFLRRFLLLLFLFFLRRLLLRLRRFFRLRLLRFRLRRLRRRFRFLLRLFFLLFFLLLLRRLRFLLRFRRRRRRRLRFFRFLFLRLLFFRFRRRLRLRLLFLRLFLFRLRLRRRLLLLFFFRFFRFFFFLLFLLLLRRLFFRLLFFFFRRRLFRFLRFLLFRLLRLRFLRRFFRRRRLRLFFFFLLFLFFFLRFFLRLRFRFLL\n",
2022 "w2 = 'FFFLRFFLLFFRFRFLFLRLLLRRRLRRLFFFLFRFLRRFFRLFRRLFRRFRRLLFLLFFFFRFLLFRFFFFLFRFFRFLFRRLFRRLFRRRRLLFRRLFRRRLFFFFFLFLRLFFLRLLRFFLFLRLFLRLLRLLLRLLRFLFFRFRFLRRLLLRFLFFFLFRFFRLFRFLLLRLFFLFFLFRFRFFFFFRLLRLFLLRRFLFFFLRFLFFLLLFFRRRRFLLRFFRFLRRFLLFFFFRFLLRRLRFRLRLRLRLRRLRFLRLFLLRLFLFRLFRFRLLRFFLRLRRLFRLRFFRRFLLLRFFLLFRRLRRRFRLRLRRLFFRLFRRRRRFLFRFLLRLFFRFLFRLFRLRFRFRFLLRLRLFLRLFLLFRFRRFRFLLLFFFRLLLLFFFRFLLLFRLRFRLRRLLFLLLRFLLFRFFRRRRLRFRLFLRLRLLRFLRLRFRLRFRLLRFLFRRLRRLFRFLRLRRFLRRLRFLRRRRLFLFLFLFLRRFFFLLFRFRLLFLFRRLLLRRRLLLRFRFFRFRFFLLFFLFRFLRFRRLLLLLRFRLLRRRFRRRLRLRLFRRRRLRFRFRLLRLRFLLFLLFFLFLFRRLLLLLFFFRFRFRFRRLRFLFLLRRFLLLFFRLRRLLFRRLLRLFLLLFFLRFFLLFRLLRRLFFFRLRFLRLFRRLRRLRRFRFFRLLLFRLLFLLRFFRLFLLFFFRLFRFFLRRLFLFRLLRLRFFLRLFFRFRFRRFFRFFLFFFFFFFRFRFFRLLLRFLFRLRLLLLRFFRLLFFFLLLLRFRFFLFRFFRRFFFRFRRLFLLFFRRLFLFFRFRFRLFFRLRFFLLFFFLLRRFFFFFFLRFLLRRRFFLFFFRFLFFFRLFFRLRRFFRRRRLFFLRFLLFRFFRLFFRRLFRRRFFFRFLFRFFRFFFRFRRRRRLRLLLLFFFRLRLLLFRLRRLFRFRFLFLRRLRFRFFRFRLLRLRFLLLRLRFLFFRLRLLRFLLLFFRRFFFLLLFRRRLFFRL\n"
2023 ]
2024 }
2025 ],
2026 "source": [
2027 "print(\"w1 = '{}\".format(w1))\n",
2028 "print(\"w2 = '{}\".format(w2))"
2029 ]
2030 },
2031 {
2032 "cell_type": "code",
2033 "execution_count": 725,
2034 "metadata": {
2035 "collapsed": true
2036 },
2037 "outputs": [],
2038 "source": [
2039 "def wander_near(locus, current, limit=10):\n",
2040 " valid_proposal = False\n",
2041 " while not valid_proposal:\n",
2042 " s = random.choice('FFFRL')\n",
2043 " if s == 'F':\n",
2044 " proposed = advance(current, current.dir)\n",
2045 " elif s == 'L':\n",
2046 " proposed = advance(current, turn_left(current.dir))\n",
2047 " elif s == 'R':\n",
2048 " proposed = advance(current, turn_right(current.dir))\n",
2049 " if abs(proposed.x - locus.x) < limit and abs(proposed.y - locus.y) < limit:\n",
2050 " valid_proposal = True\n",
2051 "# print('At {} going to {} by step {} to {}'.format(current, locus, s, proposed))\n",
2052 " return s, proposed"
2053 ]
2054 },
2055 {
2056 "cell_type": "code",
2057 "execution_count": 1192,
2058 "metadata": {},
2059 "outputs": [],
2060 "source": [
2061 "def seek(goal, current):\n",
2062 " dx = current.x - goal.x\n",
2063 " dy = current.y - goal.y\n",
2064 "\n",
2065 " if dx < 0 and abs(dx) > abs(dy): # to the left\n",
2066 " side = 'left'\n",
2067 " if current.dir == Direction.RIGHT:\n",
2068 " s = 'F'\n",
2069 " elif current.dir == Direction.UP:\n",
2070 " s = 'R'\n",
2071 " else:\n",
2072 " s = 'L'\n",
2073 " elif dx > 0 and abs(dx) > abs(dy): # to the right\n",
2074 " side = 'right'\n",
2075 " if current.dir == Direction.LEFT:\n",
2076 " s = 'F'\n",
2077 " elif current.dir == Direction.UP:\n",
2078 " s = 'L'\n",
2079 " else:\n",
2080 " s = 'R'\n",
2081 " elif dy > 0 and abs(dx) <= abs(dy): # above\n",
2082 " side = 'above'\n",
2083 " if current.dir == Direction.DOWN:\n",
2084 " s = 'F'\n",
2085 " elif current.dir == Direction.RIGHT:\n",
2086 " s = 'R'\n",
2087 " else:\n",
2088 " s = 'L'\n",
2089 " else: # below\n",
2090 " side = 'below'\n",
2091 " if current.dir == Direction.UP:\n",
2092 " s = 'F'\n",
2093 " elif current.dir == Direction.LEFT:\n",
2094 " s = 'R'\n",
2095 " else:\n",
2096 " s = 'L'\n",
2097 " if s == 'F':\n",
2098 " proposed = advance(current, current.dir)\n",
2099 " elif s == 'L':\n",
2100 " proposed = advance(current, turn_left(current.dir))\n",
2101 " elif s == 'R':\n",
2102 " proposed = advance(current, turn_right(current.dir))\n",
2103 " \n",
2104 "# print('At {} going to {}, currently {}, by step {} to {}'.format(current, goal, side, s, proposed))\n",
2105 "\n",
2106 " return s, proposed"
2107 ]
2108 },
2109 {
2110 "cell_type": "code",
2111 "execution_count": 1145,
2112 "metadata": {
2113 "collapsed": true
2114 },
2115 "outputs": [],
2116 "source": [
2117 "def guided_walk(loci, locus_limit=5, wander_limit=10, seek_step_limit=20):\n",
2118 " trail = ''\n",
2119 " current = Step(0, 0, Direction.RIGHT) \n",
2120 " l = 0\n",
2121 " finished = False\n",
2122 " while not finished:\n",
2123 " if abs(current.x - loci[l].x) < locus_limit and abs(current.y - loci[l].y) < locus_limit:\n",
2124 " l += 1\n",
2125 " if l == len(loci) - 1:\n",
2126 " finished = True\n",
2127 " s, proposed = wander_near(loci[l], current, limit=wander_limit)\n",
2128 " trail += s\n",
2129 " current = proposed\n",
2130 "# print('!! Finished loci')\n",
2131 " seek_steps = 0\n",
2132 " while not (current.x == loci[l].x and current.y == loci[l].y) and seek_steps < seek_step_limit:\n",
2133 "# error = max(abs(current.x - loci[l].x), abs(current.y - loci[l].y))\n",
2134 "# s, proposed = wander_near(loci[l], current, limit=error+1)\n",
2135 " s, proposed = seek(loci[l], current)\n",
2136 " trail += s\n",
2137 " current = proposed\n",
2138 " seek_steps += 1\n",
2139 " if seek_steps >= seek_step_limit:\n",
2140 " return ''\n",
2141 " else:\n",
2142 " return trail"
2143 ]
2144 },
2145 {
2146 "cell_type": "code",
2147 "execution_count": 896,
2148 "metadata": {},
2149 "outputs": [
2150 {
2151 "data": {
2152 "image/png": "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\nVLpP4CKFIBNJl6SFQEV+muMwZFu3buWGG25QGDKRAEKHIVsFPOHufxk9LykEWfRehSETqYDQYcgs\n+ouVHIIMNIFIpBKC3V7MzB4E/g+4xMyOmdmtwF3A9WZ2mFwUorvOt424Y1ARiETCSdrxXkoYsn8o\n8lJJIcjyJb2EISLh6H4CItNEqucO6H4CIuGleiqxiISX6pqAhg2LpJdmEYpUuYreWUgdgyLhDAwM\nJFqvIoVA3FbROAGRcLLZbKL1KloIaJyASPqoY1Bkmkj11QF1DIqEp3ECIlUu1TUBDRsWCS/VhYCG\nDYuEl+pbjseZUzgykXBSPU4gPvmTdlyIyPhSPU4gHiSk5oBI+qhjUKTKqWNQZJq4IOMEzOxGM3vV\nzI6Y2e2T2ZaITE7SuTmJCwEzywD/Si5E2Z8DnzSzSwu9V8OGRdJrMjWBK4Hfufsf3H0A+Am58GRj\naNiwSHpN5qxcDryZ9/w4uYJhjPgS4bXXXktHRwdz584FoL+/n9mzZ9Pd3c1FF13E6dOn6ezsZO3a\ntbS2ttLT08PChQvp7Oxk3rx5dHR00NPTw6pVq2htbaWzs5MlS5bQ0dHBzJkz6e/vp6+vj4svvpiW\nlhY6OjpoaGg4p0+it7eX5cuX09raSnt7O2vWrOHtt99mcHCQ+vp6enp6aGpq4u2336a9vZ1169Zx\n8uRJ+vr6mDt3Lt3d3SxcuJCzZ8/S1dXFmjVraG1tpauri2w2S21tLXPmzKGrq4ve3l5Wrlw5ktdl\ny5bR1tZGNptleHiY3t5eVqxYQWtrKx0dHaxcuZIzZ84wPDxMNpult7eXZcuWcfLkSdra2li3bh2n\nTp1iYGCAgYEB6urqRvLa0dHBunXrRvbbggUL6OzspLGxkfb2drq7u1m9evVIXpuamujo6KC+vp6+\nvr4x+23FihW0tbVhZnR0dDBjxoyRvLS3t7N69WpOnz7N0NAQM2fOpKenh6VLl468Hu+3/v5+5syZ\nQ3d3N4sWLeLMmTPnHON4eXyMjx8/Tl1dHatXr6alpYXOzk6WLl1Ke3s7dXV1DA4OjslrvN/cnWw2\nS09PT9Fj3NDQQHd3N01NTRw9epRMJsPatWs5efIkvb29zJ8/n66uLhYsWEBbW9s5+y3+nra3tzNr\n1ix6enrGHOPly5dz9uzZke9cX18fM2fOZGhoiI6ODlatWsXp06cZHh6mrq6Onp6ec/br2rVrOXXq\nVNFzY926dbS0tBQ8N06cOJHsTHb3RH/Ax4H78p5/CrinwPt8y5YtvmzZMgcc8Lq6upHH8V9DQ8PI\n4wULFox5Pf9v8eLFk3p94cKFI4/r6+vHvD5v3ryRx/Pnzx/z+owZMwpua7J5zWazY17P3xezZ88e\n83r+ssbGxjGv19TUjDxetGjRpPKav/7MmTPHvJ6/r+bOnTvm9fx9Xc5jnP8ZCx2X/O9WofwVOsb5\nx2Kyxzj/cxf67ucftzlz5ox5fSLnxvz58725udmbm5sd8JLO5UkUAlcDT+U9vwO4vVAhMFpzc/OY\nZaEoLaV1odO6UJ+p1EJgMn0CvwH+xMxWmVkd8PfkwpOJyBRSUkDSoiub3QjcQ66D8X53HxOOzMyS\nJyAik+IlBCSdVCEgIlOfbioiUuVUCIhUuYoXAiGHGpvZ/WbWYmb78pY1mtkzZnbYzJ42s3llSGeF\nmT1rZgfNbL+Z3RYwrRlm9isz2xOl1RwtX21mL0RpPWRmZRuJZWYZM3vJzB4PmZaZ/d7MXo4+26+j\nZWXfh9F255nZdjM7ZGYHzOyqQMfrkujzvBT9bzOz2wJ+ri+b2Stmts/MfmxmdRM+XqVcQijXH7lC\n5zVgFZAF9gKXlnH7fwtcBuzLW3Y38LXo8e3AXWVIZwlwWfR4NnAYuDREWtG2GqL/NcALwFXAw8Dm\naPm9wD+VcT9+Gfhv4PHoeZC0gKNA46hlofbhfwK3Ro9rgXmh0spLMwO8BVwc6Hu4LNqHdXnH6ZaJ\nHq+yfeASM301sDvvecGxBZNMY9WoQuBVoCl6vAR4NcDnegxYHzotoAF4kdzIzFYgk7dfnypTGiuA\nnwPX5RUCJwOl9QawcNSysu9DYA7weoHloY/XDcD/BPxcy4A/AI1RwfY4cP1EvxuVbg4UGmq8PHCa\nF7l7C4C7nwAWl3PjZraaXO3jBXIHuexpRdXzPcAJcifo68BZd4/njh4n94Uoh+8BXyU3Ag0zWwic\nCZSWA0+b2W/M7PPRshD7cC1wysweiKrp95lZQ6C08n0CeDB6XPa03P0t4LvAMeCPQBvwEhP8blS6\nECh0zXLKXqM0s9nADuBL7t5JoM/i7sPufjm5X+krgXcVettk0zGzjUCLu+/lnWNljD1u5fqc73X3\nvwY2AF80s/eVcdv5aoErgB+6+xVAF7laaLDvnpllgZuB7dGisqdlZvPJTdpbRe5EnwXcVOCt5027\n0oXAcWBl3vMV5NpMIbWYWROAmS0hV1WatKizZQfwX+6+M2RaMXdvB54nV8WbH03nhvLtx2uAm83s\nKPAQ8AHg+8C8AGnFv4i4+0lyTaorCbMPjwNvuvuL0fNHyBUKIY/XTcBv3f1U9DxEWuuBo+5+2t2H\ngEeB9zLB70alC4FKDDUe/cv1OPCZ6PEtwM7RKyT0I+Cgu98TMi0zWxT3JJtZPbkDfxB4DthczrTc\n/RvuvtLd15I7Ns+6+6dCpGVmDVFNCjObRa79vJ8A+zCqhr9pZpdEiz4IHAiRVp5PkitIYyHSOgZc\nbWYzzcx453NN7HiVsyOkxM6MG8n1pv8OuKPM236QXKnXF+2gW8l1mvwiSvPnwPwypHMNMETu6sYe\ncu2wG4EFAdL6i2j7e4F9wL9Ey9cAvwKOkOsNzpZ5X17LOx2DZU8r2ma8//bH34UQ+zDa7rvJ/Qjt\nBX5G7upAqLTqyXWmzslbFiqtZuBQ9N3YRu6q24SOl4YNi1Q5jRgUqXIqBESqnAoBkSqnQkCkyqkQ\nEKlyKgREqpwKAZEqp0JApMr9P8nYgJi0MFyGAAAAAElFTkSuQmCC\n",
2153 "text/plain": [
2154 "<matplotlib.figure.Figure at 0x7f4027b86898>"
2155 ]
2156 },
2157 "metadata": {},
2158 "output_type": "display_data"
2159 }
2160 ],
2161 "source": [
2162 "def square_tour(a=80):\n",
2163 " \"a is width of square\"\n",
2164 " return ('F' * a + 'L') * 4\n",
2165 "\n",
2166 "plot_trace(trace_tour(square_tour()))"
2167 ]
2168 },
2169 {
2170 "cell_type": "code",
2171 "execution_count": 898,
2172 "metadata": {},
2173 "outputs": [
2174 {
2175 "data": {
2176 "image/png": "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\nybOEYIzJ+/+3mLJIMXCXRQAAAABJRU5ErkJggg==\n",
2177 "text/plain": [
2178 "<matplotlib.figure.Figure at 0x7f4027da7048>"
2179 ]
2180 },
2181 "metadata": {},
2182 "output_type": "display_data"
2183 }
2184 ],
2185 "source": [
2186 "def cross_tour(a=50, b=40):\n",
2187 " \"a is width of cross arm, b is length of cross arm\"\n",
2188 " return ('F' * a + 'L' + 'F' * b + 'R' + 'F' * b + 'L') * 4\n",
2189 "\n",
2190 "plot_trace(trace_tour(cross_tour()))"
2191 ]
2192 },
2193 {
2194 "cell_type": "code",
2195 "execution_count": 1181,
2196 "metadata": {},
2197 "outputs": [
2198 {
2199 "data": {
2200 "image/png": "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\n",
2201 "text/plain": [
2202 "<matplotlib.figure.Figure at 0x7f402c0cc5c0>"
2203 ]
2204 },
2205 "metadata": {},
2206 "output_type": "display_data"
2207 }
2208 ],
2209 "source": [
2210 "def quincunx_tour(a=60, b=30, c=50):\n",
2211 " \"a is length of indent, b is indent/outdent distance, c is outdent outer length\"\n",
2212 " return ('F' * a + 'R' + 'F' * b + 'L' + 'F' * c + 'L' + 'F' * c + 'L' + 'F' * b + 'R') * 4\n",
2213 "plot_trace(trace_tour(quinqux_tour()))"
2214 ]
2215 },
2216 {
2217 "cell_type": "code",
2218 "execution_count": 792,
2219 "metadata": {},
2220 "outputs": [
2221 {
2222 "data": {
2223 "image/png": "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\nWKIAAAAASUVORK5CYII=\n",
2224 "text/plain": [
2225 "<matplotlib.figure.Figure at 0x7f4026e9cc18>"
2226 ]
2227 },
2228 "metadata": {},
2229 "output_type": "display_data"
2230 }
2231 ],
2232 "source": [
2233 "plot_trace(trace_tour(('F' * 10 + 'R' + 'F' * 5 + 'L' + 'F' * 10 + 'L' + 'F' * 10 + 'L' + 'F' * 5 + 'R') * 4))"
2234 ]
2235 },
2236 {
2237 "cell_type": "code",
2238 "execution_count": 1205,
2239 "metadata": {},
2240 "outputs": [
2241 {
2242 "data": {
2243 "image/png": "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\nKEqpEBbSo95XcuDAAe677z6uu+46PvjgA9txlFIhLGTPo6zK1VdfzUsvvcSwYcMAePjhh5k7d67l\nVEqpUFTTFqVXC/fWhogYX+zjs88+Y9CgQZ7r69at8xRPpZTyxsaNG0lOTq72wr1B36J0GzhwYIUB\nntOnT1tOpJSqK0KmUF5q4sSJiAi333677ShKqTAXkoXyyJEjvP/++3To0IG3337bdhylVJgLyULZ\nunVrRo0aRUREBAAdOnRg+vTpllMppYLV5s2b6dOnDxMnTqzR40NmMKcy69atY+zYsZw7dw6Aixcv\nUq9ePb/sSykVusqfFvSTn/yENWvWeG73ZjAnpAvlJfvhwoULREREEBkZWePzpZRS4cM9ABwREUGL\nFi3Iy8ur8POwG/W+EveqxTExMdSrV4/f/OY3lhMppWwzxuBwODyH6Grzqa9h06Istz86dOjAt99+\nG7B9KqWCk4hQUFBAo0aNEJF/6WnWqRblpQ4ePIiIkJqaajuKUirANmzYQGxsrKcoiggOh6NWh+PC\nrlBu3LiRvn370qpVK9auXWs7jlIqwB544AHOnz9P586dmTZtGo0bN671NiN9kCuo/PjHP2b79u2s\nXbuW1NRU3nvvPerXr09qaqoO8CgVxo4cOcL27ds9n7/19ddf+2zbYVco3a6++moAxo4dC8B//dd/\ncc8999iMpJTyozZt2ngujxs3zqfbDruut1vHjh0rzA3fvXu35URKKX978803Mcbwzjvv+HS7YVso\nL7Vo0SJd/FepMLNjx44Ko9nNmzf3y37Ctutd3jfffMOiRYtYu3atLv6rVBhZsWIFAI8++ihxcXGM\nHDnSL/sJu/Mor+See+7hlVde4e6776Zly5b8/ve/tx1JKVUDBw4cYMGCBXz22Wfs2rWr5gvy1rUp\njN7YunUrQ4YM8VzftGkT119/vcVESqmauNzc7Zpsp86ecH45gwcPrjDAc/bsWcuJlFI1NWXKFIwx\nNS6S1VGnCuWlRo8ejYgwefJk21GUUlXIy8urMHDTr1+/gO27TnW9yzt27Bj79u1j+vTpHDlypMbH\nOJRSgbF9+3b69+/PunXrqFevHoMHD8bhqF1bT49Reqlt27Z89913xMfHM3z4cNLT021HUkqVs2nT\nJn79619z+PBhzpw549NGjRZKL61bt44JEyZw5swZoOYfZ6mU8o/yAzcjR47kww8/9Om2tVBWQ2lp\n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\n",
2244 "text/plain": [
2245 "<matplotlib.figure.Figure at 0x7f401d61d860>"
2246 ]
2247 },
2248 "metadata": {},
2249 "output_type": "display_data"
2250 }
2251 ],
2252 "source": [
2253 "heart_points = [Step(60, 50, Direction.UP), Step(50, 90, Direction.UP),\n",
2254 " Step(20, 70, Direction.UP), \n",
2255 " Step(-40, 90, Direction.UP), Step(-60, 80, Direction.UP), \n",
2256 " Step(0, 0, Direction.RIGHT)]\n",
2257 "\n",
2258 "heart_tour = ''\n",
2259 "current = Step(0, 0, Direction.RIGHT)\n",
2260 "\n",
2261 "for hp in heart_points:\n",
2262 " while not (current.x == hp.x and current.y == hp.y):\n",
2263 " s, proposed = seek(hp, current)\n",
2264 " heart_tour += s\n",
2265 " current = proposed\n",
2266 "\n",
2267 "plot_trace(trace_tour(heart_tour))\n",
2268 "\n",
2269 "def heart_tour_func(): return heart_tour"
2270 ]
2271 },
2272 {
2273 "cell_type": "code",
2274 "execution_count": 882,
2275 "metadata": {},
2276 "outputs": [
2277 {
2278 "data": {
2279 "text/plain": [
2280 "'FLLLLFFFLFFLFLFFFFFFLFRLLFFFFFFFFFFFRFFFRRFLLFFRFFFFFFFFLLFFFFRFLFFLLFFFLFFFFLFFRFFFFRRFFFFFFLRFFFFRFFFRFLRFFFRFLFLLFLLFFFFFFFRRFFFFFFRRFFLFRFRFRFRFFFRRLLRFFFFFFRRFFFFFFRFFFFRLFFFRLFFRRFRRFRLFFRFFFRFLRFFLFFFLLFFFFRLFLRLLLRFRRFFRFFRRRLLRRRRFFRLLRLFFFFFRLFLFRFRLLLLLRRRFRFRFFLFFFRFFFLRFFFRLLLLFLFRFLRFFFFLLLFLFLFLFFLFLFLLLRFFFFLFRFFFFLLRFFFRRFFRFFFFFFFFFFRRLFLLLFFFFFFLRFFFRLFFLLFFFFFLFFRLFRFFFRFRFFLRFFFFFFRFFFFLFRLFFLFLFFFLLFFFLRFRRFLRFFFFLFFFFFFFFRRRFFRLFRRFFLFLFFFRRLFFFFLLFFRLFFRLLRRFLLLFFLFFFFFFRFRRFFFLLFFFFFFFFFFLFFRFLLFFRRFFRFRRRRFRRFFFFFFFRLFLRFLFFRLFFRRRFLRFFRFFFFFLFRFRFRFFLRFFRFRFRLFFFRFFFRRFFRFLFLFFFFFFLFFFFLFFFLFRFRFFFFFFFLLFLRFFFFFLFLRFLLRRFFLLFFLFLLLFFFRFFLLFFFLLLRFFFFFFFFFFRFFFFFFLFRRRFLFFLFFFFFFFRFFRFFFFFRRRRFRRFLFFFLFFFFFFRLLFLFLLFFFLLFLRFFFRRRFLFFLRRFFFLFRLLRFFRFFFLRFFFFFFRFFRFFFRLFFLFFFRFFLLFFLLRLFRFRFFFLFRRFRRFFFLLFLFLRRLLFFFFFRFFLFLLRLFLLLFLFLFFLFFFLFRFFFFLFRRLLFFFFFFFFFFFFFFFFFFFRFRFFFLFFRFLRFFLFFFFFFFFFLFLLFLLFFFFFFFFLLFRLRFFFRLFFRFFLRFFFFFRFFRLFLLFLLRFLRRFRRFFLFFRFFFFFFFRFLFFFLLRLFFFLFLFLRFRFFFFFFLLLFFLFRLRFFLFFRLLFFFFFLFFFFFFFRRFFFFFRLFLFFFFFFFFFLFFLRFFFLFFRFRFFLFFFFLFLFLFFLFRFFFFFFRLFRLFLFLFLFFFRRLFRFFRFFFFFFRRFRRFFRFLLFLFFLRFFFFFFFFLFRFRFFRRLLLFLFLFRLFRFRRLLFFFFFFFFFLLFLLFLFLFRRFRFFRFFFFRFFFRRFLLRFLFLRFFFLRLLRLFRFRFFFLFFFFFFRFRFFRFRFRFFFFLLFLFLFFLRFLRRFFLFFFLLRRRRFRLFFLFFFFFRFFLRFLFFFFFFFLFFLLLFFRFRFFFRFFRRFRFFFRFLFLFRFFFRRFFLRFFFFLFRLFFRFLRFFFFRFLFFFLLRLFFRFLFFLFRRRFLFFFLLLFFLLFFRFFLFLLFRFLFFFFFRFLFLFFFRFRFRFRRFFFRLFLFFFLLLRFFRFRFFFFFFLRRFFLFFLFLFFLLFLFLFLFFFFLFFFFFLFRLFLRFLRRRFFLFRRLLFLFFFRFFFRFLFFFFLFLLFRFRRFLFFRLFRRFRFFFFFLRFFRFFRFFFLFFFFFFLFLFFLLRLFFRFFLFFFFRLFFRFFRRFRFFFLLFLFLRFFFRRFFFFFFFFRFRFFFRLRRFFRFFRFFRLFLFFFFFFRFRFRLRFRLRFFFLFRFRFFLFFLFLFFRFLLFFRRFFFFFFFFFFFFRFFRFFFLRLLLFRFFRFFFFRFFFRRLLFLFFFLFFFLRLRFFFFFFRFFFFFLFRFFFFRFLFFLFLFFFLRLRFFLLFFFLRFFFFLRFFFRFFFLRRRFLLRFFFFRLFFFRLFRFFFFFFRFFLFFFLFLFFFLRFFFFRRRFFFFLLFLLFFLFLLFFRRFFFRFFFFFRFLFLFFRFFRFLFLFLLFRFFRLFFFRFFFFRRFLRFFRFFRFRFLFFRFLRRFFLLFFFRLFFFFFFFFFFRFFFFFRFFRLFFLFLRFFFFFRFLFLLFLRRRFFLRFRRRFRLRRFRFFFFFLLFFFLLRRRFLFFLFFLFRLRFFLFFFFRFFRFLFLFRFFFFFFRRFLRLFRFFRFLFLFFRRFRLLFFLFFLFLFRRFFFFLRFFFFFFFFRFRFFFFRFFFFFLFFFFLFFLFFFFFLRFFLRRFRFFFRRFFRLLRFFLRRFRFFFFFFRFFRFFFLRLFLRFFLR'"
2281 ]
2282 },
2283 "execution_count": 882,
2284 "metadata": {},
2285 "output_type": "execute_result"
2286 }
2287 ],
2288 "source": [
2289 "# lc = trace_tour(('F' * 50 + 'L') * 4)\n",
2290 "# lc = trace_tour(('F' * 50 + 'L' + 'F' * 20 + 'R' + 'F' * 20 + 'L') * 4)\n",
2291 "# lc = trace_tour(('F' * 60 + 'R' + 'F' * 30 + 'L' + 'F' * 60 + 'L' + 'F' * 60 + 'L' + 'F' * 30 + 'R') * 4)\n",
2292 "lc = trace_tour(heart_tour)\n",
2293 "rw = guided_walk(lc, wander_limit=8)\n",
2294 "rw"
2295 ]
2296 },
2297 {
2298 "cell_type": "code",
2299 "execution_count": 883,
2300 "metadata": {},
2301 "outputs": [
2302 {
2303 "data": {
2304 "image/png": "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\nRU5ErkJggg==\n",
2305 "text/plain": [
2306 "<matplotlib.figure.Figure at 0x7f402c1a68d0>"
2307 ]
2308 },
2309 "metadata": {},
2310 "output_type": "display_data"
2311 }
2312 ],
2313 "source": [
2314 "plot_trace(trace_tour(rw))"
2315 ]
2316 },
2317 {
2318 "cell_type": "code",
2319 "execution_count": 884,
2320 "metadata": {},
2321 "outputs": [
2322 {
2323 "data": {
2324 "image/png": "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\n22m1wjpt0auvvsrq1at58cUX+ec//xnOQwuDlZSU8M4775Cens4tt9xidDjCYG1LbI2Njd1OOvrW\nW2+xZ88e7rrrLjZv3txtYjNkXdHFixfzm9/8RjrpCtEHuUtrcXFxNDU1ATBkyBC++uorv/ZdvXo1\n06ZN6/26okqpNOBZ4CzAAcwA9gJrgXygDPiJ1tqvuZ4loQnRdz311FMUFRWRlZXFsWPH6N+/P088\n8URQj+HvpegfgH9qra9XSsUCScAC4G2t9e+UUvcA84F5QY1OCBF1br/9dm6//Xa/t9daM336dP72\nt78B/o2T7ra7h1IqBfi+1vo510HsrpLZNcAq12argB/5HakQQgRg1apVOBwOhgwZwo9//ONut/en\nxFYAlCulngPOBbYAvwSytdbHALTWR5VSfo93kPnWhBD+ctfJnTx50u/RMv4ktljgu8AdWustSqnf\n47zk9LuibOHChZ77hYWFnokIhRCiO+46+Q8++MDvLmLdtooqpbKBj7XWBa7fL8aZ2IYBhVrrY0qp\nAcC7WutOk3B5axV96KGHuPfee1m5cqVnhST31CZtORwOLBaLZwUm98Bum81GS0tLp33dzwOdXvOq\nq67yLH0mhIgsSilOnTrlmTre/ViPW0VdieugUmq41novMAHY4brdCjwM3AL8w98gCwsLAZg1a5bX\nhOavQPZNTU3tkwv0ChHpejKkyq9+bEqpc3F297AC+4HpQAzwd2AQcAC4XmvdaeZCbyW2cLvuuut4\n5ZVXpJuJEBEq6CU2AK11KTDGy1OX9yjKMMvIyJBpk4SIUD0psZlyXdFgq6ioCPo02EKI8OjJIPg+\nkdhSU1ODsviJECL8pMTmg3saYiFE5JESWwe/+93vUEpRVFRkdChCiB6SElsHDz30kOene4FeIURk\n6UmJzZBpi8IlIyOD6upquQwVIoJprbFYLJw4cYKsrCzP411194jqEpvNZpPhW0JEOHdJLZAGwKhO\nbDU1NTQ0NBgdhhCiB5qamrjuuutITk4GTLiYi1EGDBjgdSETIYT5lZSU8MorrwBw/vnnB9TJPqoT\nW1lZmUyRJESEcteN96SOPqoT25lnnkl9fb3RYQgheqDt2qOBiurEtn37dhn4LkSE6s1nN6oT23e/\n+11pPBAiQgXSb62jqE5sJSUltLa2UllZ6Zm0UmvtmZCy7c+2tNbExMSQmJgoY0yFCFBVVRVaa5+f\n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\nRinFk08+yeTJkwHn3PnCHNwlZPfsuN50HAXS1bai9wJqPFBKDQFGA58A2VrrY+BMfkDX81+LXrvj\njjs8CU2WaTMPd6nLbrf73MY904pSivnz58vMKyHm99eG6zL0JeAurXWtUsrvMvTChQs99wsLCyks\nLAwgROGNTDFtPlar1edzzzzzDNdeey179+5l6dKlXrvniK4VFxdTXFzs38Za625vOBPgWziTmvux\nXThLbeBsWNjlY18tggvQL7zwgtFh9Hmtra160aJFetKkSRrQx48f73afJUuWaEBv27ZNy2ejd1zv\nn9ec5W+J7S/ATq31H9o89hpwK/AwcAvwDz9fS4ioUFpayv333w84h0T169ev233cdWtSlRBa/nT3\nuAi4GdimlNoKaGABzoT2d6XUDOAAcH0oAxXCbNzrF+gAWjbd9XAvvPBCSGISTt0mNq31h4Cvib0u\nD244wl8y15rxetIhevz48QA89NBDJCcnBzsk4SJtzhHK4XAEtH1VVRWVlZWe1cfdpYzY2Fiys7O7\nrPgW3gVSUnMbO3as9F0LA0lsESqQEpt2Dfnx5dprr+Xll18ORlh9igxhMy+pwYxQgUwl7f4AHj58\n2FurNa+99lpIYox2UvIyLymxRZC2JQRfQ3e86eoDePrppxMfH9+ruPqa1157jWuuucboMEQXJLFF\nmM2bN5OTk8OgQYP83qerS6Z9+/bJMn0B2rJlC+Ac7xnIF4wIH7kUjRDuUtfIkSMDSmpt99VaM2rU\nqHYTVALk5OQEN9goFxcXB8CZZ54pU3qblJTYIkRX0xYFsu+uXbu47rrrGDduHM3NzSQmJjJr1qyg\nxhrtGhoajA5BdENKbBGibamrp/u6u4hMmjSJuXPnsmDBAmw2GwkJCSilWLBgQfACjmLSNcb8JLFF\niN50Leg4rU7bPnB33HEHSin69evHkiVLehdkHyETEJifJLYI4S519SbBuYcAte0Dl5mZSV5eHmef\nfXbvAuxDZNSH+UliizCB9F9zcydF9yVU23nDTp48yalTpzqtoyB8k/5r5ieNBxHCXVLrqrRQW1vL\n3LlzOXbsGJmZmVRVVdGvXz8qKyuBby9Bn332WTZt2oTFYsFisWCz2TzbCN9qamqYO3cu7733ntGh\niG5IYosQ/jQeTJw4kQ8//BAAm81Gc3MzqampnvURsrKyuPLKK9mwYYOnLxbAww8/zPr166VSvBtX\nXnkln3zyCQA/+pHMhG9mktgiRFfdPZqamvj73//O0aNHga6T3/r1670+/vzzz3vq4IR3PZmmSBhD\nEluE6KrENnjwYI4fPw44167siZycHDIyMnoeYB+QlpYmA98jhCS2CNFVie348eP069ePU6dO9fj1\njx8/3qv9+wL3tE/C/CSxRYiOnWzbGjZsGP37926RsOzsbLKysnr1GtEuJyen1++zCA9JbBHCXVLz\nNlf+l19+yYkTJ3r1+sePH6e8vLxXrxHtDh8+3Ov3WYSH9GOLEO4SW2pqartB7O6Ed8UVV/Tq9YcN\nGwY4E2hubm7vgo1SeXl5MmFAhFChrjNQSmmplwiOb775hkOHDrV7TGtNbGws55xzTq+nHyopKeGv\nf/0rf/jDH6QuyYvRo0dTWloq741JuKa499qaI5eiESQ3NzekpanRo0czePDgkL1+pJkyZQqvv/46\nACtWrCAvL49vvvnG4KiEP+RSVLQj3Rm+9frrr3vG0D744IOUlZVJPWSEkMQm2jHTZdYPfvCDTvWJ\nHW933nlnSGMYN24c4Gw42LFjh4zOiBByKSraCXRZv1D65z//yYgRI8jIyMBut2O320lISKC2tpbM\nzExKS0t58skneeKJJ0IWQ11dHVu2bGHOnDlUVlby2GOPhexYIngksYl2zHYpunLlSgoLCwF49dVX\nmTlzJpmZmezZs6fLedEefPBBnnrqKRITE7Hb7bS0tJCSksKpU6fIy8vjyy+/5KGHHuq2xBcXF8f3\nvvc9GfgeYSSxiXbMltjatvROnToVh8NBVVWVZ9zm/fff73W/3/72t50eO378OK2trTgcDmpqapg9\ne3a3iU3Gz0YmSWyiHfd8bzNmzGDcuHHMnDnTFPGA8zI5LS2NKVOmkJCQQH19PSdPnmT69OmkpqZS\nU1NDcnIydXV1AKxbt46JEyd6fd3Zs2f7dQkrk0pGqI4L6Ab75jyEiBQ7d+7UVqtVA9ro/x2gP/jg\nA8/vc+bM8cTV8ZaQkNDuJ6Crqqp8vva8efO6/fsAPX369KD9PSK4XP8/r3lHSmyinTPOOIPm5mb2\n7t3LiBEjKCoqYuDAgZ7WwXDTbVpply1bxrJly4Lyuo2NjQC89NJLxMTE4HA4sFgsOBwOd8dPwFyN\nKcJ/MvJAeOWefdf9vzty5EjYFwdWSvHBBx9w0UUXBf21X3/9daZMmdLtdps2beKyyy4L+vFF78nI\nAxGwtLQ0T2lFKcXJkydJTU3FYrGgtSY+Pj4sDQ2h+lK8+uqrTdVnTwSXdNAVfjnrrLNISkoiISGB\nxMTEsPXnMlsrrYgMkthEt9wVsg6Hw1PK8TXFeCiOLUSgJLEJv7VdKSstLS2sxxQiEL1KbEqpiUqp\n3UqpvUqpe4IVlDC31tZWqqurw3IsKbGJnuhxYlNKWYAngauAM4GblFIjgxWYMDfpuCrMrDcltguA\nfVrrr7XWLcD/ANcEJyxhdlKSEmbWm8SWCxxs8/sh12OiDwh0DOUdd9zRacohq9WKUor58+f73M9u\nt/c2VNEH9aYfm7daXa9f4wsXLvTcLyws9MzWICJXQkJCQNuvWLGC/v37k5WVhc1mo66ujszMTHbs\n2MHSpUtZsmSJ1/3i4uKCEa6IAsXFxRQXF/u3sa+xVt3dgAuBt9r8Pg+4x8t2IRknJowD6KSkJD10\n6FD98ccfex6vra3VU6dO1YMHD9YTJkzQ+fn5+pJLLtEFBQUa0IsXL+70WjfccIPPMZuAfvfdd0P1\nZ4gIRxdjRXtzKfop8B2lVL5SygbcCLzWi9cTEWLx4sXU1dXx1VdftVt5fs2aNRQVFXHgwAG++OIL\nvv76a3bv3s3+/fsBuP322zu9VmJiYpfHkhKb6IkeX4pqrVuVUr8ANuCsq/uz1npX0CITpjV//nzm\nz5+PUopDhw4xa9YskpKS+Pzzz4HAGhZqamq6fF7q2ERP9GqsqNb6LWBEkGIREebhhx/mnnvu4Zln\nnvE8Nnbs2IBeIyMjo8tOuN4WiBaiO3LWiB67++67O9VtfPLJJwG9Rk1NTZclvEBKf0K4SWIThkpL\nSyM5Odnn8zKkSvSEJDZhqOrqampra4FvJ3VsO7mjlNhET0hiE4Y655xzAGfJLCYmxvPTTUpsoifC\nntj87mBnAhJraLSN9Z577qGlpYWWlhaampo6rbRudIktUt9Xswt1rJLYuiCxhkbHWGNjY4mNjcVm\nsxEfHw98W1LLysoKd3jtRPL7amahjlWmBhemkpSUxI4dO9i3bx+nnXYaI0fKhDEicJLYhOmMGjWK\nUaNGGR2GiGBhWaUqpAcQQvRZ2scqVSFPbEIIEW7S3UMIEXUksQkhok5YE5tS6k7X4i/blFJL2zw+\nXym1Tym1Syl1ZThj6opSaq5SyqGUymjz2HJXrCVKqdFGxueK53eu961EKVWklEpt85yp3lczL/6j\nlMpTSr2jlNrpOj9nux7vp5TaoJTao5Rar5QKz/JcflBKWZRSnyulXnP9PkQp9Ykr1jVKKVM0Diql\n0pRSL7rOwx1KqbEhf199TdQW7BtQiHOKo1jX71mun2cAW3G20A4BvsBV92fkDcgD3gK+AjJcj00C\n3nTdHwt8YoI4LwcsrvtLgSWu+6PM9L7i/BL9AsgHrEAJMNLo969NfAOA0a77ycAeYCTwMHC36/F7\ngKVGx9om5jnA88Brrt/XAte77j8N/NzoGF2x/BWY7rofC6SF+n0NZ4nt/7iCtwNord1dzK8B/kdr\nbddalwH7cC4UY7TfA7/u8Ng1wGoArfVmIE0plR3uwNrSWr+ttXYPrvwEZ0IGmIK53ldTL/6jtT6q\ntS5x3a8FduF8L68BVrk2WwX8yJgI21NK5QGTgWfbPHwZUOS6vwq4NtxxdaSUSgG+r7V+DsB1PlYR\n4vc1nIltOHCJq6j8rlLqe67HOy4K8w0GLwqjlLoaOKi13tbhKdPF2sEM4J+u+2aLNWIW/1FKDQFG\n4/yiyNZaHwNn8gP6GxdZO+4vXg2glMoEKtp8yR0CBhoUW1sFQLlS6jnXZfMflVKJhPh9Deo1uFJq\nI9C2BKNwvvH3uo6VrrW+UCk1BngR5x/t96IwYYx1AXCFt928PGZkrL/RWr/u2uY3QIvWek2bbToy\nsm+P2eLxSimVDLwE3KW1rjVjP0yl1A+AY1rrEqVUofthOr/HZog9FvgucIfWeotS6vc410cJaWxB\nTWxaa2/JAACl1CzgZdd2nyqlWl3fMoeAwW02zQMOBzMub3zFqpQ6C2edVKlyDljMAz5XSl2AM9ZB\nbTY3NFY3pdQtOC9LLmvzsCGxdsGQ/3MgXJXtLwF/01r/w/XwMaVUttb6mFJqAHDcuAg9LgKmKKUm\nAwlACvA4zqoRi6vUZpb39xDOq58trt+LcCa2kL6v4bwUfRWYAKCUGg7YtNYncS4Ac4NSyqaUGgp8\nB/hXGONqR2u9XWs9QGtdoLUeivMfc57W+rgr1v8AUEpdCFS6i9NGUUpNBO4Gpmitm9o89Rpwo1ne\nVyJj8Z+/ADu11n9o89hrwK2u+7cA/+i4U7hprRdorQdrrQtwvo/vaK1/CrwLuFfXMUusx4CDrs88\nOHPADkL9voaxZcQK/A3YBmwBLm3z3HycLWa7gCvDFZOfce/H1Srq+v1JV6ylwHdNEN8+4Gvgc9dt\nhVnfV2AiztbGfcA8o+PpENtFQCvO1tqtrvdyIpABvO2KeyPO6hTD420T96V82yo6FNgM7MXZQmo1\nOj5XXOfi/GIrwXnVlhbq91WGVAkhoo6MPBBCRB1JbEKIqCOJTQgRdSSxCSGijiQ2IUTUkcQmhIg6\nktiEEFFHEpsQIur8f/yi651PnLLMAAAAAElFTkSuQmCC\n",
2325 "text/plain": [
2326 "<matplotlib.figure.Figure at 0x7f40271d9320>"
2327 ]
2328 },
2329 "metadata": {},
2330 "output_type": "display_data"
2331 }
2332 ],
2333 "source": [
2334 "rw_trimmed = trim_all_loops(rw)\n",
2335 "plot_trace(trace_tour(rw_trimmed))"
2336 ]
2337 },
2338 {
2339 "cell_type": "code",
2340 "execution_count": 885,
2341 "metadata": {},
2342 "outputs": [
2343 {
2344 "data": {
2345 "text/plain": [
2346 "760"
2347 ]
2348 },
2349 "execution_count": 885,
2350 "metadata": {},
2351 "output_type": "execute_result"
2352 }
2353 ],
2354 "source": [
2355 "len(rw_trimmed)"
2356 ]
2357 },
2358 {
2359 "cell_type": "code",
2360 "execution_count": 1180,
2361 "metadata": {},
2362 "outputs": [
2363 {
2364 "name": "stdout",
2365 "output_type": "stream",
2366 "text": [
2367 "At Step(x=-2, y=0, dir=<Direction.DOWN: 3>) going to Step(x=0, y=0, dir=<Direction.RIGHT: 2>), currently left, by step L to Step(x=-1, y=0, dir=<Direction.RIGHT: 2>)\n",
2368 "At Step(x=-1, y=0, dir=<Direction.RIGHT: 2>) going to Step(x=0, y=0, dir=<Direction.RIGHT: 2>), currently left, by step F to Step(x=0, y=0, dir=<Direction.RIGHT: 2>)\n"
2369 ]
2370 },
2371 {
2372 "data": {
2373 "text/plain": [
2374 "(204,\n",
2375 " 80,\n",
2376 " 'RLLRFRFLFFFLFRFFRFLFFLFFFFFLLFRFFRFFFLFRFLFFFFRFRFFFLFLFFFFFFLFFFFRFLRLLRFLRFFLF')"
2377 ]
2378 },
2379 "execution_count": 1180,
2380 "metadata": {},
2381 "output_type": "execute_result"
2382 },
2383 {
2384 "data": {
2385 "image/png": "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\nRU5ErkJggg==\n",
2386 "text/plain": [
2387 "<matplotlib.figure.Figure at 0x7f4027412588>"
2388 ]
2389 },
2390 "metadata": {},
2391 "output_type": "display_data"
2392 }
2393 ],
2394 "source": [
2395 "lc = trace_tour(square_tour(a=10))\n",
2396 "rw = guided_walk(lc, wander_limit=4, locus_limit=2)\n",
2397 "rw_trimmed = trim_all_loops(rw)\n",
2398 "plot_trace(trace_tour(rw_trimmed))\n",
2399 "len(rw), len(rw_trimmed), rw_trimmed"
2400 ]
2401 },
2402 {
2403 "cell_type": "code",
2404 "execution_count": 1194,
2405 "metadata": {},
2406 "outputs": [],
2407 "source": [
2408 "success_count = 0\n",
2409 "while success_count <= 20:\n",
2410 " lc = trace_tour(square_tour(a=10))\n",
2411 " rw = guided_walk(lc, wander_limit=4, locus_limit=2)\n",
2412 " if rw:\n",
2413 " rw_trimmed = trim_all_loops(rw)\n",
2414 " if len(rw_trimmed) > 10:\n",
2415 " with open('small-squares.txt', 'a') as f:\n",
2416 " f.write(rw_trimmed + '\\n')\n",
2417 " success_count += 1"
2418 ]
2419 },
2420 {
2421 "cell_type": "code",
2422 "execution_count": 1195,
2423 "metadata": {
2424 "collapsed": true
2425 },
2426 "outputs": [],
2427 "source": [
2428 "success_count = 0\n",
2429 "while success_count <= 20:\n",
2430 " lc = trace_tour(square_tour())\n",
2431 " rw = guided_walk(lc)\n",
2432 " if rw:\n",
2433 " rw_trimmed = trim_all_loops(rw)\n",
2434 " if len(rw_trimmed) > 10:\n",
2435 " with open('large-squares.txt', 'a') as f:\n",
2436 " f.write(rw_trimmed + '\\n')\n",
2437 " success_count += 1"
2438 ]
2439 },
2440 {
2441 "cell_type": "code",
2442 "execution_count": 1196,
2443 "metadata": {
2444 "collapsed": true
2445 },
2446 "outputs": [],
2447 "source": [
2448 "success_count = 0\n",
2449 "while success_count <= 20:\n",
2450 " lc = trace_tour(cross_tour())\n",
2451 " rw = guided_walk(lc)\n",
2452 " if rw:\n",
2453 " rw_trimmed = trim_all_loops(rw)\n",
2454 " if len(rw_trimmed) > 10:\n",
2455 " with open('cross.txt', 'a') as f:\n",
2456 " f.write(rw_trimmed + '\\n')\n",
2457 " success_count += 1"
2458 ]
2459 },
2460 {
2461 "cell_type": "code",
2462 "execution_count": 1197,
2463 "metadata": {
2464 "collapsed": true
2465 },
2466 "outputs": [],
2467 "source": [
2468 "success_count = 0\n",
2469 "while success_count <= 20:\n",
2470 " lc = trace_tour(quincunx_tour())\n",
2471 " rw = guided_walk(lc)\n",
2472 " if rw:\n",
2473 " rw_trimmed = trim_all_loops(rw)\n",
2474 " if len(rw_trimmed) > 10:\n",
2475 " with open('quincunx.txt', 'a') as f:\n",
2476 " f.write(rw_trimmed + '\\n')\n",
2477 " success_count += 1"
2478 ]
2479 },
2480 {
2481 "cell_type": "code",
2482 "execution_count": 1203,
2483 "metadata": {},
2484 "outputs": [
2485 {
2486 "data": {
2487 "image/png": "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\n2Th8+DBCCEwmk0tDnKv9ISEhWK1WnwiHlpOTU6fNIqCUgc1mq7PBjtBnTYXJZMJkMrF69WpmzZqF\nTqfj8ssvr/eimK1bt/L+++9z4sQJVq1a5SVpfZe4uDjl8/r161m6dClQvjjom2++YevWrdhsNvR6\nPUajkcsuu4zIyEiPnPuzzz5j9uzZSkBch3VfSqmcT6fTYbVasVgsSvDcoKAgpJSUlJRgt9vR6/Xc\ndNNNHpGpvthstjpnyoSnulL1RQgh63vuRYsWkZqaSklJCUIIpk6dSufOnZXfO3fuTHZ2tluLMvyV\ndevWMWrUKJ566ilKS0spKSlBr9dz7733VnOwCVRatmxJZmYmb7zxBtOmTVNbHL9ACMGECRNYtmwZ\nsoa8CX6jDMrKyhQNXHmK5OTJk8rYcPTo0ZjNZpcOHYHChQsXiIuLIzw8vNqKN7WuZVNz8cUXY7fb\n+emnn/w+PHlDyMrKoqCgACEEdrtdGTo50Ol0lJaWotfradGiBZGRkQghuOOOO/j4449rVAZ+M0xw\n3OiO8deiRYu499576dSpk1O52267rclla0piY2OrPfQvvvgiL7zwgkoSNT2XXnopS5cupV27dmRm\nZqotTpPizlLpqkgpiYyMVFy0a8JvZxPuuecel3Oln376qdqiNTmVjaDNgY8//pgnnniCrKwstUVp\nchxD4Jp8BSpvx44dA8qHCPn5+XUax/1WGWj8gcViwWq1qi1Gk+KIRFzVlz/Qqc9QsGvXruzdu5c1\na9awfv16nn322VrL+/Qw4fPPP2fOnDnV0pppOOMLU1dNzYwZMzh58iSff/652qI0KfW91pdeeqnb\nZX1aGVQe/xuNxmZjLa8vanq2qUFubi5ffvkll19+ebNTBu6uUmwIPn0XOXwC0tLSsFqt2vLfGmhu\nyuC6665jx44dQLlBtTnhqcVXrvBpm0FkZCRpaWmkpKS4HBOnpqZWc1G95ZZbVJBUXfR6fbMKxV5S\nUkL//v3Jzc3lwoULLl3LK29TpkxRW2S36devX61t8eaqRp9+pZw+fZrCwkIyMjIUm8HVV1/Nd999\n51TOEcNg0KBByhsjEFmxYgXjxo3DYDBgs9majV9BVRwKwHHdc3JylDl3x0PjcEAD2Llzp5ri1osT\nJ05w/fXX89FHHyGEQMo/Qrjb7XYlyKk38GlloNfriYqKUlaL9evXj++++46RI0fSv39/DAYDl19+\n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\n",
2488 "text/plain": [
2489 "<matplotlib.figure.Figure at 0x7f40276510b8>"
2490 ]
2491 },
2492 "metadata": {},
2493 "output_type": "display_data"
2494 }
2495 ],
2496 "source": [
2497 "plot_trace(trace_tour(rw_trimmed), filename='test.png')"
2498 ]
2499 },
2500 {
2501 "cell_type": "code",
2502 "execution_count": 1206,
2503 "metadata": {},
2504 "outputs": [],
2505 "source": [
2506 "patterns = [square_tour, cross_tour, quincunx_tour, heart_tour_func]\n",
2507 "tours_filename = 'tours.txt'\n",
2508 "\n",
2509 "try:\n",
2510 " os.remove(tours_filename)\n",
2511 "except OSError:\n",
2512 " pass\n",
2513 "\n",
2514 "success_count = 0\n",
2515 "while success_count < 100:\n",
2516 " lc = trace_tour(random.choice(patterns)())\n",
2517 " rw = guided_walk(lc)\n",
2518 " if rw:\n",
2519 " rw_trimmed = trim_all_loops(rw)\n",
2520 " if len(rw_trimmed) > 10:\n",
2521 " with open(tours_filename, 'a') as f:\n",
2522 " f.write(rw_trimmed + '\\n')\n",
2523 " success_count += 1"
2524 ]
2525 },
2526 {
2527 "cell_type": "code",
2528 "execution_count": 1190,
2529 "metadata": {},
2530 "outputs": [
2531 {
2532 "name": "stdout",
2533 "output_type": "stream",
2534 "text": [
2535 "At Step(x=2, y=3, dir=<Direction.DOWN: 3>) going to Step(x=0, y=0, dir=<Direction.RIGHT: 2>), currently above, by step F to Step(x=2, y=2, dir=<Direction.DOWN: 3>)\n",
2536 "At Step(x=2, y=2, dir=<Direction.DOWN: 3>) going to Step(x=0, y=0, dir=<Direction.RIGHT: 2>), currently above, by step F to Step(x=2, y=1, dir=<Direction.DOWN: 3>)\n",
2537 "At Step(x=2, y=1, dir=<Direction.DOWN: 3>) going to Step(x=0, y=0, dir=<Direction.RIGHT: 2>), currently right, by step R to Step(x=1, y=1, dir=<Direction.LEFT: 4>)\n",
2538 "At Step(x=1, y=1, dir=<Direction.LEFT: 4>) going to Step(x=0, y=0, dir=<Direction.RIGHT: 2>), currently above, by step L to Step(x=1, y=0, dir=<Direction.DOWN: 3>)\n",
2539 "At Step(x=1, y=0, dir=<Direction.DOWN: 3>) going to Step(x=0, y=0, dir=<Direction.RIGHT: 2>), currently right, by step R to Step(x=0, y=0, dir=<Direction.LEFT: 4>)\n",
2540 "Found mistakes: 2052\n"
2541 ]
2542 },
2543 {
2544 "data": {
2545 "text/plain": [
2546 "(5348,\n",
2547 " 1210,\n",
2548 " 'RFLFRLFLFFFRRFFFFFRLFLFRLRLFFFFLFRFFLFFRFFLFFRRLFFLFFFFFLRFFRFRFFFFFLFFFFFFFFFFLRRFFLFRLLRLFFFFFRFLFFFFFFFRRFFFFLRLFFLFRFFFFFFFFFLLFFFFFFFFFFRFFFLRLFFRFFFRFLFFFRFFFFFFFFFLLFRRFFFFLRRFFLFLFFLRLRRLRLFFFLFRRFFFFLFFFRLFFFFRLRRFLFFFFLFFFFFRLFRFFRLFRFFFRLFFLFFRLRFFFFFFLLFFRFFFFFFFLFRLFFRFRLLFFFRFFLFFFLFLFRFFRFFFLFFFFRFFFFFFFFFLFFRFFFFRLFRFFRLFFFFLFRFFFFFFLFRFLFLFFRRLRLLRLFLRRFRFFLFFFLFFFRFLRFLFLFFRRLFLRFFRLFLRRFFRFLFLFRFFLFFFFRFLFFRFFFFRLFFLFFLFRRLLFFFFFRLFFRFFLLFFRLRFFFFFRFFRLFFFFFFFRFRRLFFFLFLFFFRFLFRFRFFLFRFLFLFFRFFRFLFFLFFLLRRFFLFFFRLRFFFFRFFFFRFLFFFLFRFRLFFLRRFFFLLRLFLRFRFFFFRLLFFRLLRFFFFFRFFFFFFFFFFFFLFFFFFFFFFFLFRRLRFLRFFLLFFFFFFRFRFFLFFFLRFLFRFRLLFLFRRFFFFFFFFLFRFFLFFFRFLRLFFFRFFFFFLLRLFFFFFFFFFFRFFFRRLFFFFLLRFLRFFRFFFFRLFLFLRFFRFLFFLRLRFFFFFFFFFFRFRFFFLRRFLLFFFFLFFFRRLFFFFFFFRFFFFFFFLLFRLFRFRFLFLRFFFFFRLFFFFLFFFFLFFLRRFRFFFFLFFRFRLFFFRLFFRFLFFLFRFFLRLFFFFLFFFLFFRFFFRFFFLRFFFLFFRFRFFLLFRRFFFFFFLRLFFFLRRFFRFLLFFFFFFLFFLRFFRLFFFFFFRFRFFFFFFFLFRFLFLFFFFFFFRFLFFFRFFFLFRRFFFFFFFFLLFFRFFLFFRFFLLFFFRLRFFFFFFLFRFRLLFFLRFRFFFFFRFLFFFFLRRLFFFRFFFLFFLFRFRFFRLRFLFRFLLRLFFFRRLFLFFFFRLFFRLFRFLFLFRLFFFRRFFFFFFRLFRFFFLRFFFFFRLFLFFRRLRLLFFRFLFFLFFFRFLFLRLFRFRFLFFLFRFLFRFFRFFFLRFFRLFFFFRFFFLFFLRFRFLFFFFFRLR')"
2549 ]
2550 },
2551 "execution_count": 1190,
2552 "metadata": {},
2553 "output_type": "execute_result"
2554 },
2555 {
2556 "data": {
2557 "image/png": "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\noC4AAAAASUVORK5CYII=\n",
2558 "text/plain": [
2559 "<matplotlib.figure.Figure at 0x7f402c03b908>"
2560 ]
2561 },
2562 "metadata": {},
2563 "output_type": "display_data"
2564 }
2565 ],
2566 "source": [
2567 "lc = trace_tour(cross_tour())\n",
2568 "rw = guided_walk(lc)\n",
2569 "print('Found mistakes:', len(mistake_positions(trace_tour(rw))))\n",
2570 "rw_trimmed = trim_all_loops(rw)\n",
2571 "plot_trace(trace_tour(rw_trimmed))\n",
2572 "len(rw), len(rw_trimmed), rw_trimmed"
2573 ]
2574 },
2575 {
2576 "cell_type": "code",
2577 "execution_count": 1187,
2578 "metadata": {},
2579 "outputs": [
2580 {
2581 "data": {
2582 "image/png": "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\nGAwR8//9Y6WTlqlWbwAAAABJRU5ErkJggg==\n",
2583 "text/plain": [
2584 "<matplotlib.figure.Figure at 0x7f4026f76c18>"
2585 ]
2586 },
2587 "metadata": {},
2588 "output_type": "display_data"
2589 }
2590 ],
2591 "source": [
2592 "plot_trace(trace_tour(rw))"
2593 ]
2594 },
2595 {
2596 "cell_type": "code",
2597 "execution_count": 1037,
2598 "metadata": {},
2599 "outputs": [
2600 {
2601 "data": {
2602 "image/png": "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\nf+gzCYz9KNTkAAAAAElFTkSuQmCC\n",
2603 "text/plain": [
2604 "<matplotlib.figure.Figure at 0x7f402c0e22e8>"
2605 ]
2606 },
2607 "metadata": {},
2608 "output_type": "display_data"
2609 }
2610 ],
2611 "source": [
2612 "plot_trace(trace_tour(trim_all_loops(rw)))"
2613 ]
2614 },
2615 {
2616 "cell_type": "code",
2617 "execution_count": 1013,
2618 "metadata": {},
2619 "outputs": [
2620 {
2621 "name": "stdout",
2622 "output_type": "stream",
2623 "text": [
2624 "[Mistake(i=20, step=Step(x=8, y=0, dir=<Direction.UP: 1>)), Mistake(i=38, step=Step(x=10, y=2, dir=<Direction.UP: 1>)), Mistake(i=42, step=Step(x=8, y=4, dir=<Direction.LEFT: 4>))]\n"
2625 ]
2626 },
2627 {
2628 "data": {
2629 "text/plain": [
2630 "'FFFFFLLRRFRFLFLLRFFRRFLFFFFRRFFRFFLFFRFFFFRRRRRRFLRRFLLFFFLRFRRFFFFFRRFRRFRFFRFLLFLLLFLLFFLFLFFFFFLFFFFRRFFFFRRFFFFRRFFFFFRFRFFFFLFLRFRRRLLRFFRRFFRFRFLRLFFFFRRRFLFFRFRLFRRFRFLFFLLFLRFFFRFRFLRFLLFFFFRLLLLFLFFFLFLFRRFFLR'"
2631 ]
2632 },
2633 "execution_count": 1013,
2634 "metadata": {},
2635 "output_type": "execute_result"
2636 }
2637 ],
2638 "source": [
2639 "w_tour = rw\n",
2640 "w_trace = trace_tour(w_tour)\n",
2641 "mks = mistake_positions(w_trace)\n",
2642 "print(mks[:3])\n",
2643 "trim_loop(w_tour)"
2644 ]
2645 },
2646 {
2647 "cell_type": "code",
2648 "execution_count": 1014,
2649 "metadata": {},
2650 "outputs": [
2651 {
2652 "name": "stdout",
2653 "output_type": "stream",
2654 "text": [
2655 "74\n",
2656 "73\n",
2657 "72\n",
2658 "70\n",
2659 "66\n",
2660 "54\n",
2661 "47\n",
2662 "45\n",
2663 "41\n",
2664 "37\n",
2665 "25\n",
2666 "22\n",
2667 "15\n",
2668 "14\n",
2669 "13\n",
2670 "RFFRRFFFRFFRFLLRFLFFLLLLFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLRRLRRRRFFFFFFRRRLLFFFFFFLRRRLLLRLLLLRFRLRFRRRFRLRLLRFRLFLLRFRFLRRRRLRFLLRLRRLFFFRLRRFFRFLRFLLFLFRLRLRLRRRLFFRLRRFFRRFFLLRLLFLLLFRFRFLRLFFLFRRRRLRRLRRLRFRRLRRRFRRRRLLRFLLRRFFRLRFFLFLFRRLLLRLFFFRFRLRLLFRRFLLRLFFFLLRLLRRLRFRFFFFFRRFFLFRFLRFRFLFLFRLFLFLRFFLFRLRRRLRRRRFFFRFLLRLFRFRRRLRFFFFFLLFRRLFRRFRFRFLRLLFRFFFLLRRFRRRRLFFFLFLLLFFLRRLRFLFLFFRLLFFRRFFLRLLRFLRLLFLFRLLLRFFFFFFFFLFLRLLRLRLRFLLFFFLFLFFLFRRRRRFFRLLFFFRLFFLFRLFFRFFFFRLRRRLLFLRRFLRFFLRRFRRFLRFLRRLFRRLFFFFRLFLFFLRFFFFFRLFLFLRFFFLLLFLLLFFLRRLFLFRRFRRFFRRRFFRFLFLLFLFRFRFLLLRRRLFRRFFRLRFLFLFLRRLFFFLFRLRFRFFRFLRRFFFFFLFRLRRFRLLRLLFFLLLFFLFFFRLFRFRRRRLFLFLLLLRLFRFRLRLLFLFLLLRRRLLLFRRFRLRFFRRRLLLFRLRLLFFLLRFFFFRLLRLRLLLRLFFFRRLRFRFFRRRFFFRFFFFLRFLFRFLRFRRLLLRLLFRRLFFLRRFFFRLLFRLFLRRFLRLLRRFFLLFLLLFFFFRRFFRLFFLLFLLFRFRLRFLRFFRFRLRLLLFFFLFLRFRFRFLRRLLLLLRFRRLFLLLLRRFFFLLRFLFFRLLLLFLFRLRFFFFFLRLLFFLLLFFLLRRFLRRFLRLRRLLLRRRRRLLLFLRRLFFFRFLRRLF\n",
2671 "FFFFFLLRRFRFLFLLRFFFFFRFLFFFFLFFLFRFRFLRLFFFLLFRLRFFFRFRFLRFLLFFFFRLLLLFLFFFLFLFRRFFLR\n",
2672 "Step(x=0, y=0, dir=<Direction.DOWN: 3>)\n"
2673 ]
2674 },
2675 {
2676 "data": {
2677 "image/png": "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\n",
2678 "text/plain": [
2679 "<matplotlib.figure.Figure at 0x7f40276002e8>"
2680 ]
2681 },
2682 "metadata": {},
2683 "output_type": "display_data"
2684 }
2685 ],
2686 "source": [
2687 "w_tour = rw\n",
2688 "w_trace = trace_tour(w_tour)\n",
2689 "mks = mistake_positions(w_trace)\n",
2690 "while len(mks) > 3:\n",
2691 " print(len(mks))\n",
2692 " w_tour = trim_loop(w_tour)\n",
2693 " w_trace = trace_tour(w_tour)\n",
2694 " mks = mistake_positions(w_trace)\n",
2695 "print('{}\\n{}\\n{}'.format(w_tour_start, w_tour, trace_tour(w_tour)[-1]))\n",
2696 "plot_trace(trace_tour(w_tour))"
2697 ]
2698 },
2699 {
2700 "cell_type": "code",
2701 "execution_count": 1015,
2702 "metadata": {},
2703 "outputs": [
2704 {
2705 "data": {
2706 "text/plain": [
2707 "[Mistake(i=70, step=Step(x=-2, y=6, dir=<Direction.UP: 1>)),\n",
2708 " Mistake(i=71, step=Step(x=-3, y=6, dir=<Direction.LEFT: 4>))]"
2709 ]
2710 },
2711 "execution_count": 1015,
2712 "metadata": {},
2713 "output_type": "execute_result"
2714 }
2715 ],
2716 "source": [
2717 "mks"
2718 ]
2719 },
2720 {
2721 "cell_type": "code",
2722 "execution_count": 1016,
2723 "metadata": {},
2724 "outputs": [
2725 {
2726 "data": {
2727 "text/plain": [
2728 "'FFFFFLLRRFRFLFLLRFFFFFRFLFFFFLFFLFRFRFLRLFFFLLFRLRFFFRFRFLRFLLFFFFRFLFFFLFLFRRFFLR'"
2729 ]
2730 },
2731 "execution_count": 1016,
2732 "metadata": {},
2733 "output_type": "execute_result"
2734 }
2735 ],
2736 "source": [
2737 "trim_loop(w_tour)"
2738 ]
2739 },
2740 {
2741 "cell_type": "code",
2742 "execution_count": 1212,
2743 "metadata": {},
2744 "outputs": [
2745 {
2746 "data": {
2747 "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP4AAAEACAYAAACTecuMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl0VOX9+PH3wxLDplASwo4Kyq5Uq6JCm1JAVKy4oKIi\nonDsqR6pHmu1rQdbf+2prYdiRY6CLDmGFBQim4LkKwSIgGxCDCYBQiAsWQghQpbJNs/vj2TGaMnc\nZ5K5mZncz+uce85M8pnnfubOfGZJPs9zldYaIYSztAp2AkKI5ieFL4QDSeEL4UBS+EI4kBS+EA4k\nhS+EA1kWvlJqkVIqXymVWu9ns5VSp5RS++u2CfamKYQIJJN3/CXAHZf4+Ryt9Q1128YA5yWEsJFl\n4WutU4Dzl/iVCnw6Qojm0JTv+M8qpQ4opT5QSl0RsIyEELZrbOHPB/prrUcAecCcwKUkhLBbm8bc\nSGt9tt7VhcC6hmKVUjIZQIgg0Vpf8iu56Tu+ot53eqVU93q/ux9Is9i5I7bZs2cHPQe5n3JfPZsv\nlu/4SqkEIBboqpTKAWYDv1RKjQDcwHHgGatxhBChw7LwtdaPXuLHS2zIRQjRTKRzL4BiY2ODnUKz\ncMr9hJZ7X5XVd4Em70Apbfc+hBD/SymFbuIf94QQLYgUvhAOJIUvhANJ4QvhQI3q3HOCc+fO8be/\n/Y1WrVoxevRoy3i3282KFSsYOXIkV111lWV8eXk5S5cuZfr06URGRlqOnZ2dze7du5kyZYrl2BER\nEdxxxx20aiWv6+LS5K/6DbjpppvYu3evbeN37NiRkpIS28Z//PHH+fDDD20bX4Q+X3/Vl8JvgFKK\n7t27k5qaSnR0tGW81prt27czcuRIIiIiLOPLysr4+uuvuf32243yOXPmDMXFxQwZMsRnXGVlJZdd\ndpk3J+FcUviNoJSib9++nDhxItip+E0pxZVXXkl2dnawUxFBJP/Hd6A2beTPN6JhUvhCOJAUvhAO\nJIUvhANJ4QvhQFL4QjiQFL4QDiSFfwmevoOcnJwgZyKEPRzzz96ysjImTJjA9u3bGTFihM/YcGw4\n+rH27dsHOwURwhxT+K+99hrbt28H4MCBA5bxSik+//xzu9MKOLfbDdS+0AnREMcUfnFxMQAul8vb\ny94SeQr/6NGjQc5EhDLHfcdvyUUP37fqDhgwIMiZiFDmuMIXQkjhC+FIUvhCOJAUvhAOJIUvhANJ\n4QvhQFL4QjiQYwp/8eLFAJw/fz7ImTQPt9tNTU2NcXxRUZGN2YhQ45jCnzx5MgDt2rULcib2i46O\n5tixY7Rp0wallOXWtWtXunbtahSrlOJXv/pVi5jP4GSOadnt1KkTgOXJK1qCTZs2MXnyZI4fP87E\niRMt47t168aCBQsYMGAAw4YN8xmbmZnJ5s2b2bBhA3fddVegUhbNzDGF7yQjRozgyJEjft3m/fff\nN4pLTEzkgQce4IYbbmhMaiJEOOajvgiMoUOHAtC9e/cgZyKaQgpfCAeSwhfCgaTwhXAgKXwhHEgK\nXwgHksIXwoEcU/iy+KQQ3wvrwi8uLmb9+vXeBSZ9Wb58OQCffvqpZeyaNWuIj49n69atRmvrf/HF\nF+Tk5LB27VpKS0utExciyMK2c+/ixYv06tXL73dykxbW5tC5c2dOnTpFhw4dgp2KXy5evAhAeXm5\nI+Y9tFRhW/jFxcWUlZXx29/+lunTp1uunjtixAjcbjcTJ07kl7/8pc/Y1atXs337djp06MBLL73E\n8OHDfcYnJiaSkJDAhAkTmDVrFr169fIZP3fuXBYvXsynn37KQw895DM21KxYsQKAzz77jAceeCDI\n2YhG01rbutXuIvBycnK0P2OPGTPGr3hA9+3b16/4pUuXGsXu27dPA7q8vNx4/FCxc+dODWiXyxXs\nVISFuuf7JesyrL/j++PKK68MdgpeXbp0AcJzpqAn95Z+foKWzjGFL4T4nhS+EA4khS+EA0nhC+FA\nloWvlFqklMpXSqXW+1kXpdQmpVSmUupzpdQV9qYphAgkk3f8JcAdP/rZK8D/aa0HApuBVwOdmBDC\nPpaFr7VOAX68JvW9QFzd5ThgUoDzslRQUABASUmJbfswadcFvMtYZ2dn25aLEIHU2M69blrrfACt\ndZ5SKjqAORlZt24dAI888giDBw/2GfvVV1/x9ddfA/D73//ecuzExETvZZP49957D4B3333Xu5+G\nnDlzhgMHDhiPvWvXLnJzc4mLi+P222+3jAdwuVxGcxIA5s2bx9SpU7niCutva2fPniUhIQGAMWPG\n8PTTT1v2IrjdbrKzs/nqq6949NFHLfdRXV3Ntm3baNu2LaNHj7aMd7vdJCQkMGrUKKNejfLychYt\nWsTMmTMtexHcbjfHjh1jz549TJkyxXLsyMhI7rrrLpRSlrHBprTB+uhKqX7AOq31dXXXi7TWP6n3\n+3Na664N3FbPnj3bez02NpbY2Nim5s3nn3/OhAkTmjxOuFBKGU1GArjhhhssX4Dq69Chg2MmF3Xq\n1Mk738AOTz75JEuWLLFtfF+Sk5NJTk72Xv/LX/6C1vrSr0INtfTpH7bd9gNS611PB2LqLncH0n3c\n1pZ2xNmzZ2tAr1692jI2Pz9fAxrQ+fn5lvE7duzwq2U3Pj5enzhxwii2oqJCv/DCC/rixYtG8fn5\n+ToqKsq43biiosJ7X03s27dPFxcXG8XW1NToZcuWaUDv3LnT6DZaa33mzBmdnp5uHH/gwAF97tw5\n45xSUlJ0VVWVUXxpaanetWuXcS6nT5/WGRkZlnHl5eV+HffmgI+WXdPCvxL4pt71N4E/1F3+A/AP\nH7e15U6dOHFCA9rtdhvFP/nkk7b26tvpqquu8jv3q6++2pZcMjIyQurJHUoAPWzYsGCn4eWr8E3+\nnZcA7ACuVUrlKKWmA/8AximlMoGxddebled7lOn3qVatnNWy4LT7GyrC5bhb/nFPa93QX2TGBjgX\nIUQzCY+XJyFEQEnhC+FAUvhCOJAUvhAOJIUvhANJ4V+CrutmNO3Vt9vx48eB2lbcYNu7dy8AJ06c\nCHImoilCapXdBQsW8MwzzwAwZMgQn7GVlZVA7f/xe/To4V0LriF5eXneeKuxPYVvGg9w8803M3/+\nfFuWnG7Tpg1VVVWcPn2a/v37G90mKyvLOPdrrrmGNWvWANbH/dy5c0DtGoa9e/fm8ssv9xnftm1b\n5syZw5gxY4zyDndhs+R4Q509gdrws+MsnLeXX3650V1Wvlx77bV+dcvFxcX5lffVV19t+7EpKyuz\n5diEiqqqKg3owYMHBzsVL8Jpld13333X6AXlgw8+ACAlJcUovm3btgAUFhaavmDRp08f3G63Zazn\nK0FGRoYtx6Sqqsqv+CeeeIKKigqj3LXWZGVl4XK5jGI999E03sN0glG48tzX9PT0IGdiJuQK31Og\nVsaPHw9gPFV16tSpAHTteslJhJeklDJqCe7Tpw8A999/v/HYdouIiPBreqi/y2WbxntOGBJuZwzy\nl+d5e9111wU5EzMhV/hCCPtJ4QvhQFL4QjiQFL4QDiSFL4QDSeEL4UBS+EI4UMgU/rFjxwD48MMP\njeKzsrKMx9Zae/vcv/vuO8v4CxcuAOa9+kVFRQDGq7cWFhbidrvJzMy0jNVae9frD4X++E8++QSA\nHTt2WMZqramoqLA7JdEIRstrN2kHSmmTfRQWFhId3ezL84eVixcv0rFjx6DmsHLlSiZPnuz37ex+\nnoWCLl26cMstt7Bx48ZgpwLUNqDpBpbXDpnCT0tLY/jw4bRr146oqCifsefPn6ekpISxY8fyk5/8\nxGcs1Lb1VlZW0qlTJ7Kzs72ddg05efIkMTExjB492mjxxI8++ojx48eTlJREx44d6dy5c4OxZWVl\n3okuUNsB52sfntZbCI3i0Vozf/58tm3bZhm7bds2tNZ8/PHHRifHCGcul8s7QScUHicIk8IvLy+n\nffv2zJw5kwULFtiaU7BlZ2dz9dVXGz9Bpk6dSnx8fMg8ocSleVqkQ+Vx8lX4IfMd3/NqedNNNwU5\nEyEaT3r1hRAhSwpfCAeSwhfCgaTwhXAgKXwhHEgKXwgHksIPAs8aeqbr0JWWltqZjnCgkCv8/fv3\nU1JSYhRbVFTE6tWrjQsoMzOTlJQUo1itNZs3b/b2yVupqqoiMTHRKPfFixcD8Mc//tEod09/fEFB\ngVEuomGFhYWsXbvWuMnm22+/ZefOncbjFxQUGMdXVFSwatUqysrKjMcPlJDp3AOIjIz0a1JHZGRk\nSJxkojlERETgcrn8WkBT/FBhYSF9+vQJ2+dMVFQUJ0+eJDIy0ijeV+deSJ1Q4/jx48ydO5exY8fS\nq1cvy/hz586xcuVKnnzySctVX7XWpKWlkZmZyYMPPmg5dlVVFZs2bSIqKopbbrnFMt7lcrFixQrG\njRtHz549fcaeOnWK8ePHM2vWLKZPn05ERITP+CFDhlBZWcnZs2fp1q2bZS7i0nJzc3G5XPzud79j\n+vTplis6a61JTU0lKyvLaAXl7777jjfeeIO+ffty9913+4xNS0vj1VdfpX///nzwwQfExMT4jP/r\nX//K8uXLSUpK4p577rHMxUpIveM7hb+9+jExMRQUFIRMD3i4+uabb7juuutC4ji63W5at27NwoUL\nmTFjhmX8F198wdixY6msrDRegj4sevVFw1r6mvRO5JmRaToV3TML1bToLfcfkFGEEGFFCl8IB5LC\nF8KBpPCFcCApfCEcSApfCAeSwg+CvLw8AOPWZJMlwYW1M2fOAASlRTbUhFTnXjhLS0vjT3/6Ezfd\ndBP9+/f3GfvRRx8BsGHDBqOlqj2FX1BQIJ17TbBp0yYAkpKSuPfeewM+fllZGWvWrLGMc7vdvPvu\nu0DtSsRWL0S5ubl8/PHHAcnRQzr3AsTfHvo+ffpw5MgRy1ZjgOuvv55vvvmG6upqo+W+xaXt2bOH\nm2++2a/uN38MGzaMQ4cOBXxcj/79+3P06FHjeOncayZ//vOfqaqqQmttueXk5BgVPUBqaipaa+8Z\ne0TjeCa32FH0LpfLW/Qmj398fDwAY8eOtYytqalhx44dHD58OGD5SuEH0IABA2jTJvDfnq666ioA\nyxONiODxvKiYLq/92GOPAfDcc89ZxrZq1Ypbb701oJ/2pPCFcCApfCEcSApfCAeSwhfCgaTwhXCg\nJv0JWil1HPgOcANVWuubA5GUEMJeTf3fkxuI1VqfD0QyQojm0dSP+ioAY4S94uJiALZu3WrL+KdP\nnwagurralvGdYvfu3QCcPHkyyJkEX1Pf8TXwuVJKAwu01gsDkFPYyc3NBWDVqlVs377dZ2x2djY1\nNTXcd999fPPNN5Zj12/RvHDhgnftNeG/wsJCoPaY9unTx5Z9tG/f3q94z8lVmltTC/82rXWeUioa\nSFJKpWut/+eMFa+//rr3cmxsLLGxsU3cbWgZPHgwL774InPmzOHChQtGtzly5IhffdeAFH0TjRs3\njldeecWW55/n05hpW3VWVhYAhw4dMlru3URycjLJyclGsQGbpKOUmg1c1FrP+dHPHTFJxx+VlZWW\na+nX99hjj5GQkBASy0KHMzuX166urvbOATAZ37PE+lNPPcWiRYsCng/YNElHKdVeKdWx7nIHYDyQ\n1tjxnMSfogdkRl4Y8MzRMO3V98y/+PWvf21bTr405aN+DPBJ3ff7NsAyrfWmwKQlhLBTowtfa50N\njAhgLkKIZiKfIYVwICl8IRxICl8IB5LCF8KBpPCFcKCQK/yCggLjWK21X/F2sysXz8KMnjkBonFW\nrVoFwK5du4KcSfCFVOE//PDDxMTEoJQy2vr16+dX/AsvvGBb7pMnT/Yrl1GjRuF2u43G9rR0+tsH\nLn7ommuuAexrfe7SpQs9e/b06zY1NTW25GIlpNbVV0oRERHBwIEDGT58uGV8t27dmDt3LhMnTuTy\nyy/3GbtmzRpKS0vJy8sjJibGKB9/KKVo27YtgwcPZtiwYT5jDx06xMGDB1m9erXRiR2mTp1KfHy8\ntOw2UWpqKtdff70tx9HlctGuXTvArGV3165d3HrrrUFr2Q25M+nMmzePmTNnGsf/+9//NoobOHAg\nhw8fJjo6urGpWVq4cCHTpk2zjNu4cSN33nknI0eOtC0X8b/8PemJPzzLa5vyvDn069fPjnQshdRH\nfTuNGjUKCI2+94EDBwLY8slDBJdpr37Hjh2B2rMkBUPwq0AI0eyk8IVwICl8IRxICl8IB5LCF8KB\npPCFcKCQK/zy8vJgp9BoduVeUlJiy7hOU1lZCZg12LR0IVP4Bw4cAGDx4sWWsSUlJbz44ot8++23\nJCYmWra+pqens2fPHgBmzZplOf6KFStYuHAhM2fOJCEhwTL+P//5DwBvvfUWFy9e9BlbWVnJZ599\nBmCUO8Dq1asB++YChIr9+/ezd+9e28ZfsmQJgPf4+5Kbm8u6deuM26r37dtnnIfWmvXr1wPw5Zdf\nUlpa6jPe5XLx8ccfU1ZWZrwPoyTs3Gp3Ya28vFy3atVKU7tWv2w/2iIiIrTb7TY6lqFk8eLFft/X\nt956y5Zc9u7dG/THsalbWVmZ8f0FtG6gLkOmV3/fvn387Gc/Y/DgwcybN89nbH5+Pm+++SYHDx7k\n4Ycf5o477vAubXwpe/fuZdmyZRQWFtK7d28ef/xxn+Nv3bqVnTt30rp1a2677TbLfvrVq1eTkpJC\n9+7dmTt3rs+24IsXL/LKK6+QkZHBPffcw5tvvmm56u6AAQOA2vvdrVs3n7GhxtMmu3v3bsvJMRs3\nbuS5555j0KBBpKen25LP2bNnjc598O2333Lo0CEmTZrk87nlsW7dOu8kMKvzJWitmT17NgkJCURF\nRTF//ny6du3aYPyFCxd48cUXyc7OZu3atdxzzz2W+YDvXv2Qecd3u90a0G+88YZRfE5OjjYdW2ut\nn3rqKb/iAd23b1+jWE/u//znP43i169frwHtcrmM4rt16+ZX7qFk5MiRfh/3QYMG2ZiRfQDdqVMn\no9iamhoN6GeffdYo/r333tOArqqq8isf3UBdhsx3fM87Qzj2r3tyN3037tSpEwCXXXaZUXyHDh0a\nl1gI6Nu3b7BTaFae9fKteOaMWM0q9fDEedbvb6qQKXwhRPORwhfCgaTwhXAgKXwhHEgKXwgHksIX\nwoHCtvDz8vIAjJoxoHaBS3/l5OT4fRsTntZbq/ZeD6ctq52RkRHsFGznmTeQn59vFO+JC1Tbbsgt\ntmnK02/905/+lJdeesly6emDBw8CtS8Y3bt39xlbVVXlvRwXF2eZyzvvvANASkqKZWxBQYF3gdD+\n/ftz5513+uzcO3HiBOfPn/feNtw693Rd1+a4ceMsOyb9Oe5aa9555x2efvppoz6HvLw8NmzYwOjR\no71vGr589dVXFBUVMWbMGKN+i3Xr1gGQnZ3NjBkzGD16tM/4zMxMwPxFbvfu3QBs3ryZiRMnGt3G\np4Y6ewK1Ydi1VVJSojt27Kjffvtto/idO3f63ed83333GY2ttdazZs0Kel92/a1nz57GuYeSLVu2\n2HpcOnbsGPTHpinbhAkTjI7jv/71Lw3okydPGh97fHTuhUzhHzp0SAN62LBhRvG7du3SgN67d69R\nvJ1WrlypAX3jjTdaxrrdbp2YmGice1lZmf76668DkWbQ5Ofn6yNHjljGuVwub0GYOHjwoC4pKTGK\ndbvd+qGHHtKATkpKsozPz8/35lJUVGQZv2PHDg21k6mKi4st4+Pi4rwvXCYefPBBDejNmzcbxWsd\nJoXvSXTBggVGsZ7CDxWAXrp0qVHssWPHQir3UAL29eqnpqb6ddx79uzpVzygIyMj/Yp/4IEHjGIT\nEhL8fs74Kvyw/eOeEKLxpPCFcCApfCEcSApfCAeSwhfCgaTwhXAgKXwhHChsCz8xMRGAL774IsiZ\n+M/TfpmVlRXkTIQvubm5AFRXV1vGepbhdrlcRmOfPXsWMJ8PkpqaCsDJkyeN4q2EzCq7dbHey77W\nFqv/QHTu3JnOnTv7HPf48eMAxMbGei9bxffo0YNt27Z5V7i1Uj/3K6+80mfshQsXKCoqIiYmhnbt\n2lnmArVr/T/00ENGuYSSvLw8pk2bxuHDhy1jf/zYWB1HgCFDhnjnbVjFV1ZWcubMGaD28WrdurXP\neJOCb27btm2znAfgERar7HpWzbVz83RimW633HKLcZfU888/b3v+4ejnP/+5rcdk4MCBfsV36NDB\n9sfJzs2f9u2650xot+yeOXNGg/mkhaysLL+KobKy0ji2urpag/ny2v7u4/3339eA3r9/v1H8o48+\nGraF73nClpaWWsZ6jvvAgQP9OnmIP4+t1tooF62/z92kV7+6ulrX1NToyspKo9xLS0s1oJcvX26U\nyxtvvKEBfejQIaN4rcOkZbdHjx4A3H///UbxJic5aGy81UfApu5j3LhxQO2UYhOepZjDkefridW0\nafj+uCulfvDVyYq/zwWTXOD752KXLl0sY1u3bk2rVq1o27atUe6eHCIjI41yufvuu4HarzaBEL7P\nKCFEo0nhC+FAUvhCOJAUvhAO1KTCV0pNUEplKKUOK6X+EKikhBD2anThK6VaAfOAO4ChwBSl1KBA\nJSaEsE9T3vFvBo5orU9orauA5YDvE8kLIUJCUwq/F1C/cfhU3c+a5LvvvvM0/vi0atUqALZs2dLU\nXf4PzzLPpn3UZ8+epaamJuB5eMTHxwN4l9n2paSkhJKSEuOxCwoKvH3mJkyWpm4sz1rzpktO25m7\n2+2moqLCON5fnvM8LFu2zCi+sLAwsAk01NljtQEPAgvqXX8cePsScX51Gvm7paWlGY9vyu126y5d\nuviVR/fu3XVhYaHR+BkZGRrQNTU1RvGxsbG2toHGxMT4FX/77bcbH8sZM2YYdx263W7dqVMnW3OP\njo72K75urknAeTpV/d38gY/OvaacUOMU0Lfe9d7AmUsFvv76697LsbGxxMbGXnLATz/9lEcffZQB\nAwYwfPhwywQmTZrE0KFDzTM2pJQiPT2d11577QcneWjI0qVLycvLY/369UybNs0yfuXKlQCsXbuW\nSZMmWcbv2rULgEceecSy0ys+Pp4xY8bQu3dvo3fDpUuX8vDDDxudkSgnJ4ctW7bw5ZdfWsZ6rFmz\nBqh9x4qKivIZq5QiIyOD2bNnW06Q0VoTFxdnnPvx48fZvn0706ZNM3r33LZtG1pr/vvf/1rGNkaP\nHj1ITk5m6dKllrHZ2dl8+eWXfPjhhz7jkpOTSU5ONkugoVcEqw1oDRwF+gERwAFg8CXimvLCGDbA\nfHntjRs3akDn5+cbxXtOGuFP/7pdPJ9WTHkmRoVC7k6DHb36Wusa4DlgE3AIWK61Tm/seE5y7bXX\nAhifDis6OhrAr/71UDFq1CggPHNvyZp07jyt9UZgYIByEUI0E+ncE8KBpPCFcCApfCEcSApfCAeS\nwhfCgaTwA6isrMyWcU2aiJqLp43Vn1ZZEXqk8ANg3759ACxZssQytqKignXr1vk1/qlTp4Da3nST\nXDydfnaIi4sD8Ps+iBDTUGdPoDYc0LlXUVGho6KibOu7/sUvfuH32H//+99tua8pKSk6MjJSnzt3\nzih+1qxZumfPnrbkInzDR+deSJ1QI5yVlZVx7tw5y7gLFy6wfPlyZsyYQb9+/YzG9nS97d+/37Lf\nPSkpiaeffpoBAwZw5MgRo/H9kZmZyaBBg4xmUML3uZ89e9YydxFYvk6oIYUfBmJjY9m6datfxRYq\nhX/bbbexc+dO43gROL4KX77jh4E+ffoEO4VGC+fcWzIpfCEcSApfCAeSwhfCgaTwhXAgKXwhHEgK\nXwgHksJvoY4ePWrLuKdPnwbwawlvEXqatPSWCD2etekBFi1aZBn/9ttv89JLL/HEE08YjZ+UlATA\nyy+/zI033ugzds+ePX6tyCuaUUO9vIHacECvvt1+85vf6KioKON1+J9//nm/e/u3bNliNHZubq6+\n7LLL/Bp7ypQpTbj3orGQXv3wZme/e1paGsOHDyc+Pp7HHnssoGOXl5dz9OhRo3MkiMCTlt0w9/jj\njwPYMsll2LBhAR/To127dlL0IUoKXwgHksIXwoGk8IVwICl8IRxICl8IB5LCF8KBpPCFcCApfIfz\nLBCanJwc3EREs5Je/TAQEREB1HZi9ezZ0zK+R48e3rX+reKrq6sBaN26dROzFOFEWnbDQF5eHkOH\nDqWoqMgovkuXLpw/f954/BtvvJENGzYQHR3d2BRFCJLltVsArTU1NTW0aWP2Ia26uprWrVt7+/yF\n80jhC+FAMklHCPEDUvhCOJAUvhAOJIUvhANJ4QvhQFL4AeSU7jen3E9oufdVCj+AWuqT5Meccj+h\n5d5XKXwhHEgKXwgHapbOPVt3IIRoUNBadoUQoUc+6gvhQFL4QjhQsxS+Umq2UuqUUmp/3TahOfbb\nXJRSE5RSGUqpw0qpPwQ7HzsppY4rpQ4qpb5WSu0Odj6BpJRapJTKV0ql1vtZF6XUJqVUplLqc6XU\nFcHMMVCa8x1/jtb6hrptYzPu11ZKqVbAPOAOYCgwRSk1KLhZ2coNxGqtf6q1vjnYyQTYEmofx/pe\nAf5Paz0Q2Ay82uxZ2aA5C7+lrghxM3BEa31Ca10FLAfuDXJOdlK00K+IWusU4MdLF90LxNVdjgMm\nNWtSNmnOB/BZpdQBpdQHLeXjUp1ewMl610/V/ayl0sDnSqk9SqmZwU6mGXTTWucDaK3zgBaxPlnA\nFttUSiUBMfV/RO2T5E/AfOCvWmutlPp/wBzg6UDtO8gu9UmmJf+P9DatdZ5SKhpIUkql171TijAS\nsMLXWo8zDF0IrAvUfkPAKaBvveu9gTNBysV2de96aK3PKqU+ofarTksu/HylVIzWOl8p1R0oCHZC\ngdBcf9XvXu/q/UBac+y3mewBBiil+imlIoBHgLVBzskWSqn2SqmOdZc7AONpWY8l1H6Cq/8pbi3w\nZN3lacCa5k7IDs21rv4/lVIjqP2L8HHgmWbar+201jVKqeeATdS+kC7SWqcHOS27xACf1LVhtwGW\naa03BTnaV/N1AAAAUElEQVSngFFKJQCxQFelVA4wG/gH8LFS6ikgB5gcvAwDR1p2hXCgFvlvGSGE\nb1L4QjiQFL4QDiSFL4QDSeEL4UBS+EI4kBS+EA4khS+EA/1/AE8S/caDV7QAAAAASUVORK5CYII=\n",
2748 "text/plain": [
2749 "<matplotlib.figure.Figure at 0x7f4027ba30b8>"
2750 ]
2751 },
2752 "metadata": {},
2753 "output_type": "display_data"
2754 }
2755 ],
2756 "source": [
2757 "lc = trace_tour(square_tour(a=10))\n",
2758 "rw = guided_walk(lc, wander_limit=4, locus_limit=2)\n",
2759 "plot_trace(trace_tour(rw))"
2760 ]
2761 },
2762 {
2763 "cell_type": "code",
2764 "execution_count": 1247,
2765 "metadata": {},
2766 "outputs": [
2767 {
2768 "data": {
2769 "text/plain": [
2770 "(254,\n",
2771 " 20,\n",
2772 " 'RLLFLRRFLLFFFFLFLFRL',\n",
2773 " [Step(x=-1, y=0, dir=<Direction.DOWN: 3>),\n",
2774 " Step(x=0, y=0, dir=<Direction.RIGHT: 2>)])"
2775 ]
2776 },
2777 "execution_count": 1247,
2778 "metadata": {},
2779 "output_type": "execute_result"
2780 },
2781 {
2782 "data": {
2783 "image/png": "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\npss0Ar0AAAAASUVORK5CYII=\n",
2784 "text/plain": [
2785 "<matplotlib.figure.Figure at 0x7f402c1a5cf8>"
2786 ]
2787 },
2788 "metadata": {},
2789 "output_type": "display_data"
2790 }
2791 ],
2792 "source": [
2793 "rw_trimmed = trim_all_loops(rw)\n",
2794 "plot_trace(trace_tour(rw_trimmed))\n",
2795 "len(rw), len(rw_trimmed), rw_trimmed, trace_tour(rw_trimmed)[-2:]"
2796 ]
2797 },
2798 {
2799 "cell_type": "code",
2800 "execution_count": 1281,
2801 "metadata": {},
2802 "outputs": [
2803 {
2804 "data": {
2805 "text/plain": [
2806 "(1, Step(x=0, y=0, dir=<Direction.RIGHT: 2>))"
2807 ]
2808 },
2809 "execution_count": 1281,
2810 "metadata": {},
2811 "output_type": "execute_result"
2812 },
2813 {
2814 "data": {
2815 "image/png": "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\nL6Qd6rXaC/YAAAAASUVORK5CYII=\n",
2816 "text/plain": [
2817 "<matplotlib.figure.Figure at 0x7f40275e2908>"
2818 ]
2819 },
2820 "metadata": {},
2821 "output_type": "display_data"
2822 }
2823 ],
2824 "source": [
2825 "rw_trimmed = rw\n",
2826 "mks = len(mistake_positions(trace_tour(rw_trimmed)))\n",
2827 "while mks >= 4:\n",
2828 " rw_trimmed = trim_loop(rw_trimmed, random_mistake=True)\n",
2829 " mks = len(mistake_positions(trace_tour(rw_trimmed)))\n",
2830 " \n",
2831 "# rw_trimmed = trim_all_loops(rw)\n",
2832 "plot_trace(trace_tour(rw_trimmed))\n",
2833 "mks, trace_tour(rw_trimmed)[-1]"
2834 ]
2835 },
2836 {
2837 "cell_type": "code",
2838 "execution_count": 1282,
2839 "metadata": {
2840 "collapsed": true
2841 },
2842 "outputs": [],
2843 "source": [
2844 "def trim_some_mistakes(tour, mistake_limit):\n",
2845 " trimmed_tour = rw\n",
2846 " mistake_count = len(mistake_positions(trace_tour(trimmed_tour)))\n",
2847 " while len(mistake_positions(trace_tour(trimmed_tour))) >= mistake_limit:\n",
2848 " trimmed_tour = trim_loop(trimmed_tour, random_mistake=True)\n",
2849 " return trimmed_tour"
2850 ]
2851 },
2852 {
2853 "cell_type": "code",
2854 "execution_count": 1299,
2855 "metadata": {},
2856 "outputs": [
2857 {
2858 "data": {
2859 "text/plain": [
2860 "(1, Step(x=0, y=0, dir=<Direction.RIGHT: 2>))"
2861 ]
2862 },
2863 "execution_count": 1299,
2864 "metadata": {},
2865 "output_type": "execute_result"
2866 },
2867 {
2868 "data": {
2869 "image/png": "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\n",
2870 "text/plain": [
2871 "<matplotlib.figure.Figure at 0x7f402c0c5f98>"
2872 ]
2873 },
2874 "metadata": {},
2875 "output_type": "display_data"
2876 }
2877 ],
2878 "source": [
2879 "rw_trimmed = trim_some_mistakes(rw, 4)\n",
2880 "\n",
2881 "plot_trace(trace_tour(rw_trimmed))\n",
2882 "len(mistake_positions(trace_tour(rw_trimmed))), trace_tour(rw_trimmed)[-1]"
2883 ]
2884 },
2885 {
2886 "cell_type": "code",
2887 "execution_count": 1300,
2888 "metadata": {
2889 "collapsed": true
2890 },
2891 "outputs": [],
2892 "source": [
2893 "patterns = [square_tour, cross_tour, quincunx_tour, heart_tour_func]\n",
2894 "tours_filename = 'tours-with-mistakes.txt'\n",
2895 "\n",
2896 "try:\n",
2897 " os.remove(tours_filename)\n",
2898 "except OSError:\n",
2899 " pass\n",
2900 "\n",
2901 "success_count = 0\n",
2902 "while success_count < 100:\n",
2903 " lc = trace_tour(random.choice(patterns)())\n",
2904 " rw = guided_walk(lc)\n",
2905 " if rw:\n",
2906 " rw_trimmed = trim_some_mistakes(rw, random.randint(0, 15) + random.randint(1, 3))\n",
2907 " if len(rw_trimmed) > 10:\n",
2908 " with open(tours_filename, 'a') as f:\n",
2909 " f.write(rw_trimmed + '\\n')\n",
2910 " success_count += 1"
2911 ]
2912 },
2913 {
2914 "cell_type": "code",
2915 "execution_count": null,
2916 "metadata": {
2917 "collapsed": true
2918 },
2919 "outputs": [],
2920 "source": []
2921 }
2922 ],
2923 "metadata": {
2924 "kernelspec": {
2925 "display_name": "Python 3",
2926 "language": "python",
2927 "name": "python3"
2928 },
2929 "language_info": {
2930 "codemirror_mode": {
2931 "name": "ipython",
2932 "version": 3
2933 },
2934 "file_extension": ".py",
2935 "mimetype": "text/x-python",
2936 "name": "python",
2937 "nbconvert_exporter": "python",
2938 "pygments_lexer": "ipython3",
2939 "version": "3.5.2+"
2940 }
2941 },
2942 "nbformat": 4,
2943 "nbformat_minor": 2
2944 }