Created sample tours and images of them
[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": 2,
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": 3,
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": 4,
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": 5,
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": 6,
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": 7,
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": 8,
123 "metadata": {},
124 "outputs": [
125 {
126 "data": {
127 "text/plain": [
128 "Step(x=1, y=2, dir=3)"
129 ]
130 },
131 "execution_count": 8,
132 "metadata": {},
133 "output_type": "execute_result"
134 }
135 ],
136 "source": [
137 "k"
138 ]
139 },
140 {
141 "cell_type": "code",
142 "execution_count": 9,
143 "metadata": {},
144 "outputs": [
145 {
146 "data": {
147 "text/plain": [
148 "__main__.Step"
149 ]
150 },
151 "execution_count": 9,
152 "metadata": {},
153 "output_type": "execute_result"
154 }
155 ],
156 "source": [
157 "Step"
158 ]
159 },
160 {
161 "cell_type": "code",
162 "execution_count": 10,
163 "metadata": {},
164 "outputs": [
165 {
166 "data": {
167 "text/plain": [
168 "<Direction.UP: 1>"
169 ]
170 },
171 "execution_count": 10,
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": 11,
184 "metadata": {},
185 "outputs": [
186 {
187 "data": {
188 "text/plain": [
189 "<Direction.RIGHT: 2>"
190 ]
191 },
192 "execution_count": 11,
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": 12,
204 "metadata": {},
205 "outputs": [
206 {
207 "data": {
208 "text/plain": [
209 "{<Direction.RIGHT: 2>: <Direction.DOWN: 3>,\n",
210 " <Direction.UP: 1>: <Direction.RIGHT: 2>,\n",
211 " <Direction.DOWN: 3>: <Direction.LEFT: 4>,\n",
212 " <Direction.LEFT: 4>: <Direction.UP: 1>}"
213 ]
214 },
215 "execution_count": 12,
216 "metadata": {},
217 "output_type": "execute_result"
218 }
219 ],
220 "source": [
221 "turn_rights"
222 ]
223 },
224 {
225 "cell_type": "code",
226 "execution_count": 13,
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": 13,
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": 14,
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": 14,
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": 15,
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": 15,
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": 16,
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": 16,
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": 17,
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": 18,
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": 18,
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": 19,
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": 20,
439 "metadata": {},
440 "outputs": [
441 {
442 "data": {
443 "text/plain": [
444 "True"
445 ]
446 },
447 "execution_count": 20,
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": 21,
459 "metadata": {},
460 "outputs": [
461 {
462 "data": {
463 "text/plain": [
464 "False"
465 ]
466 },
467 "execution_count": 21,
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": 22,
479 "metadata": {},
480 "outputs": [
481 {
482 "data": {
483 "text/plain": [
484 "False"
485 ]
486 },
487 "execution_count": 22,
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": 23,
499 "metadata": {},
500 "outputs": [
501 {
502 "data": {
503 "text/plain": [
504 "False"
505 ]
506 },
507 "execution_count": 23,
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": 24,
519 "metadata": {},
520 "outputs": [
521 {
522 "data": {
523 "text/plain": [
524 "True"
525 ]
526 },
527 "execution_count": 24,
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": 25,
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": 26,
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": 26,
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": 27,
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": 28,
610 "metadata": {},
611 "outputs": [
612 {
613 "data": {
614 "text/plain": [
615 "4"
616 ]
617 },
618 "execution_count": 28,
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": 29,
630 "metadata": {},
631 "outputs": [
632 {
633 "data": {
634 "text/plain": [
635 "9"
636 ]
637 },
638 "execution_count": 29,
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": 30,
650 "metadata": {},
651 "outputs": [
652 {
653 "data": {
654 "text/plain": [
655 "15"
656 ]
657 },
658 "execution_count": 30,
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": 31,
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": 32,
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": 33,
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": 34,
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": 35,
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": 36,
762 "metadata": {},
763 "outputs": [
764 {
765 "data": {
766 "text/plain": [
767 "'FFLRLLFLRL'"
768 ]
769 },
770 "execution_count": 36,
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": 37,
782 "metadata": {
783 "scrolled": true
784 },
785 "outputs": [
786 {
787 "data": {
788 "text/plain": [
789 "True"
790 ]
791 },
792 "execution_count": 37,
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": 38,
804 "metadata": {},
805 "outputs": [
806 {
807 "data": {
808 "text/plain": [
809 "True"
810 ]
811 },
812 "execution_count": 38,
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": 39,
824 "metadata": {},
825 "outputs": [
826 {
827 "data": {
828 "text/plain": [
829 "[Mistake(i=10, step=Step(x=0, y=0, dir=<Direction.DOWN: 3>)),\n",
830 " Mistake(i=13, step=Step(x=0, y=-1, dir=<Direction.DOWN: 3>))]"
831 ]
832 },
833 "execution_count": 39,
834 "metadata": {},
835 "output_type": "execute_result"
836 }
837 ],
838 "source": [
839 "mistake_positions(trace_tour(sample_tours[0] + 'F'))"
840 ]
841 },
842 {
843 "cell_type": "code",
844 "execution_count": 40,
845 "metadata": {},
846 "outputs": [
847 {
848 "data": {
849 "text/plain": [
850 "[Mistake(i=10, step=Step(x=0, y=0, dir=<Direction.DOWN: 3>)),\n",
851 " Mistake(i=13, step=Step(x=1, y=0, dir=<Direction.UP: 1>)),\n",
852 " Mistake(i=14, step=Step(x=0, y=0, dir=<Direction.LEFT: 4>)),\n",
853 " Mistake(i=15, step=Step(x=0, y=-1, dir=<Direction.DOWN: 3>)),\n",
854 " Mistake(i=17, step=Step(x=0, y=-1, dir=<Direction.DOWN: 3>))]"
855 ]
856 },
857 "execution_count": 40,
858 "metadata": {},
859 "output_type": "execute_result"
860 }
861 ],
862 "source": [
863 "mistake_positions(trace_tour(sample_tours[0] + 'FLLLL'))"
864 ]
865 },
866 {
867 "cell_type": "code",
868 "execution_count": 41,
869 "metadata": {},
870 "outputs": [
871 {
872 "data": {
873 "text/plain": [
874 "'FFLRLLFLRL'"
875 ]
876 },
877 "execution_count": 41,
878 "metadata": {},
879 "output_type": "execute_result"
880 }
881 ],
882 "source": [
883 "(sample_tours[0] + 'FLLLL')[:10]"
884 ]
885 },
886 {
887 "cell_type": "code",
888 "execution_count": 42,
889 "metadata": {
890 "collapsed": true
891 },
892 "outputs": [],
893 "source": [
894 "def random_walk(steps=1000):\n",
895 " return ''.join(random.choice('FFLR') for _ in range(steps))"
896 ]
897 },
898 {
899 "cell_type": "code",
900 "execution_count": 43,
901 "metadata": {},
902 "outputs": [
903 {
904 "data": {
905 "text/plain": [
906 "''"
907 ]
908 },
909 "execution_count": 43,
910 "metadata": {},
911 "output_type": "execute_result"
912 }
913 ],
914 "source": [
915 "valid_prefix(random_walk(1000))"
916 ]
917 },
918 {
919 "cell_type": "code",
920 "execution_count": 44,
921 "metadata": {},
922 "outputs": [
923 {
924 "data": {
925 "text/plain": [
926 "''"
927 ]
928 },
929 "execution_count": 44,
930 "metadata": {},
931 "output_type": "execute_result"
932 }
933 ],
934 "source": [
935 "valid_prefix(random_walk(1000))"
936 ]
937 },
938 {
939 "cell_type": "code",
940 "execution_count": 45,
941 "metadata": {
942 "collapsed": true,
943 "scrolled": true
944 },
945 "outputs": [],
946 "source": [
947 "walks = []\n",
948 "while len(walks) < 10:\n",
949 " w = valid_prefix(random_walk())\n",
950 " if len(w) > 30: walks += [w]"
951 ]
952 },
953 {
954 "cell_type": "code",
955 "execution_count": 46,
956 "metadata": {},
957 "outputs": [
958 {
959 "data": {
960 "text/plain": [
961 "['FFFFRFFLRLRRFFFFFFFLRFFFFRFFFRFFFFFLFR',\n",
962 " 'RFLFFFLFFFFLFRFRFLRFLLFRLFFFFFFLFFFFFLFRFL',\n",
963 " 'FFRFLFFRFFFLRFRFFFFFRFFFLFRFRFLF',\n",
964 " 'FFRLFLFFFLRRLLFLRFFFFFLFLRFFLFFL',\n",
965 " 'FFFFFRFFFFRFLFRFRFFFLFFFFRFFRFFF',\n",
966 " 'RRLFFLRRLFLFRRFLFLFRFLLFFFFFFLRFFFFL',\n",
967 " 'LFFFRRLLRFLFLLRFFFRLFFFLFFRFFLFLFFFLRFRLRFLFLL',\n",
968 " 'FRFLFLRFLRFLFLLRFRFFFFLLFRFFLFFF',\n",
969 " 'RFFFRLRFFRFFFFLLFFFRFRFFFFFFRFRFLFFRLF',\n",
970 " 'LLFRFRLFFFFLFLFFFRFFLFFFLLRRFLFLRF']"
971 ]
972 },
973 "execution_count": 46,
974 "metadata": {},
975 "output_type": "execute_result"
976 }
977 ],
978 "source": [
979 "walks"
980 ]
981 },
982 {
983 "cell_type": "code",
984 "execution_count": 47,
985 "metadata": {},
986 "outputs": [
987 {
988 "data": {
989 "text/plain": [
990 "[Step(x=0, y=0, dir=<Direction.RIGHT: 2>),\n",
991 " Step(x=1, y=0, dir=<Direction.RIGHT: 2>),\n",
992 " Step(x=1, y=1, dir=<Direction.UP: 1>),\n",
993 " Step(x=0, y=1, dir=<Direction.LEFT: 4>),\n",
994 " Step(x=0, y=0, dir=<Direction.DOWN: 3>)]"
995 ]
996 },
997 "execution_count": 47,
998 "metadata": {},
999 "output_type": "execute_result"
1000 }
1001 ],
1002 "source": [
1003 "trace_tour('FLLL')"
1004 ]
1005 },
1006 {
1007 "cell_type": "code",
1008 "execution_count": 48,
1009 "metadata": {},
1010 "outputs": [
1011 {
1012 "data": {
1013 "text/plain": [
1014 "(-1, 3)"
1015 ]
1016 },
1017 "execution_count": 48,
1018 "metadata": {},
1019 "output_type": "execute_result"
1020 },
1021 {
1022 "data": {
1023 "image/png": "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\n",
1024 "text/plain": [
1025 "<matplotlib.figure.Figure at 0x7f1034b579e8>"
1026 ]
1027 },
1028 "metadata": {},
1029 "output_type": "display_data"
1030 }
1031 ],
1032 "source": [
1033 "import matplotlib.pyplot as plt\n",
1034 "%matplotlib inline\n",
1035 "plt.axis('on')\n",
1036 "plt.arrow(0, 0, 0.8, 0, head_width=0.1, head_length=0.1, fc='k', ec='k', length_includes_head=True)\n",
1037 "plt.arrow(0.2, 0, 0, 1, head_width=0.1, head_length=0.1, fc='k', ec='k', length_includes_head=True)\n",
1038 "plt.xlim([-1, 2])\n",
1039 "plt.ylim([-1, 3])"
1040 ]
1041 },
1042 {
1043 "cell_type": "code",
1044 "execution_count": 49,
1045 "metadata": {
1046 "collapsed": true
1047 },
1048 "outputs": [],
1049 "source": [
1050 "def bounds(trace):\n",
1051 " return (max(s.x for s in trace),\n",
1052 " max(s.y for s in trace),\n",
1053 " min(s.x for s in trace),\n",
1054 " min(s.y for s in trace))"
1055 ]
1056 },
1057 {
1058 "cell_type": "code",
1059 "execution_count": 50,
1060 "metadata": {},
1061 "outputs": [
1062 {
1063 "data": {
1064 "text/plain": [
1065 "(0, 2, -13, -13)"
1066 ]
1067 },
1068 "execution_count": 50,
1069 "metadata": {},
1070 "output_type": "execute_result"
1071 }
1072 ],
1073 "source": [
1074 "bounds(trace_tour('RFRFFLRFLFFRRFFRRRRLLLRRRRRRFRLFRFFRFFRRFRLRRFLLFRLLFRFLFLFRFRLLFRLFRFLRRLLFRRRFRRRRLLFLFRFRRFFRRLLLRLRRFRLRRFFRRFLFRRLLRRFFRFRRRRRFLLLLLRRFFFLLFFFRRLFLFFLRRRFRFLLFFRRLLRFLLRRF'))"
1075 ]
1076 },
1077 {
1078 "cell_type": "code",
1079 "execution_count": 51,
1080 "metadata": {
1081 "collapsed": true
1082 },
1083 "outputs": [],
1084 "source": [
1085 "plot_wh = {Direction.UP: (0, 1), Direction.LEFT: (-1, 0),\n",
1086 " Direction.DOWN: (0, -1), Direction.RIGHT: (1, 0)}"
1087 ]
1088 },
1089 {
1090 "cell_type": "code",
1091 "execution_count": 52,
1092 "metadata": {
1093 "collapsed": true
1094 },
1095 "outputs": [],
1096 "source": [
1097 "def plot_trace(trace, colour='k', xybounds=None, fig=None, subplot_details=None, filename=None):\n",
1098 " plt.axis('on')\n",
1099 " plt.axes().set_aspect('equal')\n",
1100 " for s, t in chunks(trace, 2):\n",
1101 " w, h = plot_wh[t.dir]\n",
1102 " 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",
1103 " xh, yh, xl, yl = bounds(trace)\n",
1104 " if xybounds is not None: \n",
1105 " bxh, byh, bxl, byl = xybounds\n",
1106 " plt.xlim([min(xl, bxl)-1, max(xh, bxh)+1])\n",
1107 " plt.ylim([min(yl, byl)-1, max(yh, byh)+1])\n",
1108 " else:\n",
1109 " plt.xlim([xl-1, xh+1])\n",
1110 " plt.ylim([yl-1, yh+1])\n",
1111 " if filename:\n",
1112 " plt.savefig(filename)"
1113 ]
1114 },
1115 {
1116 "cell_type": "code",
1117 "execution_count": 53,
1118 "metadata": {
1119 "collapsed": true
1120 },
1121 "outputs": [],
1122 "source": [
1123 "# def plot_trace(trace, colour='k', xybounds=None, fig=None, subplot_details=None):\n",
1124 "# plt.ioff()\n",
1125 "# if fig is None:\n",
1126 "# fig = plt.figure()\n",
1127 "# ax = fig.gca()\n",
1128 "# if subplot_details is not None:\n",
1129 "# ax = fig.add_subplot(*subplot_details)\n",
1130 "# plt.axis('on')\n",
1131 "# # plt.axes().set_aspect('equal')\n",
1132 "# ax.set_aspect('equal')\n",
1133 "# for s, t in chunks(trace, 2):\n",
1134 "# w, h = plot_wh[t.dir]\n",
1135 "# 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",
1136 "# xh, yh, xl, yl = bounds(trace)\n",
1137 "# if xybounds is not None: \n",
1138 "# bxh, byh, bxl, byl = xybounds\n",
1139 "# ax.set_xlim([min(xl, bxl)-1, max(xh, bxh)+1])\n",
1140 "# ax.set_ylim([min(yl, byl)-1, max(yh, byh)+1])\n",
1141 "# else:\n",
1142 "# ax.set_xlim([xl-1, xh+1])\n",
1143 "# ax.set_ylim([yl-1, yh+1])\n",
1144 "# plt.close(fig)\n",
1145 "# return fig"
1146 ]
1147 },
1148 {
1149 "cell_type": "code",
1150 "execution_count": 54,
1151 "metadata": {
1152 "collapsed": true
1153 },
1154 "outputs": [],
1155 "source": [
1156 "def pqr(p, q, r):\n",
1157 " return '{}:{};{}'.format(p, q, r)"
1158 ]
1159 },
1160 {
1161 "cell_type": "code",
1162 "execution_count": 55,
1163 "metadata": {},
1164 "outputs": [
1165 {
1166 "data": {
1167 "text/plain": [
1168 "'1:2;3'"
1169 ]
1170 },
1171 "execution_count": 55,
1172 "metadata": {},
1173 "output_type": "execute_result"
1174 }
1175 ],
1176 "source": [
1177 "pqrt = (1, 2, 3)\n",
1178 "pqr(*pqrt)"
1179 ]
1180 },
1181 {
1182 "cell_type": "code",
1183 "execution_count": 56,
1184 "metadata": {},
1185 "outputs": [
1186 {
1187 "data": {
1188 "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",
1189 "text/plain": [
1190 "<matplotlib.figure.Figure at 0x7f10348a6358>"
1191 ]
1192 },
1193 "metadata": {},
1194 "output_type": "display_data"
1195 }
1196 ],
1197 "source": [
1198 "plot_trace(trace_tour(sample_tours[0] + 'FLLLL'))"
1199 ]
1200 },
1201 {
1202 "cell_type": "code",
1203 "execution_count": 57,
1204 "metadata": {},
1205 "outputs": [
1206 {
1207 "data": {
1208 "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",
1209 "text/plain": [
1210 "<matplotlib.figure.Figure at 0x7f10347d76a0>"
1211 ]
1212 },
1213 "metadata": {},
1214 "output_type": "display_data"
1215 }
1216 ],
1217 "source": [
1218 "plot_trace(trace_tour(sample_tours[0] + 'FLLLL'), colour='g')"
1219 ]
1220 },
1221 {
1222 "cell_type": "code",
1223 "execution_count": 58,
1224 "metadata": {},
1225 "outputs": [
1226 {
1227 "data": {
1228 "image/png": "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\nRU5ErkJggg==\n",
1229 "text/plain": [
1230 "<matplotlib.figure.Figure at 0x7f1034735828>"
1231 ]
1232 },
1233 "metadata": {},
1234 "output_type": "display_data"
1235 }
1236 ],
1237 "source": [
1238 "plot_trace(trace_tour('FFFLLFFL'))"
1239 ]
1240 },
1241 {
1242 "cell_type": "code",
1243 "execution_count": 59,
1244 "metadata": {},
1245 "outputs": [
1246 {
1247 "data": {
1248 "text/plain": [
1249 "[Step(x=0, y=0, dir=<Direction.RIGHT: 2>),\n",
1250 " Step(x=1, y=0, dir=<Direction.RIGHT: 2>),\n",
1251 " Step(x=2, y=0, dir=<Direction.RIGHT: 2>),\n",
1252 " Step(x=2, y=-1, dir=<Direction.DOWN: 3>),\n",
1253 " Step(x=3, y=-1, dir=<Direction.RIGHT: 2>),\n",
1254 " Step(x=4, y=-1, dir=<Direction.RIGHT: 2>),\n",
1255 " Step(x=4, y=0, dir=<Direction.UP: 1>),\n",
1256 " Step(x=4, y=1, dir=<Direction.UP: 1>),\n",
1257 " Step(x=4, y=2, dir=<Direction.UP: 1>),\n",
1258 " Step(x=4, y=3, dir=<Direction.UP: 1>),\n",
1259 " Step(x=3, y=3, dir=<Direction.LEFT: 4>),\n",
1260 " Step(x=3, y=4, dir=<Direction.UP: 1>),\n",
1261 " Step(x=4, y=4, dir=<Direction.RIGHT: 2>),\n",
1262 " Step(x=4, y=5, dir=<Direction.UP: 1>),\n",
1263 " Step(x=3, y=5, dir=<Direction.LEFT: 4>),\n",
1264 " Step(x=2, y=5, dir=<Direction.LEFT: 4>),\n",
1265 " Step(x=2, y=4, dir=<Direction.DOWN: 3>),\n",
1266 " Step(x=1, y=4, dir=<Direction.LEFT: 4>),\n",
1267 " Step(x=0, y=4, dir=<Direction.LEFT: 4>),\n",
1268 " Step(x=-1, y=4, dir=<Direction.LEFT: 4>),\n",
1269 " Step(x=-2, y=4, dir=<Direction.LEFT: 4>),\n",
1270 " Step(x=-3, y=4, dir=<Direction.LEFT: 4>),\n",
1271 " Step(x=-4, y=4, dir=<Direction.LEFT: 4>),\n",
1272 " Step(x=-4, y=3, dir=<Direction.DOWN: 3>),\n",
1273 " Step(x=-4, y=2, dir=<Direction.DOWN: 3>),\n",
1274 " Step(x=-3, y=2, dir=<Direction.RIGHT: 2>),\n",
1275 " Step(x=-3, y=1, dir=<Direction.DOWN: 3>),\n",
1276 " Step(x=-3, y=0, dir=<Direction.DOWN: 3>),\n",
1277 " Step(x=-3, y=-1, dir=<Direction.DOWN: 3>),\n",
1278 " Step(x=-2, y=-1, dir=<Direction.RIGHT: 2>),\n",
1279 " Step(x=-1, y=-1, dir=<Direction.RIGHT: 2>),\n",
1280 " Step(x=0, y=-1, dir=<Direction.RIGHT: 2>),\n",
1281 " Step(x=0, y=0, dir=<Direction.UP: 1>)]"
1282 ]
1283 },
1284 "execution_count": 59,
1285 "metadata": {},
1286 "output_type": "execute_result"
1287 }
1288 ],
1289 "source": [
1290 "trace_tour(walks[3])"
1291 ]
1292 },
1293 {
1294 "cell_type": "code",
1295 "execution_count": 60,
1296 "metadata": {},
1297 "outputs": [
1298 {
1299 "data": {
1300 "image/png": "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\nCZYCTkSC9X9HKanR5sBgvwAAAABJRU5ErkJggg==\n",
1301 "text/plain": [
1302 "<matplotlib.figure.Figure at 0x7f10347d5630>"
1303 ]
1304 },
1305 "metadata": {},
1306 "output_type": "display_data"
1307 }
1308 ],
1309 "source": [
1310 "plot_trace(trace_tour(walks[3]))"
1311 ]
1312 },
1313 {
1314 "cell_type": "code",
1315 "execution_count": 61,
1316 "metadata": {},
1317 "outputs": [
1318 {
1319 "data": {
1320 "text/plain": [
1321 "10"
1322 ]
1323 },
1324 "execution_count": 61,
1325 "metadata": {},
1326 "output_type": "execute_result"
1327 }
1328 ],
1329 "source": [
1330 "long_walks = [w for w in walks if len(w) >= 30]\n",
1331 "len(long_walks)"
1332 ]
1333 },
1334 {
1335 "cell_type": "code",
1336 "execution_count": 62,
1337 "metadata": {},
1338 "outputs": [
1339 {
1340 "data": {
1341 "image/png": "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\n",
1342 "text/plain": [
1343 "<matplotlib.figure.Figure at 0x7f1034735710>"
1344 ]
1345 },
1346 "metadata": {},
1347 "output_type": "display_data"
1348 }
1349 ],
1350 "source": [
1351 "plot_trace(trace_tour(long_walks[0]))"
1352 ]
1353 },
1354 {
1355 "cell_type": "code",
1356 "execution_count": 63,
1357 "metadata": {},
1358 "outputs": [
1359 {
1360 "data": {
1361 "text/plain": [
1362 "['FFFFRFFLRLRRFFFFFFFLRFFFFRFFFRFFFFFLFR',\n",
1363 " 'RFLFFFLFFFFLFRFRFLRFLLFRLFFFFFFLFFFFFLFRFL',\n",
1364 " 'FFRFLFFRFFFLRFRFFFFFRFFFLFRFRFLF',\n",
1365 " 'FFRLFLFFFLRRLLFLRFFFFFLFLRFFLFFL',\n",
1366 " 'FFFFFRFFFFRFLFRFRFFFLFFFFRFFRFFF',\n",
1367 " 'RRLFFLRRLFLFRRFLFLFRFLLFFFFFFLRFFFFL',\n",
1368 " 'LFFFRRLLRFLFLLRFFFRLFFFLFFRFFLFLFFFLRFRLRFLFLL',\n",
1369 " 'FRFLFLRFLRFLFLLRFRFFFFLLFRFFLFFF',\n",
1370 " 'RFFFRLRFFRFFFFLLFFFRFRFFFFFFRFRFLFFRLF',\n",
1371 " 'LLFRFRLFFFFLFLFFFRFFLFFFLLRRFLFLRF']"
1372 ]
1373 },
1374 "execution_count": 63,
1375 "metadata": {},
1376 "output_type": "execute_result"
1377 }
1378 ],
1379 "source": [
1380 "walks"
1381 ]
1382 },
1383 {
1384 "cell_type": "code",
1385 "execution_count": 64,
1386 "metadata": {},
1387 "outputs": [
1388 {
1389 "data": {
1390 "image/png": "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\n8v89qQ80wuYWhQAAAABJRU5ErkJggg==\n",
1391 "text/plain": [
1392 "<matplotlib.figure.Figure at 0x7f10345119b0>"
1393 ]
1394 },
1395 "metadata": {},
1396 "output_type": "display_data"
1397 }
1398 ],
1399 "source": [
1400 "plot_trace(trace_tour('FLFFLRFRLFRRRR'))"
1401 ]
1402 },
1403 {
1404 "cell_type": "code",
1405 "execution_count": 66,
1406 "metadata": {},
1407 "outputs": [
1408 {
1409 "data": {
1410 "text/plain": [
1411 "(383, [])"
1412 ]
1413 },
1414 "execution_count": 66,
1415 "metadata": {},
1416 "output_type": "execute_result"
1417 }
1418 ],
1419 "source": [
1420 "w = random_walk()\n",
1421 "ms = mistake_positions(trace_tour(w))\n",
1422 "len(ms), returns_to_origin(ms)"
1423 ]
1424 },
1425 {
1426 "cell_type": "code",
1427 "execution_count": 67,
1428 "metadata": {},
1429 "outputs": [
1430 {
1431 "data": {
1432 "image/png": "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\n+wAAAABJRU5ErkJggg==\n",
1433 "text/plain": [
1434 "<matplotlib.figure.Figure at 0x7f10345996a0>"
1435 ]
1436 },
1437 "metadata": {},
1438 "output_type": "display_data"
1439 }
1440 ],
1441 "source": [
1442 "plot_trace(trace_tour(w))"
1443 ]
1444 },
1445 {
1446 "cell_type": "code",
1447 "execution_count": 68,
1448 "metadata": {
1449 "collapsed": true
1450 },
1451 "outputs": [],
1452 "source": [
1453 "def trim_loop(tour, random_mistake=False):\n",
1454 " trace = trace_tour(tour)\n",
1455 " mistakes = mistake_positions(trace)\n",
1456 " if random_mistake:\n",
1457 " end_mistake_index = random.randrange(len(mistakes))\n",
1458 " else:\n",
1459 " end_mistake_index = 0\n",
1460 "# 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",
1461 " # while this mistake extends to the next step in the trace...\n",
1462 " while (mistakes[end_mistake_index].i + 1 < len(trace) and \n",
1463 " end_mistake_index + 1 < len(mistakes) and\n",
1464 " mistakes[end_mistake_index].i + 1 == \n",
1465 " mistakes[end_mistake_index + 1].i):\n",
1466 "# 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",
1467 " # push this mistake finish point later\n",
1468 " end_mistake_index += 1\n",
1469 " mistake = mistakes[end_mistake_index]\n",
1470 " \n",
1471 " # find the first location that mentions where this mistake ends (which the point where the loop starts)\n",
1472 " mistake_loop_start = max(i for i, loc in enumerate(trace[:mistake.i])\n",
1473 " if (loc.x, loc.y) == (mistake.step.x, mistake.step.y))\n",
1474 "# print('Dealing with mistake from', mistake_loop_start, 'to', mistake.i, ', trace has len', len(trace))\n",
1475 " \n",
1476 " # direction before entering the loop\n",
1477 " direction_before = trace[mistake_loop_start].dir\n",
1478 " \n",
1479 " # find the new instruction to turn from heading before the loop to heading after the loop\n",
1480 " new_instruction = 'F'\n",
1481 " if (mistake.i + 1) < len(trace):\n",
1482 " if turn_left(direction_before) == trace[mistake.i + 1].dir:\n",
1483 " new_instruction = 'L'\n",
1484 " if turn_right(direction_before) == trace[mistake.i + 1].dir:\n",
1485 " new_instruction = 'R'\n",
1486 "# if (mistake.i + 1) < len(trace):\n",
1487 "# print('turning from', direction_before, 'to', trace[mistake.i + 1].dir, 'with', new_instruction )\n",
1488 "# else:\n",
1489 "# print('turning from', direction_before, 'to BEYOND END', 'with', new_instruction )\n",
1490 " return tour[:mistake_loop_start] + new_instruction + tour[mistake.i+1:]\n",
1491 "# return mistake, mistake_loop_start, trace[mistake_loop_start-2:mistake_loop_start+8]"
1492 ]
1493 },
1494 {
1495 "cell_type": "code",
1496 "execution_count": 69,
1497 "metadata": {},
1498 "outputs": [
1499 {
1500 "data": {
1501 "text/plain": [
1502 "'RFFRRFFFRFFRFLLRFLFFLLLLFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLRRLRRRRFFFFFFRRRLLFFFFFFLRRRLLLRLLLLRFRLRFRRRFRLRLLRFRLFLLRFRFLRRRRLRFLLRLRRLFFFRLRRFFRFLRFLLFLFRLRLRLRRRLFFRLRRFFRRFFLLRLLFLLLFRFRFLRLFFLFRRRRLRRLRRLRFRRLRRRFRRRRLLRFLLRRFFRLRFFLFLFRRLLLRLFFFRFRLRLLFRRFLLRLFFFLLRLLRRLRFRFFFFFRRFFLFRFLRFRFLFLFRLFLFLRFFLFRLRRRLRRRRFFFRFLLRLFRFRRRLRFFFFFLLFRRLFRRFRFRFLRLLFRFFFLLRRFRRRRLFFFLFLLLFFLRRLRFLFLFFRLLFFRRFFLRLLRFLRLLFLFRLLLRFFFFFFFFLFLRLLRLRLRFLLFFFLFLFFLFRRRRRFFRLLFFFRLFFLFRLFFRFFFFRLRRRLLFLRRFLRFFLRRFRRFLRFLRRLFRRLFFFFRLFLFFLRFFFFFRLFLFLRFFFLLLFLLLFFLRRLFLFRRFRRFFRRRFFRFLFLLFLFRFRFLLLRRRLFRRFFRLRFLFLFLRRLFFFLFRLRFRFFRFLRRFFFFFLFRLRRFRLLRLLFFLLLFFLFFFRLFRFRRRRLFLFLLLLRLFRFRLRLLFLFLLLRRRLLLFRRFRLRFFRRRLLLFRLRLLFFLLRFFFFRLLRLRLLLRLFFFRRLRFRFFRRRFFFRFFFFLRFLFRFLRFRRLLLRLLFRRLFFLRRFFFRLLFRLFLRRFLRLLRRFFLLFLLLFFFFRRFFRLFFLLFLLFRFRLRFLRFFRFRLRLLLFFFLFLRFRFRFLRRLLLLLRFRRLFLLLLRRFFFLLRFLFFRLLLLFLFRLRFFFFFLRLLFFLLLFFLLRRFLRRFLRLRRLLLRRRRRLLLFLRRLFFFRFLRRLF'"
1503 ]
1504 },
1505 "execution_count": 69,
1506 "metadata": {},
1507 "output_type": "execute_result"
1508 }
1509 ],
1510 "source": [
1511 "w = 'RFFRRFFFRFFRFLLRFLFFLLLLFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLRRLRRRRFFFFFFRRRLLFFFFFFLRRRLLLRLLLLRFRLRFRRRFRLRLLRFRLFLLRFRFLRRRRLRFLLRLRRLFFFRLRRFFRFLRFLLFLFRLRLRLRRRLFFRLRRFFRRFFLLRLLFLLLFRFRFLRLFFLFRRRRLRRLRRLRFRRLRRRFRRRRLLRFLLRRFFRLRFFLFLFRRLLLRLFFFRFRLRLLFRRFLLRLFFFLLRLLRRLRFRFFFFFRRFFLFRFLRFRFLFLFRLFLFLRFFLFRLRRRLRRRRFFFRFLLRLFRFRRRLRFFFFFLLFRRLFRRFRFRFLRLLFRFFFLLRRFRRRRLFFFLFLLLFFLRRLRFLFLFFRLLFFRRFFLRLLRFLRLLFLFRLLLRFFFFFFFFLFLRLLRLRLRFLLFFFLFLFFLFRRRRRFFRLLFFFRLFFLFRLFFRFFFFRLRRRLLFLRRFLRFFLRRFRRFLRFLRRLFRRLFFFFRLFLFFLRFFFFFRLFLFLRFFFLLLFLLLFFLRRLFLFRRFRRFFRRRFFRFLFLLFLFRFRFLLLRRRLFRRFFRLRFLFLFLRRLFFFLFRLRFRFFRFLRRFFFFFLFRLRRFRLLRLLFFLLLFFLFFFRLFRFRRRRLFLFLLLLRLFRFRLRLLFLFLLLRRRLLLFRRFRLRFFRRRLLLFRLRLLFFLLRFFFFRLLRLRLLLRLFFFRRLRFRFFRRRFFFRFFFFLRFLFRFLRFRRLLLRLLFRRLFFLRRFFFRLLFRLFLRRFLRLLRRFFLLFLLLFFFFRRFFRLFFLLFLLFRFRLRFLRFFRFRLRLLLFFFLFLRFRFRFLRRLLLLLRFRRLFLLLLRRFFFLLRFLFFRLLLLFLFRLRFFFFFLRLLFFLLLFFLLRRFLRRFLRLRRLLLRRRRRLLLFLRRLFFFRFLRRLF'\n",
1512 "w"
1513 ]
1514 },
1515 {
1516 "cell_type": "code",
1517 "execution_count": 70,
1518 "metadata": {},
1519 "outputs": [
1520 {
1521 "data": {
1522 "image/png": "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\nrC2Hf85MaAAAAABJRU5ErkJggg==\n",
1523 "text/plain": [
1524 "<matplotlib.figure.Figure at 0x7f1033e45b38>"
1525 ]
1526 },
1527 "metadata": {},
1528 "output_type": "display_data"
1529 }
1530 ],
1531 "source": [
1532 "w_short = w[:100]\n",
1533 "plot_trace(trace_tour(w_short))"
1534 ]
1535 },
1536 {
1537 "cell_type": "code",
1538 "execution_count": 71,
1539 "metadata": {},
1540 "outputs": [
1541 {
1542 "name": "stdout",
1543 "output_type": "stream",
1544 "text": [
1545 "RFFRRFFFRFFRFLLRFLFFLLLLFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLR\n",
1546 "RFFRRFFFRFFRFLLRFLFFFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLR\n"
1547 ]
1548 },
1549 {
1550 "data": {
1551 "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",
1552 "text/plain": [
1553 "<matplotlib.figure.Figure at 0x7f1033e457f0>"
1554 ]
1555 },
1556 "metadata": {},
1557 "output_type": "display_data"
1558 }
1559 ],
1560 "source": [
1561 "trimmed = trim_loop(w_short)\n",
1562 "print('{}\\n{}'.format(w_short, trimmed))\n",
1563 "plot_trace(trace_tour(trimmed))"
1564 ]
1565 },
1566 {
1567 "cell_type": "code",
1568 "execution_count": 72,
1569 "metadata": {},
1570 "outputs": [
1571 {
1572 "name": "stdout",
1573 "output_type": "stream",
1574 "text": [
1575 "RFFRRFFFRFFRFLLRFLFFFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLR\n",
1576 "RFFRRFFFRFFRFLLRFLFFLLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLR\n"
1577 ]
1578 },
1579 {
1580 "data": {
1581 "image/png": "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\n",
1582 "text/plain": [
1583 "<matplotlib.figure.Figure at 0x7f1033c33940>"
1584 ]
1585 },
1586 "metadata": {},
1587 "output_type": "display_data"
1588 }
1589 ],
1590 "source": [
1591 "trimmed2 = trim_loop(trimmed)\n",
1592 "print('{}\\n{}'.format(trimmed, trimmed2))\n",
1593 "plot_trace(trace_tour(trimmed2))"
1594 ]
1595 },
1596 {
1597 "cell_type": "code",
1598 "execution_count": 73,
1599 "metadata": {},
1600 "outputs": [
1601 {
1602 "data": {
1603 "text/plain": [
1604 "[Mistake(i=104, step=Step(x=-4, y=6, dir=<Direction.DOWN: 3>)),\n",
1605 " Mistake(i=105, step=Step(x=-5, y=6, dir=<Direction.LEFT: 4>)),\n",
1606 " Mistake(i=106, step=Step(x=-5, y=7, dir=<Direction.UP: 1>)),\n",
1607 " Mistake(i=107, step=Step(x=-5, y=8, dir=<Direction.UP: 1>)),\n",
1608 " Mistake(i=108, step=Step(x=-5, y=9, dir=<Direction.UP: 1>)),\n",
1609 " Mistake(i=115, step=Step(x=-5, y=12, dir=<Direction.LEFT: 4>)),\n",
1610 " Mistake(i=116, step=Step(x=-5, y=11, dir=<Direction.DOWN: 3>)),\n",
1611 " Mistake(i=127, step=Step(x=2, y=11, dir=<Direction.LEFT: 4>)),\n",
1612 " Mistake(i=130, step=Step(x=3, y=11, dir=<Direction.UP: 1>)),\n",
1613 " Mistake(i=132, step=Step(x=3, y=11, dir=<Direction.UP: 1>))]"
1614 ]
1615 },
1616 "execution_count": 73,
1617 "metadata": {},
1618 "output_type": "execute_result"
1619 }
1620 ],
1621 "source": [
1622 "mistake_positions(trace_tour(w[:130]))[-10:]"
1623 ]
1624 },
1625 {
1626 "cell_type": "code",
1627 "execution_count": 74,
1628 "metadata": {},
1629 "outputs": [
1630 {
1631 "name": "stdout",
1632 "output_type": "stream",
1633 "text": [
1634 "Step(x=40, y=36, dir=<Direction.UP: 1>)\n"
1635 ]
1636 },
1637 {
1638 "data": {
1639 "image/png": "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\nRK5CYII=\n",
1640 "text/plain": [
1641 "<matplotlib.figure.Figure at 0x7f1033a7d6a0>"
1642 ]
1643 },
1644 "metadata": {},
1645 "output_type": "display_data"
1646 }
1647 ],
1648 "source": [
1649 "w_tour_start = w #[:250]\n",
1650 "print(trace_tour(w_tour_start)[-1])\n",
1651 "plot_trace(trace_tour(w_tour_start))"
1652 ]
1653 },
1654 {
1655 "cell_type": "code",
1656 "execution_count": 75,
1657 "metadata": {},
1658 "outputs": [
1659 {
1660 "name": "stdout",
1661 "output_type": "stream",
1662 "text": [
1663 "RFFRRFFFRFFRFLLRFLFFLLLLFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLRRLRRRRFFFFFFRRRLLFFFFFFLRRRLLLRLLLLRFRLRFRRRFRLRLLRFRLFLLRFRFLRRRRLRFLLRLRRLFFFRLRRFFRFLRFLLFLFRLRLRLRRRLFFRLRRFFRRFFLLRLLFLLLFRFRFLRLFFLFRRRRLRRLRRLRFRRLRRRFRRRRLLRFLLRRFFRLRFFLFLFRRLLLRLFFFRFRLRLLFRRFLLRLFFFLLRLLRRLRFRFFFFFRRFFLFRFLRFRFLFLFRLFLFLRFFLFRLRRRLRRRRFFFRFLLRLFRFRRRLRFFFFFLLFRRLFRRFRFRFLRLLFRFFFLLRRFRRRRLFFFLFLLLFFLRRLRFLFLFFRLLFFRRFFLRLLRFLRLLFLFRLLLRFFFFFFFFLFLRLLRLRLRFLLFFFLFLFFLFRRRRRFFRLLFFFRLFFLFRLFFRFFFFRLRRRLLFLRRFLRFFLRRFRRFLRFLRRLFRRLFFFFRLFLFFLRFFFFFRLFLFLRFFFLLLFLLLFFLRRLFLFRRFRRFFRRRFFRFLFLLFLFRFRFLLLRRRLFRRFFRLRFLFLFLRRLFFFLFRLRFRFFRFLRRFFFFFLFRLRRFRLLRLLFFLLLFFLFFFRLFRFRRRRLFLFLLLLRLFRFRLRLLFLFLLLRRRLLLFRRFRLRFFRRRLLLFRLRLLFFLLRFFFFRLLRLRLLLRLFFFRRLRFRFFRRRFFFRFFFFLRFLFRFLRFRRLLLRLLFRRLFFLRRFFFRLLFRLFLRRFLRLLRRFFLLFLLLFFFFRRFFRLFFLLFLLFRFRLRFLRFFRFRLRLLLFFFLFLRFRFRFLRRLLLLLRFRRLFLLLLRRFFFLLRFLFFRLLLLFLFRLRFFFFFLRLLFFLLLFFLLRRFLRRFLRLRRLLLRRRRRLLLFLRRLFFFRFLRRLF\n",
1664 "RFFRRFFFRFLRFRFLLRFLLRLRRLFRLRRFFLLRLLRRFRFLRLFFLFLRRLRRLRLFLLRRFFLRLLFFFFFRRFFLFRLFFRLLRRFLFFFLRFLRRLRFLFLFFRLLFFRRFFLRLFRFFRLFFLRRFLRFLRRLFRRLFFFFRLFLFFLRFFLFRFLRRFFFFFLFRLRRFRLLRLLFRFLFFFRLFRFLFLRLRFFFFFLFFRFFFFLRFLFRFLRLRLFFLRRFFFRLLFRLFLRRFLRLLRLFFRFLRRLFLLRFLFFRFLFRLRFFFFFLRLLFRFLLRRFLRRFLRLRFLRRLFFFRFLRRLF\n",
1665 "Step(x=40, y=36, dir=<Direction.UP: 1>)\n"
1666 ]
1667 },
1668 {
1669 "data": {
1670 "image/png": "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\n",
1671 "text/plain": [
1672 "<matplotlib.figure.Figure at 0x7f1033a7dfd0>"
1673 ]
1674 },
1675 "metadata": {},
1676 "output_type": "display_data"
1677 }
1678 ],
1679 "source": [
1680 "w_tour = w_tour_start\n",
1681 "w_trace = trace_tour(w_tour)\n",
1682 "mks = mistake_positions(w_trace)\n",
1683 "while len(mks) > 1:\n",
1684 "# print(len(mks))\n",
1685 " w_tour = trim_loop(w_tour)\n",
1686 " w_trace = trace_tour(w_tour)\n",
1687 " mks = mistake_positions(w_trace)\n",
1688 "print('{}\\n{}\\n{}'.format(w_tour_start, w_tour, trace_tour(w_tour)[-1]))\n",
1689 "plot_trace(trace_tour(w_tour))"
1690 ]
1691 },
1692 {
1693 "cell_type": "code",
1694 "execution_count": 76,
1695 "metadata": {
1696 "collapsed": true
1697 },
1698 "outputs": [],
1699 "source": [
1700 "def trim_all_loops(tour, mistake_reduction_attempt_limit=10):\n",
1701 " trace = trace_tour(tour)\n",
1702 " mistake_limit = 1\n",
1703 " if trace[-1].x == 0 and trace[-1].y == 0:\n",
1704 " mistake_limit = 0\n",
1705 " mistakes = mistake_positions(trace)\n",
1706 " \n",
1707 " old_mistake_count = len(mistakes)\n",
1708 " mistake_reduction_tries = 0\n",
1709 " \n",
1710 " while len(mistakes) > mistake_limit and mistake_reduction_tries < mistake_reduction_attempt_limit:\n",
1711 " tour = trim_loop(tour)\n",
1712 " trace = trace_tour(tour)\n",
1713 " mistakes = mistake_positions(trace)\n",
1714 " if len(mistakes) < old_mistake_count:\n",
1715 " old_mistake_count = len(mistakes)\n",
1716 " mistake_reduction_tries = 0\n",
1717 " else:\n",
1718 " mistake_reduction_tries += 1\n",
1719 " if mistake_reduction_tries >= mistake_reduction_attempt_limit:\n",
1720 " return ''\n",
1721 " else:\n",
1722 " return tour"
1723 ]
1724 },
1725 {
1726 "cell_type": "code",
1727 "execution_count": 77,
1728 "metadata": {},
1729 "outputs": [
1730 {
1731 "data": {
1732 "text/plain": [
1733 "'RFFRRFFFRFLRFRFLLRFLLRLRRLFRLRRFFLLRLLRRFRFLRLFFLFLRRLRRLRLFLLRRFFLRLLFFFFFRRFFLFRLFFRLLRRFLFFFLRFLRRLRFLFLFFRLLFFRRFFLRLFRFFRLFFLRRFLRFLRRLFRRLFFFFRLFLFFLRFFLFRFLRRFFFFFLFRLRRFRLLRLLFRFLFFFRLFRFLFLRLRFFFFFLFFRFFFFLRFLFRFLRLRLFFLRRFFFRLLFRLFLRRFLRLLRLFFRFLRRLFLLRFLFFRFLFRLRFFFFFLRLLFRFLLRRFLRRFLRLRFLRRLFFFRFLRRLF'"
1734 ]
1735 },
1736 "execution_count": 77,
1737 "metadata": {},
1738 "output_type": "execute_result"
1739 }
1740 ],
1741 "source": [
1742 "w_trimmed = trim_all_loops(w)\n",
1743 "w_trimmed"
1744 ]
1745 },
1746 {
1747 "cell_type": "code",
1748 "execution_count": 78,
1749 "metadata": {},
1750 "outputs": [
1751 {
1752 "data": {
1753 "image/png": "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\n",
1754 "text/plain": [
1755 "<matplotlib.figure.Figure at 0x7f1033a3d908>"
1756 ]
1757 },
1758 "metadata": {},
1759 "output_type": "display_data"
1760 }
1761 ],
1762 "source": [
1763 "plot_trace(trace_tour(trim_all_loops(w)))"
1764 ]
1765 },
1766 {
1767 "cell_type": "code",
1768 "execution_count": 79,
1769 "metadata": {
1770 "collapsed": true
1771 },
1772 "outputs": [],
1773 "source": [
1774 "def reverse_tour(tour):\n",
1775 " def swap(tour_step):\n",
1776 " if tour_step == 'R':\n",
1777 " return 'L'\n",
1778 " elif tour_step == 'L':\n",
1779 " return 'R'\n",
1780 " else:\n",
1781 " return tour_step\n",
1782 " \n",
1783 " return ''.join(swap(s) for s in reversed(tour))"
1784 ]
1785 },
1786 {
1787 "cell_type": "code",
1788 "execution_count": 80,
1789 "metadata": {},
1790 "outputs": [
1791 {
1792 "data": {
1793 "image/png": "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\n",
1794 "text/plain": [
1795 "<matplotlib.figure.Figure at 0x7f1033accef0>"
1796 ]
1797 },
1798 "metadata": {},
1799 "output_type": "display_data"
1800 }
1801 ],
1802 "source": [
1803 "plot_trace(trace_tour(w_trimmed))"
1804 ]
1805 },
1806 {
1807 "cell_type": "code",
1808 "execution_count": 81,
1809 "metadata": {},
1810 "outputs": [
1811 {
1812 "data": {
1813 "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",
1814 "text/plain": [
1815 "<matplotlib.figure.Figure at 0x7f1033cf2eb8>"
1816 ]
1817 },
1818 "metadata": {},
1819 "output_type": "display_data"
1820 }
1821 ],
1822 "source": [
1823 "plot_trace(trace_tour(reverse_tour(w_trimmed)))"
1824 ]
1825 },
1826 {
1827 "cell_type": "code",
1828 "execution_count": 82,
1829 "metadata": {},
1830 "outputs": [
1831 {
1832 "data": {
1833 "image/png": "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\nkAKBF/H/E7cUOhxnMSgAAAAASUVORK5CYII=\n",
1834 "text/plain": [
1835 "<matplotlib.figure.Figure at 0x7f103452c198>"
1836 ]
1837 },
1838 "metadata": {},
1839 "output_type": "display_data"
1840 }
1841 ],
1842 "source": [
1843 "w1 = random_walk()\n",
1844 "w2 = random_walk()\n",
1845 "plot_trace(trace_tour(w1))\n",
1846 "w1bounds = bounds(trace_tour(w1))\n",
1847 "plot_trace(trace_tour(w2), colour='r', xybounds=w1bounds)"
1848 ]
1849 },
1850 {
1851 "cell_type": "code",
1852 "execution_count": 83,
1853 "metadata": {},
1854 "outputs": [
1855 {
1856 "name": "stdout",
1857 "output_type": "stream",
1858 "text": [
1859 "w1 = 'FRRFRRFFLFRRRLFFFLRFFFRLRFRRFLFLFFFFLRLFFFFFFLRRFLRLLFLLRFLFLLFFFLRLLFRFFFLFLFFRRLFRFRFFFRLFFFFRFFFRFFLRFRRRRFLLFFFRFFLLFLFLRFLFFLFFFRFLRLFRFLFFLLFFFLFFFFLFFFFFLRFFRRRFFLFRFFRFRRRRLLRFFFRFFRFRRFRLLRLLRFRFFLFLFRFRRLFLFLFLFFFFFLLLRRRFRFFRLLRRLRFLFLLLFFFLLFLLFLRFRLRLFFFRLLFLFRFRFRRLFRLFFLFFFFLFFFFRRRLFFFRLLLLFFRFRLRFFFFRFFRFFLLLFFFLRFRLFFFRFFFFRLLFFLRRFFLFRFFFFFFFFRLRLFFLFFLLFFLRFLRFFFFFFFFFLFFFLFRRRRFRFLLLRRFFRFRLFRFLFFFLLRFLLFLFRFLFFRFFFFFRLFRLLRRFFLRRFFFFFFRRFFFFFFRFFLRFFFLFLRRFLLLFFRFLFFFFFLFLLLRFRLFFFLFRFLRLLFRFRFFLFLFLRLFLFFFFFFFFFRFRLFRRRLFLRFLFFFFLLLLFFLFFFFFFFLLFLLLRRRLFLLLRLLFFFFFLFFFFRFFFLLRLRRLFFRFRLLRRFFFFFLFRFFRFLLFFFLRRRFFLLRLLFFFLLRFLFFLFRFFFRLRFFLRFLFFRFFRFFLFRRFFRFRLFLFRRRFRFFRFFFFFRFFFLRRFRFFRRFFFRFRFLFRLRLFLRLFFRFFFFFRRFRFLFFRLFRRFLFFLFRFLFLLLFLRFLLFLFRRRRFFRFFRFFFRLFFFLFRFRLRRFFFLRFRFFLFRRRFFRFFFFRFLRFFRFRFRRFFLFLFLRLFLFLFLLFLFFRFFFFFFFLFRFFLRLFRRLFFRRRFFRFRFRRLRLFFRFFRRFFFRFRFRLLRLFFLLLRFFRRFRFRFRFLLFFFFFLFFLFFFLLFFFFFLRFLFFFFLFRRFFFLFLFLLFFLFFFFFFFRFFLLFFLLLLFFRFFLL\n",
1860 "w2 = 'FLFFFRLRLFFFLRLRRFFFFFFLFFFFLRFFFFRLFLFFLLRFLRLLFLFRLRRFFLFFRRLLRFRLRRLRRLRFFFFFRLFLRLFFFFLFFFFFRRLFFLFRFRFLFFRRLFFLRLLFRFFRFRFFLLFLRFRRFLFFRRFFFLRLFFRLLFFFFFFFRFFRFFFFRFRFLRFFLFLFLFLFRRRRFFFRFRRFFFFRFFLFFLRLFLFFFRLFFFRRLFFFFFLFRFRFFFFRRFRRFRLFRFFLRRRFFFLFLFFRRRFFFFRFFFFFLRLLLFRFLFLRFRLLFFFRFRLRLFRFFLLFFLFFRLFLLLFRRFRLFRFLLRRRFFLFLLFRFFFFFLLLRRLFLLRLLFFFFRRFLFFFLFFLLFFFRFRFFFRFFRFRLFFFLFLRRRLRFLLLRFLLFFRRFRFRFRFFFFLFLFLFFFFFRFFLLLRRFLLLRFRFFFFFFFLLFLFLFLFFLRFLFRLLFFFFRLFRFFLLFFLFLLRFRRLFFRFFRFFRFFLLLFFFFLLLFRRLFRFLLRLRFLLFLRFRFFFFLFLFLRFFLLLLLRRRLFRFFFLFRFRLLFRFFLRFFLFFFFFLRFRFFFFRLFLFRLRRRFLRFFFFLFRRRRFRFFLLRRFRFFRFFFLLRFFFLFLLLFRFLRLRFLRFFRFRFLRRFRFLLRFFLLRLRFFFRLFFFRFLRRRLRRFFLRFLLLLFFFLFRLRLRLLLRFFLFRRFRRLRFRFRLLLFRFFLFLFFLFLFLFFRLRFRFFLLLLRFFLFRFLFLRRRRRFFFFFLFRFRFLLRFRFLFFFFFLRLFLFLFFRLFFFLRRFLRFLFFFFRLFRFLLRFFRFFRFLRFFLLFFRLLRFFLLRRRLFLLFFFLLFFFRRLLRFLFFLLLLFFFFRFFRFRFRLFFFRLRFRLFFFRLLRFFFFFFFFFRLLFFFRRFFRFRFRRFRLFRLLRFRRLRFRFRFFFLFFFFRRFFFLRFRLFRFFFRFRFFLFFFRLLFRRRRFRLFFFFFRFFL\n"
1861 ]
1862 }
1863 ],
1864 "source": [
1865 "print(\"w1 = '{}\".format(w1))\n",
1866 "print(\"w2 = '{}\".format(w2))"
1867 ]
1868 },
1869 {
1870 "cell_type": "code",
1871 "execution_count": 84,
1872 "metadata": {
1873 "collapsed": true
1874 },
1875 "outputs": [],
1876 "source": [
1877 "def wander_near(locus, current, limit=10):\n",
1878 " valid_proposal = False\n",
1879 " while not valid_proposal:\n",
1880 " s = random.choice('FFFRL')\n",
1881 " if s == 'F':\n",
1882 " proposed = advance(current, current.dir)\n",
1883 " elif s == 'L':\n",
1884 " proposed = advance(current, turn_left(current.dir))\n",
1885 " elif s == 'R':\n",
1886 " proposed = advance(current, turn_right(current.dir))\n",
1887 " if abs(proposed.x - locus.x) < limit and abs(proposed.y - locus.y) < limit:\n",
1888 " valid_proposal = True\n",
1889 "# print('At {} going to {} by step {} to {}'.format(current, locus, s, proposed))\n",
1890 " return s, proposed"
1891 ]
1892 },
1893 {
1894 "cell_type": "code",
1895 "execution_count": 85,
1896 "metadata": {
1897 "collapsed": true
1898 },
1899 "outputs": [],
1900 "source": [
1901 "def seek(goal, current):\n",
1902 " dx = current.x - goal.x\n",
1903 " dy = current.y - goal.y\n",
1904 "\n",
1905 " if dx < 0 and abs(dx) > abs(dy): # to the left\n",
1906 " side = 'left'\n",
1907 " if current.dir == Direction.RIGHT:\n",
1908 " s = 'F'\n",
1909 " elif current.dir == Direction.UP:\n",
1910 " s = 'R'\n",
1911 " else:\n",
1912 " s = 'L'\n",
1913 " elif dx > 0 and abs(dx) > abs(dy): # to the right\n",
1914 " side = 'right'\n",
1915 " if current.dir == Direction.LEFT:\n",
1916 " s = 'F'\n",
1917 " elif current.dir == Direction.UP:\n",
1918 " s = 'L'\n",
1919 " else:\n",
1920 " s = 'R'\n",
1921 " elif dy > 0 and abs(dx) <= abs(dy): # above\n",
1922 " side = 'above'\n",
1923 " if current.dir == Direction.DOWN:\n",
1924 " s = 'F'\n",
1925 " elif current.dir == Direction.RIGHT:\n",
1926 " s = 'R'\n",
1927 " else:\n",
1928 " s = 'L'\n",
1929 " else: # below\n",
1930 " side = 'below'\n",
1931 " if current.dir == Direction.UP:\n",
1932 " s = 'F'\n",
1933 " elif current.dir == Direction.LEFT:\n",
1934 " s = 'R'\n",
1935 " else:\n",
1936 " s = 'L'\n",
1937 " if s == 'F':\n",
1938 " proposed = advance(current, current.dir)\n",
1939 " elif s == 'L':\n",
1940 " proposed = advance(current, turn_left(current.dir))\n",
1941 " elif s == 'R':\n",
1942 " proposed = advance(current, turn_right(current.dir))\n",
1943 " \n",
1944 "# print('At {} going to {}, currently {}, by step {} to {}'.format(current, goal, side, s, proposed))\n",
1945 "\n",
1946 " return s, proposed"
1947 ]
1948 },
1949 {
1950 "cell_type": "code",
1951 "execution_count": 124,
1952 "metadata": {
1953 "collapsed": true
1954 },
1955 "outputs": [],
1956 "source": [
1957 "def guided_walk(loci, locus_limit=5, wander_limit=10, seek_step_limit=20, return_anyway=False):\n",
1958 " trail = ''\n",
1959 " current = Step(0, 0, Direction.RIGHT) \n",
1960 " l = 0\n",
1961 " finished = False\n",
1962 " while not finished:\n",
1963 " if abs(current.x - loci[l].x) < locus_limit and abs(current.y - loci[l].y) < locus_limit:\n",
1964 " l += 1\n",
1965 " if l == len(loci) - 1:\n",
1966 " finished = True\n",
1967 " s, proposed = wander_near(loci[l], current, limit=wander_limit)\n",
1968 " trail += s\n",
1969 " current = proposed\n",
1970 "# print('!! Finished loci')\n",
1971 " seek_steps = 0\n",
1972 " while not (current.x == loci[l].x and current.y == loci[l].y) and seek_steps < seek_step_limit:\n",
1973 "# error = max(abs(current.x - loci[l].x), abs(current.y - loci[l].y))\n",
1974 "# s, proposed = wander_near(loci[l], current, limit=error+1)\n",
1975 " s, proposed = seek(loci[l], current)\n",
1976 " trail += s\n",
1977 " current = proposed\n",
1978 " seek_steps += 1\n",
1979 " if seek_steps >= seek_step_limit and not return_anyway:\n",
1980 " return ''\n",
1981 " else:\n",
1982 " return trail"
1983 ]
1984 },
1985 {
1986 "cell_type": "code",
1987 "execution_count": 87,
1988 "metadata": {},
1989 "outputs": [
1990 {
1991 "data": {
1992 "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",
1993 "text/plain": [
1994 "<matplotlib.figure.Figure at 0x7f10342c3b00>"
1995 ]
1996 },
1997 "metadata": {},
1998 "output_type": "display_data"
1999 }
2000 ],
2001 "source": [
2002 "def square_tour(a=80):\n",
2003 " \"a is width of square\"\n",
2004 " return ('F' * a + 'L') * 4\n",
2005 "\n",
2006 "plot_trace(trace_tour(square_tour()))"
2007 ]
2008 },
2009 {
2010 "cell_type": "code",
2011 "execution_count": 88,
2012 "metadata": {},
2013 "outputs": [
2014 {
2015 "data": {
2016 "image/png": "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\nybOEYIzJ+/+3mLJIMXCXRQAAAABJRU5ErkJggg==\n",
2017 "text/plain": [
2018 "<matplotlib.figure.Figure at 0x7f10345c7fd0>"
2019 ]
2020 },
2021 "metadata": {},
2022 "output_type": "display_data"
2023 }
2024 ],
2025 "source": [
2026 "def cross_tour(a=50, b=40):\n",
2027 " \"a is width of cross arm, b is length of cross arm\"\n",
2028 " return ('F' * a + 'L' + 'F' * b + 'R' + 'F' * b + 'L') * 4\n",
2029 "\n",
2030 "plot_trace(trace_tour(cross_tour()))"
2031 ]
2032 },
2033 {
2034 "cell_type": "code",
2035 "execution_count": 90,
2036 "metadata": {},
2037 "outputs": [
2038 {
2039 "data": {
2040 "image/png": "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\n",
2041 "text/plain": [
2042 "<matplotlib.figure.Figure at 0x7f10346c3cf8>"
2043 ]
2044 },
2045 "metadata": {},
2046 "output_type": "display_data"
2047 }
2048 ],
2049 "source": [
2050 "def quincunx_tour(a=60, b=30, c=50):\n",
2051 " \"a is length of indent, b is indent/outdent distance, c is outdent outer length\"\n",
2052 " return ('F' * a + 'R' + 'F' * b + 'L' + 'F' * c + 'L' + 'F' * c + 'L' + 'F' * b + 'R') * 4\n",
2053 "plot_trace(trace_tour(quincunx_tour()))"
2054 ]
2055 },
2056 {
2057 "cell_type": "code",
2058 "execution_count": 91,
2059 "metadata": {},
2060 "outputs": [
2061 {
2062 "data": {
2063 "image/png": "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\nWKIAAAAASUVORK5CYII=\n",
2064 "text/plain": [
2065 "<matplotlib.figure.Figure at 0x7f10346ee208>"
2066 ]
2067 },
2068 "metadata": {},
2069 "output_type": "display_data"
2070 }
2071 ],
2072 "source": [
2073 "plot_trace(trace_tour(('F' * 10 + 'R' + 'F' * 5 + 'L' + 'F' * 10 + 'L' + 'F' * 10 + 'L' + 'F' * 5 + 'R') * 4))"
2074 ]
2075 },
2076 {
2077 "cell_type": "code",
2078 "execution_count": 92,
2079 "metadata": {},
2080 "outputs": [
2081 {
2082 "data": {
2083 "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",
2084 "text/plain": [
2085 "<matplotlib.figure.Figure at 0x7f10341de518>"
2086 ]
2087 },
2088 "metadata": {},
2089 "output_type": "display_data"
2090 }
2091 ],
2092 "source": [
2093 "heart_points = [Step(60, 50, Direction.UP), Step(50, 90, Direction.UP),\n",
2094 " Step(20, 70, Direction.UP), \n",
2095 " Step(-40, 90, Direction.UP), Step(-60, 80, Direction.UP), \n",
2096 " Step(0, 0, Direction.RIGHT)]\n",
2097 "\n",
2098 "heart_tour = ''\n",
2099 "current = Step(0, 0, Direction.RIGHT)\n",
2100 "\n",
2101 "for hp in heart_points:\n",
2102 " while not (current.x == hp.x and current.y == hp.y):\n",
2103 " s, proposed = seek(hp, current)\n",
2104 " heart_tour += s\n",
2105 " current = proposed\n",
2106 "\n",
2107 "plot_trace(trace_tour(heart_tour))\n",
2108 "\n",
2109 "def heart_tour_func(): return heart_tour"
2110 ]
2111 },
2112 {
2113 "cell_type": "code",
2114 "execution_count": 93,
2115 "metadata": {},
2116 "outputs": [
2117 {
2118 "data": {
2119 "text/plain": [
2120 "'FLFFRLRLFFRFFFFFFRFFFLLFFFFRLRFFFRFFFLFFFLFFLFRFFLFFFFFLFRLFRFFLFFFLRFFFFRRFFFFRFFFFFRLFFFRRLLFFFLFRLRLLFFFRFFFFRLFLLFFLLFFFFLFLLFFFLFFLFLFFFFLFFFLFLFFFLFLFFFLFFFLFRFLLLFFLFFRFFFLFFLRFFFLFRFFRFFRRRLRFRRFFRRFFRFFFFRFFLFFLFFFRFFLFLFFLFRRRFFFLFFFRFLFFFRFRFFLFRFFRRFFFFFFFFFFLFLFLRLFFRFRFLFLFLRFFRLRRFFLLFLFFLFLLFFRLRLFFFFFLLFRRFFRLFLFLRFFFFFLRFFFFFLFFFFFFFLFLFRFFLFLFRLFFLFRFFFRRFFLRFFFRLRRFFFFFFRFFFFLLFFLFFFRFLFFLFFLFRFFFLFFFFFFFFLFRFFFFFFLLRLFRRFFFFFFRFLLFRRLFLLFFFFFFFFFFLFLFFFRRRLFRFRFRFFFRFLLFLRLRFFLLFRFRFRRLLRFRFLFFLRFFRRFFFFFFFFFRRFFRLFFFFFFLFFFFFFFRRFLLRFLFLFFLRFRLFFFLLFFFFFFLRLFFFFLFFFFFRLLFFRFFRFFLFLLFFFFFRRFRFFFRRRRLFFRRRFFLLRRRFRRFRRFRFFRFLLFFFFFFFFFFLFFFLLFRRFRFFRFRLRFRFRLLLFFFFFFFFFFFFFLFFLRRRRLRFRFFFFLFFRFRLFRLFFFLRFRFLLRRRFRRRRFFFRRFRRFFRFRFLRLLLFLFFFFLLFFRRFFLFLFRLFRRFFLRFFFFLRRFFRRLRFRFRFFRFFFFFFFFFFFFFRRLFFRLRRFFLLFFFRRFFRLLFFFFFLFFFFLLFLFFFRLFFFFFLFLLLLLFFFFLRFFFFLRFRRFLFFFLFFLFFLFLRFFFRRRFFFLFFLFFLFFFLFFFRFRRRFFFLLRRFFFRFFLLRRFFFLFFFFRRLFLLFLLFLRFRRFLRFFFFRFRFRRFLLFLFRFFFFFFFFFFFRFFFFFFFFFFFRFFFRLLFLFRRRFRFFLFFFLFFFFRFFFFFFFRRFFFRRFRFRLFRLLLLRRFRLFLLFFLFRRRLLLFRRFRRRFFFFFFLFRRFRFFRLFFRLFLLLRFFFFFFRRFRRRRLLFFLRLFFLLFLRRLLLFFFFFLFRRFRRFFFFFRFFFFLFFFFFRFFLLFRLFFLLFFFFFFFLRFFFFFRRRRRRFRLFFFLFFRRFRRRRRFFFFRLRFLFRLFFFFFFLFFFRRFLFLLLLFFFFLFLLFFFFFLLFFLFFFFFRFLFFLFLFFLFLFFFLLFRFFFRLRFLLFLFRFFFFLFRFRFFFRFLRFFRFFRFRFFRRFFLLLFLRRLRFRLFFLLLRFFRFFFRFFFFFFFFFLFFLFRLLFFRRFRFFFFFFFFFLFFFFFFRLLLFRFRFRFFLFFLLRFFFLLLFLLRRFFFFFFFRRLRFRFRFRRFFLRFRLFFLLRFFLFLFFRFFLFLFFFFLFFFFLFFLFRFFFFFRRFRFFFFRFFFFRFFLFFRFFFLFFFFLFLFFFFFRFFFLFRFFRFLFRLLFRFRFRLRFFFFFRRFRRFLFFFFFFLLFFFFFFFRFLRLRRLLRFFFFRFFFFFFLFLFLFFLFFLFFRFFFFFLFFFFFLFRLFRFLLFFFRFFFFFFFFFRFFRFFFFLFFRFFLFLFRFFFFFFLFRFFFLFFFFLFFFFLFRFFRLRFRFLFRRFFFFFLFFFFFFFLFFRFFFRRFFFLLFLFFLFFLFRFFRFFFFRFFFFRFRFRRRRFFFFFRFFFFFFFFFFFFFRFFFRFRFFFRFRRFFFFLFFRFLFFFRFLRRFFFRFFFRLFFFFFFFFLFLFLFFLFFRRFFRRRLFLFLFLFFFFFFFFFFFFFFFFLFRFFFFFLFRRFFFRFRFFRLFLRRFRRFRFRRFRRFFFLFRFRRFFFRFFLRFRFFLLFFLLFFRLRFFFFFRRFRFRRFLFFLFRFLFFFFFFFRLRFLFFLRRFFFFFFFLRFFFFRFRFFFFRFFFFRFRLFFRFLFFFFLLLLLRFFLLFLFLLRRRFRFFRRFFRFFFRFFFFFLRLR'"
2121 ]
2122 },
2123 "execution_count": 93,
2124 "metadata": {},
2125 "output_type": "execute_result"
2126 }
2127 ],
2128 "source": [
2129 "# lc = trace_tour(('F' * 50 + 'L') * 4)\n",
2130 "# lc = trace_tour(('F' * 50 + 'L' + 'F' * 20 + 'R' + 'F' * 20 + 'L') * 4)\n",
2131 "# lc = trace_tour(('F' * 60 + 'R' + 'F' * 30 + 'L' + 'F' * 60 + 'L' + 'F' * 60 + 'L' + 'F' * 30 + 'R') * 4)\n",
2132 "lc = trace_tour(heart_tour)\n",
2133 "rw = guided_walk(lc, wander_limit=8)\n",
2134 "rw"
2135 ]
2136 },
2137 {
2138 "cell_type": "code",
2139 "execution_count": 94,
2140 "metadata": {},
2141 "outputs": [
2142 {
2143 "data": {
2144 "image/png": "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\n",
2145 "text/plain": [
2146 "<matplotlib.figure.Figure at 0x7f10339959b0>"
2147 ]
2148 },
2149 "metadata": {},
2150 "output_type": "display_data"
2151 }
2152 ],
2153 "source": [
2154 "plot_trace(trace_tour(rw))"
2155 ]
2156 },
2157 {
2158 "cell_type": "code",
2159 "execution_count": 95,
2160 "metadata": {},
2161 "outputs": [
2162 {
2163 "data": {
2164 "image/png": "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\n",
2165 "text/plain": [
2166 "<matplotlib.figure.Figure at 0x7f103350d470>"
2167 ]
2168 },
2169 "metadata": {},
2170 "output_type": "display_data"
2171 }
2172 ],
2173 "source": [
2174 "rw_trimmed = trim_all_loops(rw)\n",
2175 "plot_trace(trace_tour(rw_trimmed))"
2176 ]
2177 },
2178 {
2179 "cell_type": "code",
2180 "execution_count": 96,
2181 "metadata": {},
2182 "outputs": [
2183 {
2184 "data": {
2185 "text/plain": [
2186 "764"
2187 ]
2188 },
2189 "execution_count": 96,
2190 "metadata": {},
2191 "output_type": "execute_result"
2192 }
2193 ],
2194 "source": [
2195 "len(rw_trimmed)"
2196 ]
2197 },
2198 {
2199 "cell_type": "code",
2200 "execution_count": 97,
2201 "metadata": {},
2202 "outputs": [
2203 {
2204 "data": {
2205 "text/plain": [
2206 "(284, 22, 'FFRRLLRRFFFFFRFFFRFFRL')"
2207 ]
2208 },
2209 "execution_count": 97,
2210 "metadata": {},
2211 "output_type": "execute_result"
2212 },
2213 {
2214 "data": {
2215 "image/png": "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\n9OCDD+qHP/xh7CidMpmMnn76ad18882xo3zMSy+9pGuvvVYfffRR7CidkrCf33///aqoqJAklZeX\n64YbboiW5ZC5e04PSfdI2irpz5KO72GcJ8mUKVNckk+bNs1LS0u9uLjYFy1aFDuW79ixw2fNmuVl\nZWVeWFjo3/rWt2JH8ubmZn/ggQe8srLSS0pKfPTo0bEjeXt7uy9evNhHjhzpFRUVXlRUFDuSu7u/\n+OKL/oUvfMHLy8u9uLjYGxoaYkfyDRs2JGY/z2QyPm7cOC8sLPR58+ZFy9GdbE/12HnWMa57ZrZK\n0pCuT0lySbe7+7Iu4+ZIKnP3mm7W471tqz/Nnz9ft912m8xMScpVWlqqlpYWZTLJmrQn7XVCmKS9\nf0cffbQaGxs7Z51JkX2drKcxRb2txN0nHeT2fqqO85o13Q2oqfn7r1KplFKp1EGuOv/mzJmjqqoq\nzZ07Vx988IFaW1s1e/ZsXXrppdEySdL27dv1gx/8QA0NDWpubtYFF1ygefPmRc20e/duPfTQQ3ru\nuefU0tKiIUOGaNmyZb3/YR9qaWnRM888ox//+MfKZDLau3ev/vCHP0TP9Nvf/lb33HOPWlpa1NbW\npscee0ynnnpqtEyZTEYbN27UHXfckaj9vKqqKhGFmU6nlU6nw/6ot6loTw9Jp3T5+QZJz/Qwtq9m\n1Dlpb2/3p59+2s844wxfs2ZN7DidXnrpJf/iF7/odXV1saN02rhxo0+fPt2vu+662FE67dixw2+6\n6Sb/8pe/HDtKp32nM84880zfvn177Djuntz9PGmUj8PznpjZs5JGqeMC0FuSrnP3xm7Gei7bAoC+\ndjCH5zmVZmAYShNAoh1MafKNIAAIQGkCQABKEwACUJoAEIDSBIAAlCYABKA0ASAApQkAAShNAAhA\naQJAAEoTAAJQmgAQgNIEgACUJgAEoDQBIAClCQABKE0ACEBpAkAAShMAAlCaABCA0gSAAJQmAASg\nNAEgAKUJAAEoTQAIQGkCQABKEwACUJoAECAvpWlmN5tZxsyOy8f6ACCpci5NMxsh6XxJb+Uep3+l\n0+nYET4hiZmkZOYi08EhU37lY6b5H5JuycN6+l0S37gkZpKSmYtMB4dM+ZVTaZrZxZLedveGPOUB\ngEQr6m2Ama2SNKTrU5Jc0h2SbpM0ab/fAcBhy9z90P7QbKyk1ZKa1VGWIyS9K+lsd99xgPGHtiEA\n6Efu3uPk75BL8xMrMvtfSePdfWdeVggACZTP+zRdHJ4DOMzlbaYJAEeCfv1GkJlVm9k7ZvbH7GNy\nf26/J0m6Qd/M7jazP5nZWjNbYWZDE5DpPjNbb2brzOznZjY4AZkuNbNXzazdzMZHzjLZzDaY2SYz\nmxMzyz5mVmdm75nZn2Nn2cfMRpjZC2b2upk1mNmNCch0lJn9Lvt5azCz6p7Gx/ga5YPuPj77WBFh\n+5+QwBv073P3ce5+lqTnJPX4JvaTX0ka4+5nStosaW7kPJLUIOlrkn4TM4SZFUh6RNKFksZIutzM\nTouZKesxdWRKkjZJs919tKRzJH039mvl7nslnZv9vJ0p6SIzO7u78TFKM4nnPRN1g767N3VZrJCU\niZVlH3df7e77cqxRx90SUbn7RnffrPj71NmSNrv7W+7eKmmxpEsiZ5K7vywpURdm3X27u6/L/twk\nab2kz8RNJbl7c/bHo9RxK2a35y1jlOZ3s4d4C82sMsL2PyapN+ib2T1mtlXSFZLuip1nP1dLqo8d\nIkE+I+ntLsvvKAFFkHRmVqWOmd3v4ibpOFows7WStkta5e6/725srze3H8LGu7sZ/nZJ/ynpbnd3\nM7tH0oOS/jXfGQIyRbtBv6fXyd2Xufsdku7Inh+7QVJN7EzZMbdLanX3p/o6z8FmSoAD7TNcYe2B\nmQ2S9KykWfsdWUWRPYo6K3uufqmZjXb31w80Nu+l6e6Teh8lSaqV1C87fXeZsjfoV0n6k5ntu0H/\nFTM74A36/ZHpAH6qjvOaNX2XpkNvmcxspqR/lnReX2fZJ+B1iukdSZ/tsjxC0rZIWRLPzIrUUZg/\ncfdfxM7Tlbt/ZGZpSZMlHbA0+/vqederwNMkvdqf29+fu7/q7kPd/R/c/SR17Pxn9XVh9sbMTumy\neIk6zvtElb3T4VZJU7MnzpMm5nnN30s6xcxGmlmJpH+R9MuIeboyxT/nu79HJb3u7gtiB5EkM/vU\nvlOFZlamjovCG7od35/3aZrZE+o4h5GR9Kaka939vX4L0Asze0PSP7r7/0XO8aykUep4nd6SdJ27\nN0bOtFlSiaS/ZJ9a4+7fiRhJZvZVSQ9L+pSkDyWtc/eLImWZLGmBOiYide5+b4wcXZnZU5JSko6X\n9J6kand/LHKmL0l6UR13Pnj2cVvMO2nM7HRJj6vjvSuQ9LS7/3u347m5HQAOHv+7CwAIQGkCQABK\nEwACUJoAEIDSBIAAlCYABKA0ASAApQkAAf4fZ+6axunv1bcAAAAASUVORK5CYII=\n",
2216 "text/plain": [
2217 "<matplotlib.figure.Figure at 0x7f10346f29b0>"
2218 ]
2219 },
2220 "metadata": {},
2221 "output_type": "display_data"
2222 }
2223 ],
2224 "source": [
2225 "lc = trace_tour(square_tour(a=10))\n",
2226 "rw = guided_walk(lc, wander_limit=4, locus_limit=2)\n",
2227 "rw_trimmed = trim_all_loops(rw)\n",
2228 "plot_trace(trace_tour(rw_trimmed))\n",
2229 "len(rw), len(rw_trimmed), rw_trimmed"
2230 ]
2231 },
2232 {
2233 "cell_type": "code",
2234 "execution_count": 98,
2235 "metadata": {
2236 "collapsed": true
2237 },
2238 "outputs": [],
2239 "source": [
2240 "# success_count = 0\n",
2241 "# while success_count <= 20:\n",
2242 "# lc = trace_tour(square_tour(a=10))\n",
2243 "# rw = guided_walk(lc, wander_limit=4, locus_limit=2)\n",
2244 "# if rw:\n",
2245 "# rw_trimmed = trim_all_loops(rw)\n",
2246 "# if len(rw_trimmed) > 10:\n",
2247 "# with open('small-squares.txt', 'a') as f:\n",
2248 "# f.write(rw_trimmed + '\\n')\n",
2249 "# success_count += 1"
2250 ]
2251 },
2252 {
2253 "cell_type": "code",
2254 "execution_count": 99,
2255 "metadata": {
2256 "collapsed": true
2257 },
2258 "outputs": [],
2259 "source": [
2260 "# success_count = 0\n",
2261 "# while success_count <= 20:\n",
2262 "# lc = trace_tour(square_tour())\n",
2263 "# rw = guided_walk(lc)\n",
2264 "# if rw:\n",
2265 "# rw_trimmed = trim_all_loops(rw)\n",
2266 "# if len(rw_trimmed) > 10:\n",
2267 "# with open('large-squares.txt', 'a') as f:\n",
2268 "# f.write(rw_trimmed + '\\n')\n",
2269 "# success_count += 1"
2270 ]
2271 },
2272 {
2273 "cell_type": "code",
2274 "execution_count": 100,
2275 "metadata": {
2276 "collapsed": true
2277 },
2278 "outputs": [],
2279 "source": [
2280 "# success_count = 0\n",
2281 "# while success_count <= 20:\n",
2282 "# lc = trace_tour(cross_tour())\n",
2283 "# rw = guided_walk(lc)\n",
2284 "# if rw:\n",
2285 "# rw_trimmed = trim_all_loops(rw)\n",
2286 "# if len(rw_trimmed) > 10:\n",
2287 "# with open('cross.txt', 'a') as f:\n",
2288 "# f.write(rw_trimmed + '\\n')\n",
2289 "# success_count += 1"
2290 ]
2291 },
2292 {
2293 "cell_type": "code",
2294 "execution_count": 101,
2295 "metadata": {
2296 "collapsed": true
2297 },
2298 "outputs": [],
2299 "source": [
2300 "# success_count = 0\n",
2301 "# while success_count <= 20:\n",
2302 "# lc = trace_tour(quincunx_tour())\n",
2303 "# rw = guided_walk(lc)\n",
2304 "# if rw:\n",
2305 "# rw_trimmed = trim_all_loops(rw)\n",
2306 "# if len(rw_trimmed) > 10:\n",
2307 "# with open('quincunx.txt', 'a') as f:\n",
2308 "# f.write(rw_trimmed + '\\n')\n",
2309 "# success_count += 1"
2310 ]
2311 },
2312 {
2313 "cell_type": "code",
2314 "execution_count": 102,
2315 "metadata": {},
2316 "outputs": [
2317 {
2318 "data": {
2319 "image/png": "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\n9OCDD+qHP/xh7CidMpmMnn76ad18882xo3zMSy+9pGuvvVYfffRR7CidkrCf33///aqoqJAklZeX\n64YbboiW5ZC5e04PSfdI2irpz5KO72GcJ8mUKVNckk+bNs1LS0u9uLjYFy1aFDuW79ixw2fNmuVl\nZWVeWFjo3/rWt2JH8ubmZn/ggQe8srLSS0pKfPTo0bEjeXt7uy9evNhHjhzpFRUVXlRUFDuSu7u/\n+OKL/oUvfMHLy8u9uLjYGxoaYkfyDRs2JGY/z2QyPm7cOC8sLPR58+ZFy9GdbE/12HnWMa57ZrZK\n0pCuT0lySbe7+7Iu4+ZIKnP3mm7W471tqz/Nnz9ft912m8xMScpVWlqqlpYWZTLJmrQn7XVCmKS9\nf0cffbQaGxs7Z51JkX2drKcxRb2txN0nHeT2fqqO85o13Q2oqfn7r1KplFKp1EGuOv/mzJmjqqoq\nzZ07Vx988IFaW1s1e/ZsXXrppdEySdL27dv1gx/8QA0NDWpubtYFF1ygefPmRc20e/duPfTQQ3ru\nuefU0tKiIUOGaNmyZb3/YR9qaWnRM888ox//+MfKZDLau3ev/vCHP0TP9Nvf/lb33HOPWlpa1NbW\npscee0ynnnpqtEyZTEYbN27UHXfckaj9vKqqKhGFmU6nlU6nw/6ot6loTw9Jp3T5+QZJz/Qwtq9m\n1Dlpb2/3p59+2s844wxfs2ZN7DidXnrpJf/iF7/odXV1saN02rhxo0+fPt2vu+662FE67dixw2+6\n6Sb/8pe/HDtKp32nM84880zfvn177Djuntz9PGmUj8PznpjZs5JGqeMC0FuSrnP3xm7Gei7bAoC+\ndjCH5zmVZmAYShNAoh1MafKNIAAIQGkCQABKEwACUJoAEIDSBIAAlCYABKA0ASAApQkAAShNAAhA\naQJAAEoTAAJQmgAQgNIEgACUJgAEoDQBIAClCQABKE0ACEBpAkAAShMAAlCaABCA0gSAAJQmAASg\nNAEgAKUJAAEoTQAIQGkCQABKEwACUJoAECAvpWlmN5tZxsyOy8f6ACCpci5NMxsh6XxJb+Uep3+l\n0+nYET4hiZmkZOYi08EhU37lY6b5H5JuycN6+l0S37gkZpKSmYtMB4dM+ZVTaZrZxZLedveGPOUB\ngEQr6m2Ama2SNKTrU5Jc0h2SbpM0ab/fAcBhy9z90P7QbKyk1ZKa1VGWIyS9K+lsd99xgPGHtiEA\n6Efu3uPk75BL8xMrMvtfSePdfWdeVggACZTP+zRdHJ4DOMzlbaYJAEeCfv1GkJlVm9k7ZvbH7GNy\nf26/J0m6Qd/M7jazP5nZWjNbYWZDE5DpPjNbb2brzOznZjY4AZkuNbNXzazdzMZHzjLZzDaY2SYz\nmxMzyz5mVmdm75nZn2Nn2cfMRpjZC2b2upk1mNmNCch0lJn9Lvt5azCz6p7Gx/ga5YPuPj77WBFh\n+5+QwBv073P3ce5+lqTnJPX4JvaTX0ka4+5nStosaW7kPJLUIOlrkn4TM4SZFUh6RNKFksZIutzM\nTouZKesxdWRKkjZJs919tKRzJH039mvl7nslnZv9vJ0p6SIzO7u78TFKM4nnPRN1g767N3VZrJCU\niZVlH3df7e77cqxRx90SUbn7RnffrPj71NmSNrv7W+7eKmmxpEsiZ5K7vywpURdm3X27u6/L/twk\nab2kz8RNJbl7c/bHo9RxK2a35y1jlOZ3s4d4C82sMsL2PyapN+ib2T1mtlXSFZLuip1nP1dLqo8d\nIkE+I+ntLsvvKAFFkHRmVqWOmd3v4ibpOFows7WStkta5e6/725srze3H8LGu7sZ/nZJ/ynpbnd3\nM7tH0oOS/jXfGQIyRbtBv6fXyd2Xufsdku7Inh+7QVJN7EzZMbdLanX3p/o6z8FmSoAD7TNcYe2B\nmQ2S9KykWfsdWUWRPYo6K3uufqmZjXb31w80Nu+l6e6Teh8lSaqV1C87fXeZsjfoV0n6k5ntu0H/\nFTM74A36/ZHpAH6qjvOaNX2XpkNvmcxspqR/lnReX2fZJ+B1iukdSZ/tsjxC0rZIWRLPzIrUUZg/\ncfdfxM7Tlbt/ZGZpSZMlHbA0+/vqederwNMkvdqf29+fu7/q7kPd/R/c/SR17Pxn9XVh9sbMTumy\neIk6zvtElb3T4VZJU7MnzpMm5nnN30s6xcxGmlmJpH+R9MuIeboyxT/nu79HJb3u7gtiB5EkM/vU\nvlOFZlamjovCG7od35/3aZrZE+o4h5GR9Kaka939vX4L0Asze0PSP7r7/0XO8aykUep4nd6SdJ27\nN0bOtFlSiaS/ZJ9a4+7fiRhJZvZVSQ9L+pSkDyWtc/eLImWZLGmBOiYide5+b4wcXZnZU5JSko6X\n9J6kand/LHKmL0l6UR13Pnj2cVvMO2nM7HRJj6vjvSuQ9LS7/3u347m5HQAOHv+7CwAIQGkCQABK\nEwACUJoAEIDSBIAAlCYABKA0ASAApQkAAf4fZ+6axunv1bcAAAAASUVORK5CYII=\n",
2320 "text/plain": [
2321 "<matplotlib.figure.Figure at 0x7f10342e2390>"
2322 ]
2323 },
2324 "metadata": {},
2325 "output_type": "display_data"
2326 }
2327 ],
2328 "source": [
2329 "plot_trace(trace_tour(rw_trimmed), filename='test.png')"
2330 ]
2331 },
2332 {
2333 "cell_type": "code",
2334 "execution_count": 103,
2335 "metadata": {
2336 "collapsed": true
2337 },
2338 "outputs": [],
2339 "source": [
2340 "# patterns = [square_tour, cross_tour, quincunx_tour, heart_tour_func]\n",
2341 "# tours_filename = 'tours.txt'\n",
2342 "\n",
2343 "# try:\n",
2344 "# os.remove(tours_filename)\n",
2345 "# except OSError:\n",
2346 "# pass\n",
2347 "\n",
2348 "# success_count = 0\n",
2349 "# while success_count < 100:\n",
2350 "# lc = trace_tour(random.choice(patterns)())\n",
2351 "# rw = guided_walk(lc)\n",
2352 "# if rw:\n",
2353 "# rw_trimmed = trim_all_loops(rw)\n",
2354 "# if len(rw_trimmed) > 10:\n",
2355 "# with open(tours_filename, 'a') as f:\n",
2356 "# f.write(rw_trimmed + '\\n')\n",
2357 "# success_count += 1"
2358 ]
2359 },
2360 {
2361 "cell_type": "code",
2362 "execution_count": 104,
2363 "metadata": {},
2364 "outputs": [
2365 {
2366 "name": "stdout",
2367 "output_type": "stream",
2368 "text": [
2369 "Found mistakes: 1916\n"
2370 ]
2371 },
2372 {
2373 "data": {
2374 "text/plain": [
2375 "(5540, 14, 'LFFFFLLRLFFLRL')"
2376 ]
2377 },
2378 "execution_count": 104,
2379 "metadata": {},
2380 "output_type": "execute_result"
2381 },
2382 {
2383 "data": {
2384 "image/png": "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\nx0SoEAAAAABJRU5ErkJggg==\n",
2385 "text/plain": [
2386 "<matplotlib.figure.Figure at 0x7f1033d81390>"
2387 ]
2388 },
2389 "metadata": {},
2390 "output_type": "display_data"
2391 }
2392 ],
2393 "source": [
2394 "lc = trace_tour(cross_tour())\n",
2395 "rw = guided_walk(lc)\n",
2396 "print('Found mistakes:', len(mistake_positions(trace_tour(rw))))\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": 105,
2405 "metadata": {},
2406 "outputs": [
2407 {
2408 "data": {
2409 "image/png": "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\nQmCC\n",
2410 "text/plain": [
2411 "<matplotlib.figure.Figure at 0x7f103402bef0>"
2412 ]
2413 },
2414 "metadata": {},
2415 "output_type": "display_data"
2416 }
2417 ],
2418 "source": [
2419 "plot_trace(trace_tour(rw))"
2420 ]
2421 },
2422 {
2423 "cell_type": "code",
2424 "execution_count": 106,
2425 "metadata": {},
2426 "outputs": [
2427 {
2428 "data": {
2429 "image/png": "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\nx0SoEAAAAABJRU5ErkJggg==\n",
2430 "text/plain": [
2431 "<matplotlib.figure.Figure at 0x7f1034757358>"
2432 ]
2433 },
2434 "metadata": {},
2435 "output_type": "display_data"
2436 }
2437 ],
2438 "source": [
2439 "plot_trace(trace_tour(trim_all_loops(rw)))"
2440 ]
2441 },
2442 {
2443 "cell_type": "code",
2444 "execution_count": 108,
2445 "metadata": {
2446 "scrolled": true
2447 },
2448 "outputs": [
2449 {
2450 "name": "stdout",
2451 "output_type": "stream",
2452 "text": [
2453 "[Mistake(i=9, step=Step(x=0, y=5, dir=<Direction.RIGHT: 2>)), Mistake(i=29, step=Step(x=5, y=6, dir=<Direction.DOWN: 3>)), Mistake(i=33, step=Step(x=5, y=2, dir=<Direction.DOWN: 3>))]\n"
2454 ]
2455 },
2456 {
2457 "data": {
2458 "text/plain": [
2459 "'LFFFFRFFRFFLFFLFFFLFFRRFRFFFFFFFFFFFRFRLRRLLRFFFFRFLFFLLFLRFFFFFLFFFFFLFFLFRLFRFRLFFFFLLFFFFLFFFRLFRRFFFLFFFFFFFFFLFLRFFFRLRLLFRRFLLFFFLFFFFFRLFFFRRLFFFLLFFLRLFLFLRFRFFFFLFFFRRFFLLLFLLLRLFFFFFLLFFFFFFLFFLRLLFFFRRLFLLLFRRFLFLLFFRFFLFFRFFFFFFFFFFFFFRFRRRRRFFRRRFFFLRRFLRFFFLLFFLRFLFLFFFLFFFLFLFRFFFFFRLFFFFFLFFLFFRRRRFLFFFFFFFFFFFFLFFFFLFRFLLLFFRRFFLLFFLFFLFFFFFFRRFFRLFLLFFFFFFLFFLLFFRFRRLLFRFFRRFLRLFLLFFFRFRFFFFFFFFFFFFFFFFRFFFFRFLFFFFFFFRFFLFFFFRRFFFLLFRFFFRRFFFFRRFFFFFFLLFLFFFFLRRLLFRFFLRFRFLFFFFRRRFFFRRFFRRRRRRFLRRFRFRFRFLFFFFLLLLFFLRRRFFFFFFRFFRFFLLFFFRFFRRFFFLFFFFFLFLFFFFLFLLFFFFFRFFLLFFFLFRFFLLRLFFFFFFLFFLRRLFFRFFFLLFLFFFRRFRRFRFFRFFRFRRRFFRFFFRFRRLRFFFFLFLFFFRFFFFFFFFRFFRFFFRLFRFRFRRRRFRFLRFFFLRLRFRFLFFFFFFLRRFFLLFFFLFLFFFFRFRFRFFLFFRRFFFFFRLRFFFFFRFFFFRFFFFFRFFLLFFRFFLRRLFLFLFFFFFFFFFFFLFFFFFRFFLRLFLLFFFRFRFFFRFFRFFRFLFFLRFFRRLRRFFLLRRLFFFLFFFFFFFRRRLRFFLFRFFRLFRFFRFFFFFLFFFFLFFFFLFFFRRFRFRFLFLFRFFLFFLRFRFFFFRFFFFLFLFFFRRRLFLFFLFRFRFFLFLFFLFLFLLFFFFFFLFFFRFFFLFFRFFFFRFFFLLFLFFRFRFFRFRFFFFFFFFLLLFFLFFFLFFFFFLFRRFFFFLFFFFRRRFRFRFFLLFRFLFRLFLLLRFFLFFLFFFFFRRLFFLFFFFRRFFFLFRFRRRRFRLFLFRFFFLFLRFFFFLFLFLRFFLFRFRFRFLFLFLFRFLRFFRFRLFFFRFLLFFRRFFFFFFFRLFLLFLFFFLFRLRRFFFFLFFLLRFFLFRRRFLFLLFFFFFFLFFLLLFFFFFFLLRRFRFFFRRFLLFFFLLFFFFFRFRRLFFFFLRRLRRFFLRRFFFLFLFFFFLRLFLLRFFRFRFRFRFFLLRRLRLRFRFFFFFFFFFFFFFFFRFFLFRRFFRFFFLRLLLRRFFLFRFRRLFRFRFFRFFFRLFFFRRLFRFFFFRFFFRFFFFFRFFFRLLFFRLFRFFFRFRRRRFFFRRLLFFLFFFFFFFFRFFFRFFFLFFLFFFFFFFFLFLFFRFFFFFFRFFRFFFFLLLLFFFFLLLFRFLFRFRFFFRFFFLRFFRRLFFLFLLRFFRRRLLRFRFRFLFFFFLRRLRRLLFFFFFFRFFRRRFFLFFFFFLFFFFLRFFRLFFFLFFLFLFFLFFFLFFFLLLFFFFLFFFFFLRFFFRLFFFFLFLRRRRFFRFFFLRRLFFFRFLFFLFFFFFLRRFRLFLFLLFRLFRLFLFRFRFRLLFFRFLRFFRFFLRRLRFFFLRFRFFFFFLFFRLRFFFRFRFLRFRFLFFFRRRRRLFFFFFLFFFRFLFFFLFRFFFFFFFRFLFLFLLLRRFFFFFFFFRLFLRFRFFLLLFFFLFLFFRFLFFFRRFFRLFFRLFRFRFFLRFRFFFFFFFFRFFFRLFFRFFFLFLRFFFFLFFLFFFRFFFRFFFLFLLLLFLFFFLFLFFRFLLFLFFLFRFFFFLFFFRFFFFFFFFFFFFLLFFFFFFRLLFRRRFFFFLRFFFFRFFFFRFLFRLFFRFFFLFLFRFRLFFFRRLFRFLRFFFFFFFFRLFRFFFFFRRFRFRRFLFRFRFFFLFFFFFLRRLFLRFRRFRFFRFRRFFFFFFFLFRFFFRFRRLRRFFFFFFRLLLLFRFLLFFLFFLFFFFFFFFFFFFFFFFFLFFLRFFLRFFLFRFLRRLFLFFFLFFRFLRFFFFLRFFRFFFFFFFFRFRFFFRRFFFLLFFFFFFLRFFRRFRFLFFLFLFFLFLFRFLFFFLRFFRFLLFLFRFRFFFFLLFFFFFFFFLFRRRRFFFFFFFFRFFLFFRRFRRFLFFRRFFRRFFFRRFRFRFFFFFRFFFFFRRFFRRFFLFFLFRFLRRRFFFLLFFFFFFFFFLLLFRFFFFRRFLFLFFLRRFFFFRFFLRRFLFRFFFFRLLFLLFFFFRFRFFRFLFLRFLRFLFRFLFFRRRLFFRLFLRLFRFFRFFLFLFRFFFFRFFFFFFFRFFLFRLFLLRLFFFFFFRFFFRFFFFRFFRFFFRFFRLRFFFRLFRRRRRFFRRRRRFFRLRFFRFFLRLFFLRFRRFFRFFFFRFFFFFRFFFFRFFFFFRFRFLLFRFFFFFRFLLFRFRFRFRLFFRRRRRRFFFRRFFFLLFRFRFFRRLFFLLFFFFLFFLRRRFFFFRLLFRFFRFLRRRFRLFFLLFRFFFRFFFFFRFFFFRFFRFRFFFFFFRFLFLFFFFFRRFLLFFFFFLFFLFFFLFFFLRLFFLFFFFFFFLFRFLLFLFFLFFRFFFLFFLLRLFFRFFRFRLFRFFRFFRLRFFLLFRLFFFFRFFLFFLFRRFRFFFLFFLRFRLFFLFLRFFLFLFFFFLFFFLFFFFFFFFFLFFFFFLFFFFRLRFFFFFFFFFFRRFFFFFRRRRFFLLFFLRFFFFRFFFFRFFFFLFFFRFFFFFFRLFFLFFRFFRFRFFLLRFLFLFLFFLFLFFLFLRFFFFRRRFFFRFFLFLRFLFFRRFLFLFLLFFFFRLLLLLRLRRFFRRFFLRLFFRLLFRRLFFRFLLFFFLRLFFFFFFFFFLFRLFRLFLFFFFFRLRLRFFFRFRFFFRFFFFFFRFRFFFLFLFLLRRFRFLRFRFLFRRFRLFFFFFLFLFFFFFFFFLFRFFFFFFRRFFRLFFRFLLFLRFFFFLFRFFFLFFLFLFLFFFRRFRFFLRFLFRLFFFRFFFLFFFFFFRFLFFLFFRFRFFRFFFFFFFFFFFFRFFFFFFRRRFFFRFFFFRFFFLLRFFRLRFRFFLFFFRFFLFLFFFFLLRFFRRRFRLLRRLFFFLFLLFRFFFFRFFFFRFLFFLLFFFLFFFFLFFFFLFLLFRFLFFLRLFFFFLRFRLFRFFRFFFRLFFFRFLFFLLRFRRFFFFFFFFFFFFFFFFRRFLLFFLLRLFFFFFFFFFFFFFFLRFRRFFFRRFLLRFFFRFFLFLFRLRFFFFFRFFRFFFRLRRFFFFFRRRRRLFLLFFLLFFRRFRFFFFFLFFFFLFLFFRFFLFFFFLRLLFFFLFLFFFLLFLFLFFLRRRFFFFFRLFFFRLFFFFRFRFFFFRFFLFLLFLFRRFFRRRFFFLFRFFFRFFFFFFFFRRLFFFFFFRFLLFFFFRLFFFLFFLFFRLFFLFRFFFLFFFFLLFFFRFRLRFRFFRFLFFFLLLRFFFRFFFFFFFFLRLLFRRFLRFRRRLLRFRFFLLRFFLFLLRFFFFFLLFRRRRRRFFFFFRFFRRFLFFFFFRLFFFLFLFFLFLLFFLFFRFFRRRFFLRRRFLFFRFFFFFLFFLLFFRFRRRFFRFRRFRFRFFLRFRFFRRFRFFFRFFLFRFLRFFLFFRLRFFFFFFLRFFFFRLLLFLFLFLFLLFFLRFFRFFRFFLFFFRFFRRRFRLFLFFFLFFLFFFLFFFFFLLRLFFLFLFFFFFFFFLLFFFRRFFLRLFFFLLFLLFFFFLFFFRFFFFLFRFFRFRFRFRLLFFFLLFFFLRRFFRFRFLFLFFFLLRRRRFRRLLLRLFLFFLFFFLFFFFFFFFFLRRRFFFFRFFFRRLFFFFFFFLRFLRLFLFFFFFLFFLFFRFRRFFRRLFFFLFFFFFRLRFFLFRFFFRFFRRRRRLFFFRFFRFRRRLFFFFLFFLLFFRRRRLFLFRRFRRLFFFRFFFLLFRLLLRLFFFRFFRFFFLRRFFFFFFFFFRRRLFFFFLRFFFRRFFFFFRLFFFFRRRLFFFFRRFRLFFFFFFRLLLRLLFFFFFRFLLFFRFFFFRFRFFFLFRFFFFFFFRRRLFFLRFRLFFFFFFFFLFFFFLFRFLRLRFLFFFFFFFFFLFFLLFFFFLFLFFFFFLFFFFLFLFFFLLFFRRFFFRFFFRFFFFRLRFFLFFFFFLRFLLLFRRLLRFFFFFFFFFRFLLLFRLFFFLFRFFRFRFFFFFFFRFLLLFFFFFFLFFFFFRFRLFFFRFLRLFLFLLRFFLRFFFRFFRFFFLRFFLFFLFLFFFFRFFFFFFFFFRFLRRFFFFRRLFRFFFFFRRFRLLFFRRRLLFFRLFFFLLFFFFRFFFFFFRRFRFFLRFFRFFFFFFFFFFFFFFFFRRFLFFFRRFRFFLLFFLRLFLFFFRFFFFRFFRLFFFFFFLFFLFFRLRFFFFRFFFRRLFFFFLLFLRFFLFFFFFFFFFFFRRFRFLFLFRRFFLLFFRFRFFFFLRLRFLLRLLFRFLFRRFLFFRFRFFFRFFFFLFFFRFFRRFFFLFFFFLFFRFLLLFRRLFLRLLLFLFFLLFFFFFFRRFFLLFLLRFRFRFFRFFFFFRFFRRFLFLRFLFFRLFFFLRRRRRFFFRRFFRLFFFRFRLFRFRFLRFRLRFRRFRLFFFLFRFFLRLRFFFRFFFRFFFFFFFFRFLFFFFRFFFFRFFFFLFRRFLFFFFRLLFFFFFLFLFFFRFRFLRLRRFRFLLFLFFFRRLFRFRLFFFLFRFRFLFFFFFFRRFLRRLRLFLLFFFFFFRRFRFFRLFFRFLFFLFFRFFFLFFLFFLFRFRFFFFLLRRRRFFFFFFFFLFFFFFFFFFLFLFRRFFFFRFRFFFFRFFRRFRFFFFLLLRLFFFRFFFFFFRFRLFFFLFFFFFFFFFFLRFFFRRRFRRFRFRFFFFLFLFFLRFLFFLFLFFFLFLFFFLFFFFFLFFFFFRFFFFLLRFFRFFFRFRFLLLFFFLFFFFLFFFFLRRFRFFLRLLFFFRFFFFLLLLRFFFRFFFFFFFFFFFRFRLLFFLFLFRLFFFFFFFFFFFLFFFFFFFFFFFFLRFFFFLFLFFLFLFFRRFRLRFFFFFFFLFLFFRFLRFFFFFRFRFFLLFRLFRFFRRFRLLFFRFLRFFFFRRFRFLFFLFFLFLRFFRFFRRFLLLLFLRFFFFLFFRRFRLFFFFLRFFLFFLFFLFRLFFLFRFFLFFFFLFFFFRRFLFRFFFFRFFFLFLLLRFFFFFFRFFFLLFRFFRRFRFLFFLFFRFLFFFFRFFLRFRFFRFFFLRRFLFFFLRFFLRRFLFRLFFRFFFFRLRLLLRLFFFFFFFFFLFLFFFFRFFFLLFFFFFRFRFFFFFFFLFFLRFFRFRRRLFFLLLRFRFFFLFFFLFRLRFLLFLFFFLFFLRFLFFFLFFLLFLLFRFRFLRLFFLFFFRFFFLLLFRFFFFFFFRLFFLFFLFLFFRLFFFFFRRLRLFFLRL'"
2460 ]
2461 },
2462 "execution_count": 108,
2463 "metadata": {},
2464 "output_type": "execute_result"
2465 }
2466 ],
2467 "source": [
2468 "w_tour = rw\n",
2469 "w_trace = trace_tour(w_tour)\n",
2470 "mks = mistake_positions(w_trace)\n",
2471 "print(mks[:3])\n",
2472 "trim_loop(w_tour)"
2473 ]
2474 },
2475 {
2476 "cell_type": "code",
2477 "execution_count": 109,
2478 "metadata": {
2479 "scrolled": true
2480 },
2481 "outputs": [
2482 {
2483 "name": "stdout",
2484 "output_type": "stream",
2485 "text": [
2486 "1916\n",
2487 "1912\n",
2488 "1909\n",
2489 "1903\n",
2490 "1900\n",
2491 "1896\n",
2492 "1894\n",
2493 "1892\n",
2494 "1883\n",
2495 "1881\n",
2496 "1878\n",
2497 "1872\n",
2498 "1860\n",
2499 "1855\n",
2500 "1854\n",
2501 "1849\n",
2502 "1846\n",
2503 "1845\n",
2504 "1839\n",
2505 "1835\n",
2506 "1833\n",
2507 "1828\n",
2508 "1825\n",
2509 "1821\n",
2510 "1819\n",
2511 "1810\n",
2512 "1800\n",
2513 "1793\n",
2514 "1784\n",
2515 "1783\n",
2516 "1763\n",
2517 "1737\n",
2518 "1735\n",
2519 "1729\n",
2520 "1719\n",
2521 "1716\n",
2522 "1713\n",
2523 "1707\n",
2524 "1697\n",
2525 "1696\n",
2526 "1695\n",
2527 "1694\n",
2528 "1689\n",
2529 "1687\n",
2530 "1673\n",
2531 "1669\n",
2532 "1646\n",
2533 "1628\n",
2534 "1621\n",
2535 "1617\n",
2536 "1602\n",
2537 "1600\n",
2538 "1599\n",
2539 "1598\n",
2540 "1595\n",
2541 "1590\n",
2542 "1588\n",
2543 "1582\n",
2544 "1581\n",
2545 "1578\n",
2546 "1571\n",
2547 "1570\n",
2548 "1568\n",
2549 "1564\n",
2550 "1547\n",
2551 "1542\n",
2552 "1536\n",
2553 "1534\n",
2554 "1528\n",
2555 "1527\n",
2556 "1525\n",
2557 "1523\n",
2558 "1520\n",
2559 "1508\n",
2560 "1498\n",
2561 "1482\n",
2562 "1479\n",
2563 "1477\n",
2564 "1475\n",
2565 "1466\n",
2566 "1459\n",
2567 "1456\n",
2568 "1454\n",
2569 "1450\n",
2570 "1434\n",
2571 "1423\n",
2572 "1412\n",
2573 "1405\n",
2574 "1404\n",
2575 "1398\n",
2576 "1395\n",
2577 "1394\n",
2578 "1392\n",
2579 "1388\n",
2580 "1377\n",
2581 "1369\n",
2582 "1365\n",
2583 "1351\n",
2584 "1341\n",
2585 "1337\n",
2586 "1300\n",
2587 "1298\n",
2588 "1295\n",
2589 "1289\n",
2590 "1288\n",
2591 "1286\n",
2592 "1283\n",
2593 "1277\n",
2594 "1276\n",
2595 "1275\n",
2596 "1274\n",
2597 "1269\n",
2598 "1258\n",
2599 "1257\n",
2600 "1253\n",
2601 "1236\n",
2602 "1231\n",
2603 "1227\n",
2604 "1214\n",
2605 "1210\n",
2606 "1198\n",
2607 "1194\n",
2608 "1193\n",
2609 "1173\n",
2610 "1168\n",
2611 "1161\n",
2612 "1159\n",
2613 "1157\n",
2614 "1156\n",
2615 "1152\n",
2616 "1143\n",
2617 "1142\n",
2618 "1135\n",
2619 "1134\n",
2620 "1130\n",
2621 "1122\n",
2622 "1121\n",
2623 "1118\n",
2624 "1109\n",
2625 "1098\n",
2626 "1095\n",
2627 "1094\n",
2628 "1090\n",
2629 "1085\n",
2630 "1082\n",
2631 "1079\n",
2632 "1076\n",
2633 "1070\n",
2634 "1053\n",
2635 "1046\n",
2636 "1036\n",
2637 "1029\n",
2638 "1025\n",
2639 "1023\n",
2640 "1019\n",
2641 "1018\n",
2642 "1011\n",
2643 "1008\n",
2644 "1004\n",
2645 "1000\n",
2646 "998\n",
2647 "997\n",
2648 "990\n",
2649 "985\n",
2650 "981\n",
2651 "975\n",
2652 "971\n",
2653 "963\n",
2654 "962\n",
2655 "961\n",
2656 "958\n",
2657 "952\n",
2658 "950\n",
2659 "948\n",
2660 "939\n",
2661 "936\n",
2662 "933\n",
2663 "928\n",
2664 "924\n",
2665 "920\n",
2666 "918\n",
2667 "905\n",
2668 "903\n",
2669 "898\n",
2670 "897\n",
2671 "893\n",
2672 "884\n",
2673 "878\n",
2674 "876\n",
2675 "870\n",
2676 "850\n",
2677 "842\n",
2678 "834\n",
2679 "826\n",
2680 "820\n",
2681 "816\n",
2682 "806\n",
2683 "802\n",
2684 "795\n",
2685 "789\n",
2686 "773\n",
2687 "765\n",
2688 "759\n",
2689 "749\n",
2690 "744\n",
2691 "731\n",
2692 "728\n",
2693 "725\n",
2694 "720\n",
2695 "719\n",
2696 "713\n",
2697 "707\n",
2698 "704\n",
2699 "696\n",
2700 "685\n",
2701 "681\n",
2702 "678\n",
2703 "675\n",
2704 "674\n",
2705 "666\n",
2706 "661\n",
2707 "655\n",
2708 "646\n",
2709 "645\n",
2710 "644\n",
2711 "638\n",
2712 "637\n",
2713 "632\n",
2714 "628\n",
2715 "623\n",
2716 "615\n",
2717 "614\n",
2718 "610\n",
2719 "608\n",
2720 "600\n",
2721 "595\n",
2722 "586\n",
2723 "582\n",
2724 "578\n",
2725 "577\n",
2726 "573\n",
2727 "568\n",
2728 "562\n",
2729 "561\n",
2730 "557\n",
2731 "555\n",
2732 "545\n",
2733 "542\n",
2734 "540\n",
2735 "532\n",
2736 "520\n",
2737 "512\n",
2738 "500\n",
2739 "494\n",
2740 "491\n",
2741 "487\n",
2742 "486\n",
2743 "485\n",
2744 "481\n",
2745 "477\n",
2746 "471\n",
2747 "449\n",
2748 "440\n",
2749 "425\n",
2750 "423\n",
2751 "419\n",
2752 "407\n",
2753 "401\n",
2754 "400\n",
2755 "398\n",
2756 "390\n",
2757 "389\n",
2758 "381\n",
2759 "371\n",
2760 "369\n",
2761 "367\n",
2762 "363\n",
2763 "362\n",
2764 "358\n",
2765 "357\n",
2766 "340\n",
2767 "334\n",
2768 "330\n",
2769 "326\n",
2770 "320\n",
2771 "314\n",
2772 "313\n",
2773 "307\n",
2774 "303\n",
2775 "299\n",
2776 "291\n",
2777 "288\n",
2778 "284\n",
2779 "278\n",
2780 "266\n",
2781 "256\n",
2782 "251\n",
2783 "247\n",
2784 "238\n",
2785 "232\n",
2786 "226\n",
2787 "224\n",
2788 "220\n",
2789 "211\n",
2790 "210\n",
2791 "208\n",
2792 "201\n",
2793 "194\n",
2794 "193\n",
2795 "191\n",
2796 "187\n",
2797 "180\n",
2798 "169\n",
2799 "157\n",
2800 "154\n",
2801 "151\n",
2802 "145\n",
2803 "143\n",
2804 "115\n",
2805 "101\n",
2806 "95\n",
2807 "92\n",
2808 "88\n",
2809 "85\n",
2810 "79\n",
2811 "75\n",
2812 "72\n",
2813 "68\n",
2814 "65\n",
2815 "63\n",
2816 "58\n",
2817 "57\n",
2818 "55\n",
2819 "44\n",
2820 "43\n",
2821 "42\n",
2822 "39\n",
2823 "38\n",
2824 "29\n",
2825 "28\n",
2826 "24\n",
2827 "22\n",
2828 "20\n",
2829 "14\n",
2830 "10\n",
2831 "9\n",
2832 "8\n",
2833 "6\n",
2834 "RFFRRFFFRFFRFLLRFLFFLLLLFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLRRLRRRRFFFFFFRRRLLFFFFFFLRRRLLLRLLLLRFRLRFRRRFRLRLLRFRLFLLRFRFLRRRRLRFLLRLRRLFFFRLRRFFRFLRFLLFLFRLRLRLRRRLFFRLRRFFRRFFLLRLLFLLLFRFRFLRLFFLFRRRRLRRLRRLRFRRLRRRFRRRRLLRFLLRRFFRLRFFLFLFRRLLLRLFFFRFRLRLLFRRFLLRLFFFLLRLLRRLRFRFFFFFRRFFLFRFLRFRFLFLFRLFLFLRFFLFRLRRRLRRRRFFFRFLLRLFRFRRRLRFFFFFLLFRRLFRRFRFRFLRLLFRFFFLLRRFRRRRLFFFLFLLLFFLRRLRFLFLFFRLLFFRRFFLRLLRFLRLLFLFRLLLRFFFFFFFFLFLRLLRLRLRFLLFFFLFLFFLFRRRRRFFRLLFFFRLFFLFRLFFRFFFFRLRRRLLFLRRFLRFFLRRFRRFLRFLRRLFRRLFFFFRLFLFFLRFFFFFRLFLFLRFFFLLLFLLLFFLRRLFLFRRFRRFFRRRFFRFLFLLFLFRFRFLLLRRRLFRRFFRLRFLFLFLRRLFFFLFRLRFRFFRFLRRFFFFFLFRLRRFRLLRLLFFLLLFFLFFFRLFRFRRRRLFLFLLLLRLFRFRLRLLFLFLLLRRRLLLFRRFRLRFFRRRLLLFRLRLLFFLLRFFFFRLLRLRLLLRLFFFRRLRFRFFRRRFFFRFFFFLRFLFRFLRFRRLLLRLLFRRLFFLRRFFFRLLFRLFLRRFLRLLRRFFLLFLLLFFFFRRFFRLFFLLFLLFRFRLRFLRFFRFRLRLLLFFFLFLRFRFRFLRRLLLLLRFRRLFLLLLRRFFFLLRFLFFRLLLLFLFRLRFFFFFLRLLFFLLLFFLLRRFLRRFLRLRRLLLRRRRRLLLFLRRLFFFRFLRRLF\n",
2835 "LFFFFRFFRFLRFFFFLFFFRLFFLFLRFRFFFFLFFFRRFLLFFRFFLFFRFFFFFFFFFFFFFRFRFLFFRFFFLFFFLFLFRFFFFFRLFRFFFFFFFFFLFFFFFFLFRLFFFLRLRFFRFLFFRFFFLFFLRFFFRLFLFFFFFRFLRFFFLRLRFFRLRRFFLLRRLFFFLFFFFFLFFLFRFFRLFRFFRFFFFFLFFRLFFLRFRFFFFRFFFFLFLRFFLFRFRFLLFRFFFLRFRFFLLFRFLFRRFLFFLFFFFFRRLFLRFFFFFFFLFRRLFLLRFFFFFFFRLLFFRLFRFFFRFFFFRRLLFFLFFFFFFFFRFFFRFFFLFFLFFFFFFFFFRFFFLFFFFFLFFFFFFFFRLFLRFRFLRFFFFRLLFFRFFFFFFFFFFFFFFFFLFFLRFFLRFFLFRFLRFLRFFFFFRFFFFFLFFLRFFLFRFFRFLFLRFLRFLFRFRRLFLRLFRFFRFFLFLFRFFFFRFFFLFRFLRFFFFLRLFLFRFLLFRFFRFFFFRRLLFLRFFFFFRFFLFFFRFLFLFFFFFRRFLLFRLRLFFLFFFFFFFFRRLFFFFRFFFFFLRFRLFFFLFFFFFFFFFLFFFFFLFFFFRLRFFFFFFFFFFRFFFFFRFFFFLFFFRFFFFFFRLFFRFLFFLFLRFFFLFFRFFLFLRFLFFRRFLRFFRFFLFRLFRLFLFFFFFRLRLFRFFFFFFFLFRFFLFFFFFFRFFFFFFFFLRFLLRFLFFFFFRRLFFFFFFRFFLFLFRFFFFFLRFFLRFRLFFRFFLFRRFFFLFFFRFFFRFLFFFLFFFFFLFFFRRLFFFFFFLFRRLFFFLFFFFFRLRFFLFRFFLRFFFFRFLLFFRFFFFRFRFFFLFLFFFFFFLFFFFLFRLRLLRFFFFFFFFFRRFFFFFLFFFRFFLLFFFFRFFFFLFLRFFRFFFFFFFFFFFFFFFFRRFLRLRLFLFFFRFFFFRLRFLLRRFLFLRFLFFRLFFFFFFLFLFFFFRFFFFRFFFFLFRRFLFFFFRLLFFFFFLFLFFFRFRFRLFLFFFRRLFRFRLFFFLFRFRFLRLFFFFLFRLFFRFLFFFFFFFFFFLLFRLFRFFFRFFFFFFRFRLFFFLFFFFFFFFFFFFFFFFRRFFLFFFLFFFRRLFFRFLFFFLFFFLRFFLRRFLFRLRRFFFLLFFFFFRFRFFFFFFFLFRFFFLFRRFLFFLRFLFFFLFFRLFFFFFFRRLRLFFLRL\n",
2836 "Step(x=0, y=0, dir=<Direction.RIGHT: 2>)\n"
2837 ]
2838 },
2839 {
2840 "data": {
2841 "image/png": "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\ny70FIvK9iGwTEW125yUVFRXBFiEkmTt3Lrm5uWRmZpKVlUWHDh24+eabde+iifBkVu0l4GnAdUfP\ndGCtUmqeiEzDHr19uoiMBDorpbqKyCDgBWCwv4UOd0REW3nWQVJSErGxsWzatCnYorRIvIreDowG\nnAErX3FcO9NfdTz3JZAkIhn+EbX5MHz4cGNjVNu2bY3zjIwM47y+rdd6SFI35eXllJaWBqz8Hj16\nGP+jtLQ0RITVq1cHpK6cnBxj05yzzvPOOy+g7fMVb9ftWiul8gCUUsdFpLUjva7o7Xnei9j8WLt2\nLf3796d169akpqZSWFiIzWYjLS2NM2fOkJ+fzyeffFJvGdofhnucX6bly5dTXV3NL37xC2JjY+vM\nf/ToUdavX09ERASpqalceeWVxr2qqiree+89bDYb5eXlREdHs3fvXkaOHInVaiUtLY1ly5Yxd+5c\nRowY4bPsx44dY926dcbu2pdffhmAK6+8klOnThEREcHq1avZs2cP/fv397m+QODvhf5GRW8P52DM\n8+bNq/FyuvLll18yeHD9IzVtxeieiRMn8vbbb3PzzTcDkJqaSkFBQZ35e/fuzalTp4zrZ599lrvu\nuguABx98kAULFtTIb7FYeP/99zGZ7J3vd955x28Tq3369KnlRe2iiy5i2bJlxrWzp+FP/BmMuU6v\n1a4H0BHY4XK9G8hwnLcBdjvOXwDGuOTb48znpkwVrgBq7dq1dd7/4osvVH3tx65k1Z133hkI8cKG\na6+9VgEqIyNDVVZWGul/+tOfjM8QUBMmTFBK2T/Xxx57zMg3atSoev8PSimVmJiobrjhhkbLVlVV\npRITE2vIAaixY8fW+xygvv7660bX1xgcbfbou3/u4WkPQ6jZe3gXuB34m+PvKpf0u4E3RWQwcFo5\nhi7NmcOHD7N48eIafheioqKw2WxUVlZisVgwmUxUVlby29/+FqDenaY2m63e+r744gvGjBnDiy++\nyAsvvODXtoQTr732Go8++ijz589n7969LF++nKioKObNm0dqaip33HEHMTExPPzww8YzH330kf3F\nj4xk9+7dDdZx5swZr3yrlpSUcObMGaZMmYLNZiMuLo6oqCiP9gc19H4ElYY0CvA6cBSoAA4DE4EU\nYC2wF1gDJLvkfwbYD2wH+tdTbkC1qD/p2bNnrV+Khg5fehhKKTV27FgVHx/v76aEJYDq06ePAlRk\n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\nDI1G4zH/D8E8vVutsQ6KAAAAAElFTkSuQmCC\n",
2842 "text/plain": [
2843 "<matplotlib.figure.Figure at 0x7f10540d85c0>"
2844 ]
2845 },
2846 "metadata": {},
2847 "output_type": "display_data"
2848 }
2849 ],
2850 "source": [
2851 "w_tour = rw\n",
2852 "w_trace = trace_tour(w_tour)\n",
2853 "mks = mistake_positions(w_trace)\n",
2854 "while len(mks) > 3:\n",
2855 " print(len(mks))\n",
2856 " w_tour = trim_loop(w_tour)\n",
2857 " w_trace = trace_tour(w_tour)\n",
2858 " mks = mistake_positions(w_trace)\n",
2859 "print('{}\\n{}\\n{}'.format(w_tour_start, w_tour, trace_tour(w_tour)[-1]))\n",
2860 "plot_trace(trace_tour(w_tour))"
2861 ]
2862 },
2863 {
2864 "cell_type": "code",
2865 "execution_count": 110,
2866 "metadata": {},
2867 "outputs": [
2868 {
2869 "data": {
2870 "text/plain": [
2871 "[Mistake(i=1219, step=Step(x=0, y=5, dir=<Direction.DOWN: 3>))]"
2872 ]
2873 },
2874 "execution_count": 110,
2875 "metadata": {},
2876 "output_type": "execute_result"
2877 }
2878 ],
2879 "source": [
2880 "mks"
2881 ]
2882 },
2883 {
2884 "cell_type": "code",
2885 "execution_count": 111,
2886 "metadata": {},
2887 "outputs": [
2888 {
2889 "data": {
2890 "text/plain": [
2891 "'LFFFFLLRLFFLRL'"
2892 ]
2893 },
2894 "execution_count": 111,
2895 "metadata": {},
2896 "output_type": "execute_result"
2897 }
2898 ],
2899 "source": [
2900 "trim_loop(w_tour)"
2901 ]
2902 },
2903 {
2904 "cell_type": "code",
2905 "execution_count": 112,
2906 "metadata": {},
2907 "outputs": [
2908 {
2909 "data": {
2910 "image/png": "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\nRK5CYII=\n",
2911 "text/plain": [
2912 "<matplotlib.figure.Figure at 0x7f1033a4ae10>"
2913 ]
2914 },
2915 "metadata": {},
2916 "output_type": "display_data"
2917 }
2918 ],
2919 "source": [
2920 "lc = trace_tour(square_tour(a=10))\n",
2921 "rw = guided_walk(lc, wander_limit=4, locus_limit=2)\n",
2922 "plot_trace(trace_tour(rw))"
2923 ]
2924 },
2925 {
2926 "cell_type": "code",
2927 "execution_count": 113,
2928 "metadata": {},
2929 "outputs": [
2930 {
2931 "data": {
2932 "text/plain": [
2933 "(326,\n",
2934 " 80,\n",
2935 " 'RFLLRFFLFRFFLFFFRFLFRFFLRLLFLRRFFFFFLFFFFFLFRFRLFLRFFRLLFFLFFFRFFFRFFLFFRLFLRLFF',\n",
2936 " [Step(x=-1, y=0, dir=<Direction.RIGHT: 2>),\n",
2937 " Step(x=0, y=0, dir=<Direction.RIGHT: 2>)])"
2938 ]
2939 },
2940 "execution_count": 113,
2941 "metadata": {},
2942 "output_type": "execute_result"
2943 },
2944 {
2945 "data": {
2946 "image/png": "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\nRU5ErkJggg==\n",
2947 "text/plain": [
2948 "<matplotlib.figure.Figure at 0x7f10345d82e8>"
2949 ]
2950 },
2951 "metadata": {},
2952 "output_type": "display_data"
2953 }
2954 ],
2955 "source": [
2956 "rw_trimmed = trim_all_loops(rw)\n",
2957 "plot_trace(trace_tour(rw_trimmed))\n",
2958 "len(rw), len(rw_trimmed), rw_trimmed, trace_tour(rw_trimmed)[-2:]"
2959 ]
2960 },
2961 {
2962 "cell_type": "code",
2963 "execution_count": 114,
2964 "metadata": {},
2965 "outputs": [
2966 {
2967 "data": {
2968 "text/plain": [
2969 "(1, Step(x=0, y=0, dir=<Direction.RIGHT: 2>))"
2970 ]
2971 },
2972 "execution_count": 114,
2973 "metadata": {},
2974 "output_type": "execute_result"
2975 },
2976 {
2977 "data": {
2978 "image/png": "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\n",
2979 "text/plain": [
2980 "<matplotlib.figure.Figure at 0x7f1033d95908>"
2981 ]
2982 },
2983 "metadata": {},
2984 "output_type": "display_data"
2985 }
2986 ],
2987 "source": [
2988 "rw_trimmed = rw\n",
2989 "mks = len(mistake_positions(trace_tour(rw_trimmed)))\n",
2990 "while mks >= 4:\n",
2991 " rw_trimmed = trim_loop(rw_trimmed, random_mistake=True)\n",
2992 " mks = len(mistake_positions(trace_tour(rw_trimmed)))\n",
2993 " \n",
2994 "# rw_trimmed = trim_all_loops(rw)\n",
2995 "plot_trace(trace_tour(rw_trimmed))\n",
2996 "mks, trace_tour(rw_trimmed)[-1]"
2997 ]
2998 },
2999 {
3000 "cell_type": "code",
3001 "execution_count": 132,
3002 "metadata": {
3003 "collapsed": true
3004 },
3005 "outputs": [],
3006 "source": [
3007 "def trim_some_mistakes(tour, mistake_limit):\n",
3008 " trimmed_tour = rw\n",
3009 " mistake_count = len(mistake_positions(trace_tour(trimmed_tour)))\n",
3010 " while len(mistake_positions(trace_tour(trimmed_tour))) > mistake_limit:\n",
3011 " trimmed_tour = trim_loop(trimmed_tour, random_mistake=True)\n",
3012 " return trimmed_tour"
3013 ]
3014 },
3015 {
3016 "cell_type": "code",
3017 "execution_count": 116,
3018 "metadata": {},
3019 "outputs": [
3020 {
3021 "data": {
3022 "text/plain": [
3023 "(3, Step(x=0, y=0, dir=<Direction.RIGHT: 2>))"
3024 ]
3025 },
3026 "execution_count": 116,
3027 "metadata": {},
3028 "output_type": "execute_result"
3029 },
3030 {
3031 "data": {
3032 "image/png": "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\ni19zoDMAAAAASUVORK5CYII=\n",
3033 "text/plain": [
3034 "<matplotlib.figure.Figure at 0x7f1034745a20>"
3035 ]
3036 },
3037 "metadata": {},
3038 "output_type": "display_data"
3039 }
3040 ],
3041 "source": [
3042 "rw_trimmed = trim_some_mistakes(rw, 4)\n",
3043 "\n",
3044 "plot_trace(trace_tour(rw_trimmed))\n",
3045 "len(mistake_positions(trace_tour(rw_trimmed))), trace_tour(rw_trimmed)[-1]"
3046 ]
3047 },
3048 {
3049 "cell_type": "code",
3050 "execution_count": 117,
3051 "metadata": {
3052 "collapsed": true
3053 },
3054 "outputs": [],
3055 "source": [
3056 "# patterns = [square_tour, cross_tour, quincunx_tour, heart_tour_func]\n",
3057 "# tours_filename = 'tours-with-mistakes.txt'\n",
3058 "\n",
3059 "# try:\n",
3060 "# os.remove(tours_filename)\n",
3061 "# except OSError:\n",
3062 "# pass\n",
3063 "\n",
3064 "# success_count = 0\n",
3065 "# while success_count < 100:\n",
3066 "# lc = trace_tour(random.choice(patterns)())\n",
3067 "# rw = guided_walk(lc)\n",
3068 "# if rw:\n",
3069 "# rw_trimmed = trim_some_mistakes(rw, random.randint(0, 15) + random.randint(1, 3))\n",
3070 "# if len(rw_trimmed) > 10:\n",
3071 "# with open(tours_filename, 'a') as f:\n",
3072 "# f.write(rw_trimmed + '\\n')\n",
3073 "# success_count += 1"
3074 ]
3075 },
3076 {
3077 "cell_type": "code",
3078 "execution_count": 138,
3079 "metadata": {},
3080 "outputs": [
3081 {
3082 "data": {
3083 "image/png": "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\nlqVxt930NPWIREPDG4SGhjJq1CjKysrcxps4cSIffPAB/fv3Jzc3l7CwMAoKCvDz86OqqorKykrA\nquFnMpk4fvy4/B0REUFoaKjUDvzvf/8LIOOosgNPVNtbTMPXDGdq+CIxMTH07NmT0tJS1q1bx5df\nfulRumeffZbKykry8vIoLi7m5MmT5OTk2L04VDNfer0ei8VCbm4uhYWFVFRU8Pzzz0vHHbXp06dP\nndf36aH+Sy+9JIctmnBPwxdRFEUq2SiKUq8O6uWXX+aWW25h2bJl6HQ6FEXhm2++YevWrQwePBiw\ndnxRUVF89tlnDm2g9rLdpEmTWL58OWlpaXVe22cb/ueff87MmTMBq0cSbcivcbFhNBoZOnQoJ06c\ncDi3ZcsWu9833XQTX3zxhcu82rdvz/LlywGYNm1andf22YafnZ0NWN94paWl5OXlYTAYiIyMvMAl\n09BwTWFhIadOncLf35+amhrZSxcWFmIymezW+8+cOcOJEydITEzkyy+/pLKyku+//57p06eTnZ1N\n69atWbt2LTfeeCPZ2dnk5ORQU1ODn58fFouFgoICed36Ot702eW8N954g8mTJ8sbVfnuu++48sor\nvVlEDQ2vEBAQIOflzYmr9tUi9+ObzWZphEP9DdaNCRoavoi6ScdisciNNxaLRergCyFkvVbj2MZV\nz7mKUztf9bMh+GzDVxu87SYd2+MaGr6GMy2+2lZza6/728atrdlXO07tfGsfqw8+24rUBl9bgUdb\n1tNoafiiRyefbfi11+/VT026r9HS8EXrUT7b8Gv3+Oqn1vA1Whq+WGd9tuHXfkt27twZ4IJITTU0\nPOG1116jS5cudO/e3c7NljpN7dKlC4899phvvAhc2eRSA5AEbAJ+A3YD084djwA2AAeA9UC4i/R1\n2gZzxuLFi6VdsW7duknbY2PHjm1QfhoaTQ029vJuvvlmeby0tFTodDq3DjWaqjzCRbv2RIGnBnhY\nCPGroighwM+KomwAJgFfCyHmK4ryOPAk8IQ3Xka2vPrqq1x99dV07dqVjz/+2DfelhqXLDU1Nbzz\nzjuUl5djNBqpqamRyjoA//znP7n99tvtevzg4GC5KqUoik+sTNXZ8IUQp4HT576XKoqyD+so4GZg\nyLlo7wCb8WLDV3WVa9sO+8Mf/uCtS2ho1JuePXuyZ88eu2PqdliAQYMGERkZSWJiokNaW0H1hd5m\n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\nA8MAAAAASUVORK5CYII=\n",
3084 "text/plain": [
3085 "<matplotlib.figure.Figure at 0x7f10348f8470>"
3086 ]
3087 },
3088 "metadata": {},
3089 "output_type": "display_data"
3090 }
3091 ],
3092 "source": [
3093 "lc = trace_tour(square_tour())\n",
3094 "rw = guided_walk(lc, seek_step_limit=0, return_anyway=True)\n",
3095 "plot_trace(trace_tour(rw))"
3096 ]
3097 },
3098 {
3099 "cell_type": "code",
3100 "execution_count": 139,
3101 "metadata": {},
3102 "outputs": [
3103 {
3104 "data": {
3105 "image/png": "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\n",
3106 "text/plain": [
3107 "<matplotlib.figure.Figure at 0x7f10341ba780>"
3108 ]
3109 },
3110 "metadata": {},
3111 "output_type": "display_data"
3112 }
3113 ],
3114 "source": [
3115 "rw_trimmed = trim_some_mistakes(rw, 1)\n",
3116 "plot_trace(trace_tour(rw_trimmed))"
3117 ]
3118 },
3119 {
3120 "cell_type": "code",
3121 "execution_count": 140,
3122 "metadata": {},
3123 "outputs": [
3124 {
3125 "data": {
3126 "text/plain": [
3127 "[Mistake(i=702, step=Step(x=-1, y=1, dir=<Direction.RIGHT: 2>))]"
3128 ]
3129 },
3130 "execution_count": 140,
3131 "metadata": {},
3132 "output_type": "execute_result"
3133 }
3134 ],
3135 "source": [
3136 "mistake_positions(trace_tour(rw_trimmed))"
3137 ]
3138 },
3139 {
3140 "cell_type": "code",
3141 "execution_count": 141,
3142 "metadata": {
3143 "collapsed": true
3144 },
3145 "outputs": [],
3146 "source": [
3147 "patterns = [square_tour, cross_tour, quincunx_tour, heart_tour_func]\n",
3148 "tours_filename = 'tours-open.txt'\n",
3149 "\n",
3150 "try:\n",
3151 " os.remove(tours_filename)\n",
3152 "except OSError:\n",
3153 " pass\n",
3154 "\n",
3155 "success_count = 0\n",
3156 "while success_count < 100:\n",
3157 " lc = trace_tour(random.choice(patterns)())\n",
3158 " rw = guided_walk(lc, seek_step_limit=0, return_anyway=True)\n",
3159 " if rw:\n",
3160 " rw_trimmed = trim_some_mistakes(rw, random.randint(0, 15) + random.randint(1, 3))\n",
3161 " if len(rw_trimmed) > 10:\n",
3162 " with open(tours_filename, 'a') as f:\n",
3163 " f.write(rw_trimmed + '\\n')\n",
3164 " success_count += 1"
3165 ]
3166 },
3167 {
3168 "cell_type": "code",
3169 "execution_count": null,
3170 "metadata": {
3171 "collapsed": true
3172 },
3173 "outputs": [],
3174 "source": []
3175 }
3176 ],
3177 "metadata": {
3178 "kernelspec": {
3179 "display_name": "Python 3",
3180 "language": "python",
3181 "name": "python3"
3182 },
3183 "language_info": {
3184 "codemirror_mode": {
3185 "name": "ipython",
3186 "version": 3
3187 },
3188 "file_extension": ".py",
3189 "mimetype": "text/x-python",
3190 "name": "python",
3191 "nbconvert_exporter": "python",
3192 "pygments_lexer": "ipython3",
3193 "version": "3.5.2+"
3194 }
3195 },
3196 "nbformat": 4,
3197 "nbformat_minor": 2
3198 }