Removing files from data analysis directory
[ou-summer-of-code-2017.git] / 06-tour-shapes / tour-shapes-build-raw-tours.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": 1,
15 "metadata": {
16 "collapsed": true
17 },
18 "outputs": [],
19 "source": [
20 "import collections\n",
21 "import enum\n",
22 "import random\n",
23 "import os\n",
24 "\n",
25 "import matplotlib.pyplot as plt\n",
26 "%matplotlib inline\n"
27 ]
28 },
29 {
30 "cell_type": "code",
31 "execution_count": 2,
32 "metadata": {
33 "collapsed": true
34 },
35 "outputs": [],
36 "source": [
37 "class Direction(enum.Enum):\n",
38 " UP = 1\n",
39 " RIGHT = 2\n",
40 " DOWN = 3\n",
41 " LEFT = 4\n",
42 " \n",
43 "turn_lefts = {Direction.UP: Direction.LEFT, Direction.LEFT: Direction.DOWN,\n",
44 " Direction.DOWN: Direction.RIGHT, Direction.RIGHT: Direction.UP}\n",
45 "\n",
46 "turn_rights = {Direction.UP: Direction.RIGHT, Direction.RIGHT: Direction.DOWN,\n",
47 " Direction.DOWN: Direction.LEFT, Direction.LEFT: Direction.UP}\n",
48 "\n",
49 "def turn_left(d):\n",
50 " return turn_lefts[d]\n",
51 "\n",
52 "def turn_right(d):\n",
53 " return turn_rights[d]\n"
54 ]
55 },
56 {
57 "cell_type": "code",
58 "execution_count": 3,
59 "metadata": {
60 "collapsed": true
61 },
62 "outputs": [],
63 "source": [
64 "Step = collections.namedtuple('Step', ['x', 'y', 'dir'])\n",
65 "Mistake = collections.namedtuple('Mistake', ['i', 'step'])"
66 ]
67 },
68 {
69 "cell_type": "code",
70 "execution_count": 4,
71 "metadata": {
72 "collapsed": true
73 },
74 "outputs": [],
75 "source": [
76 "def advance(step, d):\n",
77 " if d == Direction.UP:\n",
78 " return Step(step.x, step.y+1, d)\n",
79 " elif d == Direction.DOWN:\n",
80 " return Step(step.x, step.y-1, d)\n",
81 " elif d == Direction.LEFT:\n",
82 " return Step(step.x-1, step.y, d)\n",
83 " elif d == Direction.RIGHT:\n",
84 " return Step(step.x+1, step.y, d)"
85 ]
86 },
87 {
88 "cell_type": "code",
89 "execution_count": 5,
90 "metadata": {
91 "collapsed": true
92 },
93 "outputs": [],
94 "source": [
95 "def step(s, current):\n",
96 " if s == 'F':\n",
97 " return advance(current, current.dir)\n",
98 " elif s == 'L':\n",
99 " return advance(current, turn_left(current.dir))\n",
100 " elif s == 'R':\n",
101 " return advance(current, turn_right(current.dir))\n",
102 " else:\n",
103 " raise ValueError"
104 ]
105 },
106 {
107 "cell_type": "code",
108 "execution_count": 6,
109 "metadata": {
110 "collapsed": true
111 },
112 "outputs": [],
113 "source": [
114 "def trace_tour(tour, startx=0, starty=0, startdir=Direction.RIGHT):\n",
115 " current = Step(startx, starty, startdir)\n",
116 " trace = [current]\n",
117 " for s in tour:\n",
118 " current = step(s, current)\n",
119 " trace += [current]\n",
120 " return trace "
121 ]
122 },
123 {
124 "cell_type": "code",
125 "execution_count": 6,
126 "metadata": {
127 "collapsed": true
128 },
129 "outputs": [],
130 "source": [
131 "# def trace_tour(tour, startx=0, starty=0, startdir=Direction.RIGHT):\n",
132 "# current = Step(startx, starty, startdir)\n",
133 "# trace = [current]\n",
134 "# for s in tour:\n",
135 "# if s == 'F':\n",
136 "# current = advance(current, current.dir)\n",
137 "# elif s == 'L':\n",
138 "# current = advance(current, turn_left(current.dir))\n",
139 "# elif s == 'R':\n",
140 "# current = advance(current, turn_right(current.dir))\n",
141 "# trace += [current]\n",
142 "# return trace "
143 ]
144 },
145 {
146 "cell_type": "code",
147 "execution_count": 7,
148 "metadata": {
149 "collapsed": true
150 },
151 "outputs": [],
152 "source": [
153 "k = Step(1, 2, 3)"
154 ]
155 },
156 {
157 "cell_type": "code",
158 "execution_count": 8,
159 "metadata": {},
160 "outputs": [
161 {
162 "data": {
163 "text/plain": [
164 "Step(x=1, y=2, dir=3)"
165 ]
166 },
167 "execution_count": 8,
168 "metadata": {},
169 "output_type": "execute_result"
170 }
171 ],
172 "source": [
173 "k"
174 ]
175 },
176 {
177 "cell_type": "code",
178 "execution_count": 9,
179 "metadata": {},
180 "outputs": [
181 {
182 "data": {
183 "text/plain": [
184 "__main__.Step"
185 ]
186 },
187 "execution_count": 9,
188 "metadata": {},
189 "output_type": "execute_result"
190 }
191 ],
192 "source": [
193 "Step"
194 ]
195 },
196 {
197 "cell_type": "code",
198 "execution_count": 10,
199 "metadata": {},
200 "outputs": [
201 {
202 "data": {
203 "text/plain": [
204 "<Direction.UP: 1>"
205 ]
206 },
207 "execution_count": 10,
208 "metadata": {},
209 "output_type": "execute_result"
210 }
211 ],
212 "source": [
213 "d = Direction.UP\n",
214 "d"
215 ]
216 },
217 {
218 "cell_type": "code",
219 "execution_count": 11,
220 "metadata": {},
221 "outputs": [
222 {
223 "data": {
224 "text/plain": [
225 "<Direction.RIGHT: 2>"
226 ]
227 },
228 "execution_count": 11,
229 "metadata": {},
230 "output_type": "execute_result"
231 }
232 ],
233 "source": [
234 "turn_right(d)"
235 ]
236 },
237 {
238 "cell_type": "code",
239 "execution_count": 12,
240 "metadata": {},
241 "outputs": [
242 {
243 "data": {
244 "text/plain": [
245 "{<Direction.RIGHT: 2>: <Direction.DOWN: 3>,\n",
246 " <Direction.UP: 1>: <Direction.RIGHT: 2>,\n",
247 " <Direction.LEFT: 4>: <Direction.UP: 1>,\n",
248 " <Direction.DOWN: 3>: <Direction.LEFT: 4>}"
249 ]
250 },
251 "execution_count": 12,
252 "metadata": {},
253 "output_type": "execute_result"
254 }
255 ],
256 "source": [
257 "turn_rights"
258 ]
259 },
260 {
261 "cell_type": "code",
262 "execution_count": 13,
263 "metadata": {},
264 "outputs": [
265 {
266 "data": {
267 "text/plain": [
268 "[Step(x=0, y=0, dir=<Direction.RIGHT: 2>),\n",
269 " Step(x=1, y=0, dir=<Direction.RIGHT: 2>),\n",
270 " Step(x=1, y=1, dir=<Direction.UP: 1>),\n",
271 " Step(x=2, y=1, dir=<Direction.RIGHT: 2>),\n",
272 " Step(x=2, y=2, dir=<Direction.UP: 1>)]"
273 ]
274 },
275 "execution_count": 13,
276 "metadata": {},
277 "output_type": "execute_result"
278 }
279 ],
280 "source": [
281 "trace_tour('FLRL')"
282 ]
283 },
284 {
285 "cell_type": "code",
286 "execution_count": 14,
287 "metadata": {},
288 "outputs": [
289 {
290 "data": {
291 "text/plain": [
292 "[Step(x=0, y=0, dir=<Direction.RIGHT: 2>),\n",
293 " Step(x=1, y=0, dir=<Direction.RIGHT: 2>),\n",
294 " Step(x=2, y=0, dir=<Direction.RIGHT: 2>),\n",
295 " Step(x=2, y=1, dir=<Direction.UP: 1>),\n",
296 " Step(x=3, y=1, dir=<Direction.RIGHT: 2>),\n",
297 " Step(x=3, y=2, dir=<Direction.UP: 1>),\n",
298 " Step(x=2, y=2, dir=<Direction.LEFT: 4>),\n",
299 " Step(x=1, y=2, dir=<Direction.LEFT: 4>),\n",
300 " Step(x=1, y=1, dir=<Direction.DOWN: 3>),\n",
301 " Step(x=0, y=1, dir=<Direction.LEFT: 4>),\n",
302 " Step(x=0, y=0, dir=<Direction.DOWN: 3>)]"
303 ]
304 },
305 "execution_count": 14,
306 "metadata": {},
307 "output_type": "execute_result"
308 }
309 ],
310 "source": [
311 "trace_tour('FFLRLLFLRL')"
312 ]
313 },
314 {
315 "cell_type": "code",
316 "execution_count": 15,
317 "metadata": {},
318 "outputs": [
319 {
320 "data": {
321 "text/plain": [
322 "[Step(x=0, y=0, dir=<Direction.RIGHT: 2>),\n",
323 " Step(x=1, y=0, dir=<Direction.RIGHT: 2>),\n",
324 " Step(x=1, y=1, dir=<Direction.UP: 1>),\n",
325 " Step(x=0, y=1, dir=<Direction.LEFT: 4>),\n",
326 " Step(x=-1, y=1, dir=<Direction.LEFT: 4>),\n",
327 " Step(x=-2, y=1, dir=<Direction.LEFT: 4>),\n",
328 " Step(x=-2, y=0, dir=<Direction.DOWN: 3>),\n",
329 " Step(x=-2, y=-1, dir=<Direction.DOWN: 3>),\n",
330 " Step(x=-2, y=-2, dir=<Direction.DOWN: 3>),\n",
331 " Step(x=-2, y=-3, dir=<Direction.DOWN: 3>),\n",
332 " Step(x=-1, y=-3, dir=<Direction.RIGHT: 2>),\n",
333 " Step(x=0, y=-3, dir=<Direction.RIGHT: 2>),\n",
334 " Step(x=1, y=-3, dir=<Direction.RIGHT: 2>),\n",
335 " Step(x=1, y=-2, dir=<Direction.UP: 1>),\n",
336 " Step(x=1, y=-1, dir=<Direction.UP: 1>),\n",
337 " Step(x=0, y=-1, dir=<Direction.LEFT: 4>),\n",
338 " Step(x=0, y=-2, dir=<Direction.DOWN: 3>),\n",
339 " Step(x=-1, y=-2, dir=<Direction.LEFT: 4>),\n",
340 " Step(x=-1, y=-1, dir=<Direction.UP: 1>),\n",
341 " Step(x=-1, y=0, dir=<Direction.UP: 1>),\n",
342 " Step(x=0, y=0, dir=<Direction.RIGHT: 2>)]"
343 ]
344 },
345 "execution_count": 15,
346 "metadata": {},
347 "output_type": "execute_result"
348 }
349 ],
350 "source": [
351 "trace_tour('FLLFFLFFFLFFLFLLRRFR')"
352 ]
353 },
354 {
355 "cell_type": "code",
356 "execution_count": 16,
357 "metadata": {},
358 "outputs": [
359 {
360 "data": {
361 "text/plain": [
362 "[Step(x=0, y=0, dir=<Direction.RIGHT: 2>),\n",
363 " Step(x=1, y=0, dir=<Direction.RIGHT: 2>),\n",
364 " Step(x=2, y=0, dir=<Direction.RIGHT: 2>),\n",
365 " Step(x=2, y=-1, dir=<Direction.DOWN: 3>),\n",
366 " Step(x=3, y=-1, dir=<Direction.RIGHT: 2>),\n",
367 " Step(x=3, y=0, dir=<Direction.UP: 1>),\n",
368 " Step(x=3, y=1, dir=<Direction.UP: 1>),\n",
369 " Step(x=4, y=1, dir=<Direction.RIGHT: 2>),\n",
370 " Step(x=4, y=2, dir=<Direction.UP: 1>),\n",
371 " Step(x=3, y=2, dir=<Direction.LEFT: 4>),\n",
372 " Step(x=2, y=2, dir=<Direction.LEFT: 4>),\n",
373 " Step(x=1, y=2, dir=<Direction.LEFT: 4>),\n",
374 " Step(x=0, y=2, dir=<Direction.LEFT: 4>),\n",
375 " Step(x=0, y=3, dir=<Direction.UP: 1>),\n",
376 " Step(x=0, y=4, dir=<Direction.UP: 1>),\n",
377 " Step(x=-1, y=4, dir=<Direction.LEFT: 4>),\n",
378 " Step(x=-1, y=3, dir=<Direction.DOWN: 3>),\n",
379 " Step(x=-2, y=3, dir=<Direction.LEFT: 4>),\n",
380 " Step(x=-2, y=2, dir=<Direction.DOWN: 3>),\n",
381 " Step(x=-1, y=2, dir=<Direction.RIGHT: 2>),\n",
382 " Step(x=-1, y=1, dir=<Direction.DOWN: 3>),\n",
383 " Step(x=-2, y=1, dir=<Direction.LEFT: 4>),\n",
384 " Step(x=-2, y=0, dir=<Direction.DOWN: 3>),\n",
385 " Step(x=-1, y=0, dir=<Direction.RIGHT: 2>),\n",
386 " Step(x=-1, y=-1, dir=<Direction.DOWN: 3>),\n",
387 " Step(x=0, y=-1, dir=<Direction.RIGHT: 2>),\n",
388 " Step(x=0, y=0, dir=<Direction.UP: 1>)]"
389 ]
390 },
391 "execution_count": 16,
392 "metadata": {},
393 "output_type": "execute_result"
394 }
395 ],
396 "source": [
397 "trace_tour('FFRLLFRLLFFFRFLLRLLRRLLRLL')"
398 ]
399 },
400 {
401 "cell_type": "code",
402 "execution_count": 17,
403 "metadata": {
404 "collapsed": true
405 },
406 "outputs": [],
407 "source": [
408 "def positions(trace):\n",
409 " return [(s.x, s.y) for s in trace]"
410 ]
411 },
412 {
413 "cell_type": "code",
414 "execution_count": 18,
415 "metadata": {},
416 "outputs": [
417 {
418 "data": {
419 "text/plain": [
420 "[(0, 0),\n",
421 " (1, 0),\n",
422 " (2, 0),\n",
423 " (2, -1),\n",
424 " (3, -1),\n",
425 " (3, 0),\n",
426 " (3, 1),\n",
427 " (4, 1),\n",
428 " (4, 2),\n",
429 " (3, 2),\n",
430 " (2, 2),\n",
431 " (1, 2),\n",
432 " (0, 2),\n",
433 " (0, 3),\n",
434 " (0, 4),\n",
435 " (-1, 4),\n",
436 " (-1, 3),\n",
437 " (-2, 3),\n",
438 " (-2, 2),\n",
439 " (-1, 2),\n",
440 " (-1, 1),\n",
441 " (-2, 1),\n",
442 " (-2, 0),\n",
443 " (-1, 0),\n",
444 " (-1, -1),\n",
445 " (0, -1),\n",
446 " (0, 0)]"
447 ]
448 },
449 "execution_count": 18,
450 "metadata": {},
451 "output_type": "execute_result"
452 }
453 ],
454 "source": [
455 "positions(trace_tour('FFRLLFRLLFFFRFLLRLLRRLLRLL'))"
456 ]
457 },
458 {
459 "cell_type": "code",
460 "execution_count": 19,
461 "metadata": {
462 "collapsed": true
463 },
464 "outputs": [],
465 "source": [
466 "def valid(trace):\n",
467 " return (trace[-1].x == 0 \n",
468 " and trace[-1].y == 0 \n",
469 " and len(set(positions(trace))) + 1 == len(trace))"
470 ]
471 },
472 {
473 "cell_type": "code",
474 "execution_count": 20,
475 "metadata": {},
476 "outputs": [
477 {
478 "data": {
479 "text/plain": [
480 "True"
481 ]
482 },
483 "execution_count": 20,
484 "metadata": {},
485 "output_type": "execute_result"
486 }
487 ],
488 "source": [
489 "valid(trace_tour('FFRLLFRLLFFFRFLLRLLRRLLRLL'))"
490 ]
491 },
492 {
493 "cell_type": "code",
494 "execution_count": 21,
495 "metadata": {},
496 "outputs": [
497 {
498 "data": {
499 "text/plain": [
500 "False"
501 ]
502 },
503 "execution_count": 21,
504 "metadata": {},
505 "output_type": "execute_result"
506 }
507 ],
508 "source": [
509 "valid(trace_tour('FFRLLFRLLFFFRFLLRLLRRLLRLLFF'))"
510 ]
511 },
512 {
513 "cell_type": "code",
514 "execution_count": 22,
515 "metadata": {},
516 "outputs": [
517 {
518 "data": {
519 "text/plain": [
520 "False"
521 ]
522 },
523 "execution_count": 22,
524 "metadata": {},
525 "output_type": "execute_result"
526 }
527 ],
528 "source": [
529 "valid(trace_tour('FFLLLFRR'))"
530 ]
531 },
532 {
533 "cell_type": "code",
534 "execution_count": 23,
535 "metadata": {},
536 "outputs": [
537 {
538 "data": {
539 "text/plain": [
540 "False"
541 ]
542 },
543 "execution_count": 23,
544 "metadata": {},
545 "output_type": "execute_result"
546 }
547 ],
548 "source": [
549 "valid(trace_tour('F'))"
550 ]
551 },
552 {
553 "cell_type": "code",
554 "execution_count": 24,
555 "metadata": {},
556 "outputs": [
557 {
558 "data": {
559 "text/plain": [
560 "True"
561 ]
562 },
563 "execution_count": 24,
564 "metadata": {},
565 "output_type": "execute_result"
566 }
567 ],
568 "source": [
569 "valid(trace_tour('LLLL'))"
570 ]
571 },
572 {
573 "cell_type": "code",
574 "execution_count": 25,
575 "metadata": {
576 "collapsed": true
577 },
578 "outputs": [],
579 "source": [
580 "def chunks(items, n=2):\n",
581 " return [items[i:i+n] for i in range(len(items) - n + 1)]"
582 ]
583 },
584 {
585 "cell_type": "code",
586 "execution_count": 26,
587 "metadata": {},
588 "outputs": [
589 {
590 "data": {
591 "text/plain": [
592 "['abcdefg',\n",
593 " 'bcdefgh',\n",
594 " 'cdefghi',\n",
595 " 'defghij',\n",
596 " 'efghijk',\n",
597 " 'fghijkl',\n",
598 " 'ghijklm',\n",
599 " 'hijklmn',\n",
600 " 'ijklmno',\n",
601 " 'jklmnop',\n",
602 " 'klmnopq',\n",
603 " 'lmnopqr',\n",
604 " 'mnopqrs',\n",
605 " 'nopqrst',\n",
606 " 'opqrstu',\n",
607 " 'pqrstuv',\n",
608 " 'qrstuvw',\n",
609 " 'rstuvwx',\n",
610 " 'stuvwxy',\n",
611 " 'tuvwxyz']"
612 ]
613 },
614 "execution_count": 26,
615 "metadata": {},
616 "output_type": "execute_result"
617 }
618 ],
619 "source": [
620 "import string\n",
621 "chunks(string.ascii_lowercase, 7)"
622 ]
623 },
624 {
625 "cell_type": "markdown",
626 "metadata": {},
627 "source": [
628 "Using the [Shoelace formula](https://en.wikipedia.org/wiki/Shoelace_formula)"
629 ]
630 },
631 {
632 "cell_type": "code",
633 "execution_count": 27,
634 "metadata": {
635 "collapsed": true
636 },
637 "outputs": [],
638 "source": [
639 "def shoelace(trace):\n",
640 " return abs(sum(s.x * t.y - t.x * s.y for s, t in chunks(trace, 2))) // 2"
641 ]
642 },
643 {
644 "cell_type": "code",
645 "execution_count": 28,
646 "metadata": {},
647 "outputs": [
648 {
649 "data": {
650 "text/plain": [
651 "4"
652 ]
653 },
654 "execution_count": 28,
655 "metadata": {},
656 "output_type": "execute_result"
657 }
658 ],
659 "source": [
660 "shoelace(trace_tour('FFLRLLFLRL'))"
661 ]
662 },
663 {
664 "cell_type": "code",
665 "execution_count": 29,
666 "metadata": {},
667 "outputs": [
668 {
669 "data": {
670 "text/plain": [
671 "9"
672 ]
673 },
674 "execution_count": 29,
675 "metadata": {},
676 "output_type": "execute_result"
677 }
678 ],
679 "source": [
680 "shoelace(trace_tour('FLLFFLFFFLFFLFLLRRFR'))"
681 ]
682 },
683 {
684 "cell_type": "code",
685 "execution_count": 30,
686 "metadata": {},
687 "outputs": [
688 {
689 "data": {
690 "text/plain": [
691 "15"
692 ]
693 },
694 "execution_count": 30,
695 "metadata": {},
696 "output_type": "execute_result"
697 }
698 ],
699 "source": [
700 "shoelace(trace_tour('FFRLLFRLLFFFRFLLRLLRRLLRLL'))"
701 ]
702 },
703 {
704 "cell_type": "code",
705 "execution_count": 31,
706 "metadata": {
707 "collapsed": true
708 },
709 "outputs": [],
710 "source": [
711 "def valid_prefix(tour):\n",
712 " current = Step(0, 0, Direction.RIGHT)\n",
713 " prefix = []\n",
714 " posns = []\n",
715 " for s in tour:\n",
716 " current = step(s, current)\n",
717 " prefix += [s]\n",
718 " if (current.x, current.y) in posns:\n",
719 " return ''\n",
720 " elif current.x == 0 and current.y == 0: \n",
721 " return ''.join(prefix)\n",
722 " posns += [(current.x, current.y)]\n",
723 " if current.x == 0 and current.y == 0:\n",
724 " return ''.join(prefix)\n",
725 " else:\n",
726 " return ''"
727 ]
728 },
729 {
730 "cell_type": "code",
731 "execution_count": 32,
732 "metadata": {
733 "collapsed": true
734 },
735 "outputs": [],
736 "source": [
737 "def mistake_positions(trace, debug=False):\n",
738 " mistakes = []\n",
739 " current = trace[0]\n",
740 " posns = [(0, 0)]\n",
741 " for i, current in enumerate(trace[1:]):\n",
742 " if (current.x, current.y) in posns:\n",
743 " if debug: print(i, current)\n",
744 " mistakes += [Mistake(i+1, current)]\n",
745 " posns += [(current.x, current.y)]\n",
746 " if (current.x, current.y) == (0, 0):\n",
747 " return mistakes[:-1]\n",
748 " else:\n",
749 " return mistakes + [Mistake(len(trace)+1, current)]"
750 ]
751 },
752 {
753 "cell_type": "code",
754 "execution_count": 33,
755 "metadata": {
756 "collapsed": true
757 },
758 "outputs": [],
759 "source": [
760 "def returns_to_origin(mistake_positions):\n",
761 " return [i for i, m in mistake_positions\n",
762 " if (m.x, m.y) == (0, 0)]"
763 ]
764 },
765 {
766 "cell_type": "code",
767 "execution_count": 34,
768 "metadata": {
769 "collapsed": true
770 },
771 "outputs": [],
772 "source": [
773 "sample_tours = ['FFLRLLFLRL', 'FLLFFLFFFLFFLFLLRRFR', 'FFRLLFRLLFFFRFLLRLLRRLLRLL']"
774 ]
775 },
776 {
777 "cell_type": "code",
778 "execution_count": 35,
779 "metadata": {},
780 "outputs": [
781 {
782 "data": {
783 "text/plain": [
784 "'FFLRLLFLRL'"
785 ]
786 },
787 "execution_count": 35,
788 "metadata": {},
789 "output_type": "execute_result"
790 }
791 ],
792 "source": [
793 "valid_prefix(sample_tours[0])"
794 ]
795 },
796 {
797 "cell_type": "code",
798 "execution_count": 36,
799 "metadata": {
800 "scrolled": true
801 },
802 "outputs": [
803 {
804 "data": {
805 "text/plain": [
806 "True"
807 ]
808 },
809 "execution_count": 36,
810 "metadata": {},
811 "output_type": "execute_result"
812 }
813 ],
814 "source": [
815 "all(valid_prefix(t) == t for t in sample_tours)"
816 ]
817 },
818 {
819 "cell_type": "code",
820 "execution_count": 37,
821 "metadata": {},
822 "outputs": [
823 {
824 "data": {
825 "text/plain": [
826 "True"
827 ]
828 },
829 "execution_count": 37,
830 "metadata": {},
831 "output_type": "execute_result"
832 }
833 ],
834 "source": [
835 "valid_prefix(sample_tours[0] + 'FLLLL') == sample_tours[0]"
836 ]
837 },
838 {
839 "cell_type": "code",
840 "execution_count": 38,
841 "metadata": {},
842 "outputs": [
843 {
844 "data": {
845 "text/plain": [
846 "[Mistake(i=10, step=Step(x=0, y=0, dir=<Direction.DOWN: 3>)),\n",
847 " Mistake(i=13, step=Step(x=0, y=-1, dir=<Direction.DOWN: 3>))]"
848 ]
849 },
850 "execution_count": 38,
851 "metadata": {},
852 "output_type": "execute_result"
853 }
854 ],
855 "source": [
856 "mistake_positions(trace_tour(sample_tours[0] + 'F'))"
857 ]
858 },
859 {
860 "cell_type": "code",
861 "execution_count": 39,
862 "metadata": {},
863 "outputs": [
864 {
865 "data": {
866 "text/plain": [
867 "[Mistake(i=10, step=Step(x=0, y=0, dir=<Direction.DOWN: 3>)),\n",
868 " Mistake(i=13, step=Step(x=1, y=0, dir=<Direction.UP: 1>)),\n",
869 " Mistake(i=14, step=Step(x=0, y=0, dir=<Direction.LEFT: 4>)),\n",
870 " Mistake(i=15, step=Step(x=0, y=-1, dir=<Direction.DOWN: 3>)),\n",
871 " Mistake(i=17, step=Step(x=0, y=-1, dir=<Direction.DOWN: 3>))]"
872 ]
873 },
874 "execution_count": 39,
875 "metadata": {},
876 "output_type": "execute_result"
877 }
878 ],
879 "source": [
880 "mistake_positions(trace_tour(sample_tours[0] + 'FLLLL'))"
881 ]
882 },
883 {
884 "cell_type": "code",
885 "execution_count": 40,
886 "metadata": {},
887 "outputs": [
888 {
889 "data": {
890 "text/plain": [
891 "'FFLRLLFLRL'"
892 ]
893 },
894 "execution_count": 40,
895 "metadata": {},
896 "output_type": "execute_result"
897 }
898 ],
899 "source": [
900 "(sample_tours[0] + 'FLLLL')[:10]"
901 ]
902 },
903 {
904 "cell_type": "code",
905 "execution_count": 41,
906 "metadata": {
907 "collapsed": true
908 },
909 "outputs": [],
910 "source": [
911 "def random_walk(steps=1000):\n",
912 " return ''.join(random.choice('FFLR') for _ in range(steps))"
913 ]
914 },
915 {
916 "cell_type": "code",
917 "execution_count": 42,
918 "metadata": {},
919 "outputs": [
920 {
921 "data": {
922 "text/plain": [
923 "''"
924 ]
925 },
926 "execution_count": 42,
927 "metadata": {},
928 "output_type": "execute_result"
929 }
930 ],
931 "source": [
932 "valid_prefix(random_walk(1000))"
933 ]
934 },
935 {
936 "cell_type": "code",
937 "execution_count": 45,
938 "metadata": {},
939 "outputs": [
940 {
941 "data": {
942 "text/plain": [
943 "'FFRRFR'"
944 ]
945 },
946 "execution_count": 45,
947 "metadata": {},
948 "output_type": "execute_result"
949 }
950 ],
951 "source": [
952 "valid_prefix(random_walk(1000))"
953 ]
954 },
955 {
956 "cell_type": "code",
957 "execution_count": 46,
958 "metadata": {
959 "collapsed": true,
960 "scrolled": true
961 },
962 "outputs": [],
963 "source": [
964 "walks = []\n",
965 "while len(walks) < 10:\n",
966 " w = valid_prefix(random_walk())\n",
967 " if len(w) > 30: walks += [w]"
968 ]
969 },
970 {
971 "cell_type": "code",
972 "execution_count": 47,
973 "metadata": {},
974 "outputs": [
975 {
976 "data": {
977 "text/plain": [
978 "['RLFFLRFFFFRRLFFFRFFFFRFFLFFFRFRF',\n",
979 " 'FFFFFLLFFRRLFFFFLLFFRLRFFLFFLRLL',\n",
980 " 'LRLRLFFFFLLRLRLRFLFFFRLFLFFFLRLL',\n",
981 " 'FLFFFFLFRLFFFFRLRFLLFFFFFFLRFLFLFLRFRFFRFFFFLRFFFLFRLRFLLFFFFRLFLFFR',\n",
982 " 'LLFRLRFFLLRFRFLFFFLRLFFLFRFFFLFFRFFLFFFFLLFFFRFRFFLFRF',\n",
983 " 'FLLFLFFFRLFFLLRFFFFLRFLFFLFFFFLRRF',\n",
984 " 'FFLFRLLFFRFFFLRLFRLFLFFRLFFFLFFFRFRLRLFFLRRFFLLRLRFLFFLFFRFLFLLRRFFFRL',\n",
985 " 'RFFFFFLLRLFFFRLFLRFLLFRFFFFFFFLLFFFFRLLR',\n",
986 " 'LLFFFRLLFFFRFLLFRFFLLRFFLRLFLRRFLL',\n",
987 " 'FLLRFLRFFRRFLFFRRLFFFFFFRFFRFFRL']"
988 ]
989 },
990 "execution_count": 47,
991 "metadata": {},
992 "output_type": "execute_result"
993 }
994 ],
995 "source": [
996 "walks"
997 ]
998 },
999 {
1000 "cell_type": "code",
1001 "execution_count": 48,
1002 "metadata": {},
1003 "outputs": [
1004 {
1005 "data": {
1006 "text/plain": [
1007 "[Step(x=0, y=0, dir=<Direction.RIGHT: 2>),\n",
1008 " Step(x=1, y=0, dir=<Direction.RIGHT: 2>),\n",
1009 " Step(x=1, y=1, dir=<Direction.UP: 1>),\n",
1010 " Step(x=0, y=1, dir=<Direction.LEFT: 4>),\n",
1011 " Step(x=0, y=0, dir=<Direction.DOWN: 3>)]"
1012 ]
1013 },
1014 "execution_count": 48,
1015 "metadata": {},
1016 "output_type": "execute_result"
1017 }
1018 ],
1019 "source": [
1020 "trace_tour('FLLL')"
1021 ]
1022 },
1023 {
1024 "cell_type": "code",
1025 "execution_count": 49,
1026 "metadata": {},
1027 "outputs": [
1028 {
1029 "data": {
1030 "text/plain": [
1031 "(-1, 3)"
1032 ]
1033 },
1034 "execution_count": 49,
1035 "metadata": {},
1036 "output_type": "execute_result"
1037 },
1038 {
1039 "data": {
1040 "image/png": "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\n",
1041 "text/plain": [
1042 "<matplotlib.figure.Figure at 0x7f03fdf356d8>"
1043 ]
1044 },
1045 "metadata": {},
1046 "output_type": "display_data"
1047 }
1048 ],
1049 "source": [
1050 "import matplotlib.pyplot as plt\n",
1051 "%matplotlib inline\n",
1052 "plt.axis('on')\n",
1053 "plt.arrow(0, 0, 0.8, 0, head_width=0.1, head_length=0.1, fc='k', ec='k', length_includes_head=True)\n",
1054 "plt.arrow(0.2, 0, 0, 1, head_width=0.1, head_length=0.1, fc='k', ec='k', length_includes_head=True)\n",
1055 "plt.xlim([-1, 2])\n",
1056 "plt.ylim([-1, 3])"
1057 ]
1058 },
1059 {
1060 "cell_type": "code",
1061 "execution_count": 50,
1062 "metadata": {
1063 "collapsed": true
1064 },
1065 "outputs": [],
1066 "source": [
1067 "def bounds(trace):\n",
1068 " return (max(s.x for s in trace),\n",
1069 " max(s.y for s in trace),\n",
1070 " min(s.x for s in trace),\n",
1071 " min(s.y for s in trace))"
1072 ]
1073 },
1074 {
1075 "cell_type": "code",
1076 "execution_count": 51,
1077 "metadata": {},
1078 "outputs": [
1079 {
1080 "data": {
1081 "text/plain": [
1082 "(0, 2, -13, -13)"
1083 ]
1084 },
1085 "execution_count": 51,
1086 "metadata": {},
1087 "output_type": "execute_result"
1088 }
1089 ],
1090 "source": [
1091 "bounds(trace_tour('RFRFFLRFLFFRRFFRRRRLLLRRRRRRFRLFRFFRFFRRFRLRRFLLFRLLFRFLFLFRFRLLFRLFRFLRRLLFRRRFRRRRLLFLFRFRRFFRRLLLRLRRFRLRRFFRRFLFRRLLRRFFRFRRRRRFLLLLLRRFFFLLFFFRRLFLFFLRRRFRFLLFFRRLLRFLLRRF'))"
1092 ]
1093 },
1094 {
1095 "cell_type": "code",
1096 "execution_count": 52,
1097 "metadata": {
1098 "collapsed": true
1099 },
1100 "outputs": [],
1101 "source": [
1102 "plot_wh = {Direction.UP: (0, 1), Direction.LEFT: (-1, 0),\n",
1103 " Direction.DOWN: (0, -1), Direction.RIGHT: (1, 0)}"
1104 ]
1105 },
1106 {
1107 "cell_type": "code",
1108 "execution_count": 53,
1109 "metadata": {
1110 "collapsed": true
1111 },
1112 "outputs": [],
1113 "source": [
1114 "def plot_trace(trace, colour='k', highlight_start=True,\n",
1115 " xybounds=None, fig=None, subplot_details=None, filename=None):\n",
1116 " plt.axis('on')\n",
1117 " plt.axes().set_aspect('equal')\n",
1118 " \n",
1119 " if highlight_start:\n",
1120 " plt.axes().add_patch(plt.Circle((trace[0].x, trace[0].y), 0.2, color=colour))\n",
1121 " \n",
1122 " for s, t in chunks(trace, 2):\n",
1123 " w, h = plot_wh[t.dir]\n",
1124 " 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",
1125 " xh, yh, xl, yl = bounds(trace)\n",
1126 " if xybounds is not None: \n",
1127 " bxh, byh, bxl, byl = xybounds\n",
1128 " plt.xlim([min(xl, bxl)-1, max(xh, bxh)+1])\n",
1129 " plt.ylim([min(yl, byl)-1, max(yh, byh)+1])\n",
1130 " else:\n",
1131 " plt.xlim([xl-1, xh+1])\n",
1132 " plt.ylim([yl-1, yh+1])\n",
1133 " if filename:\n",
1134 " plt.savefig(filename)"
1135 ]
1136 },
1137 {
1138 "cell_type": "code",
1139 "execution_count": 53,
1140 "metadata": {
1141 "collapsed": true
1142 },
1143 "outputs": [],
1144 "source": [
1145 "# def plot_trace(trace, colour='k', xybounds=None, fig=None, subplot_details=None):\n",
1146 "# plt.ioff()\n",
1147 "# if fig is None:\n",
1148 "# fig = plt.figure()\n",
1149 "# ax = fig.gca()\n",
1150 "# if subplot_details is not None:\n",
1151 "# ax = fig.add_subplot(*subplot_details)\n",
1152 "# plt.axis('on')\n",
1153 "# # plt.axes().set_aspect('equal')\n",
1154 "# ax.set_aspect('equal')\n",
1155 "# for s, t in chunks(trace, 2):\n",
1156 "# w, h = plot_wh[t.dir]\n",
1157 "# 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",
1158 "# xh, yh, xl, yl = bounds(trace)\n",
1159 "# if xybounds is not None: \n",
1160 "# bxh, byh, bxl, byl = xybounds\n",
1161 "# ax.set_xlim([min(xl, bxl)-1, max(xh, bxh)+1])\n",
1162 "# ax.set_ylim([min(yl, byl)-1, max(yh, byh)+1])\n",
1163 "# else:\n",
1164 "# ax.set_xlim([xl-1, xh+1])\n",
1165 "# ax.set_ylim([yl-1, yh+1])\n",
1166 "# plt.close(fig)\n",
1167 "# return fig"
1168 ]
1169 },
1170 {
1171 "cell_type": "code",
1172 "execution_count": 54,
1173 "metadata": {
1174 "collapsed": true
1175 },
1176 "outputs": [],
1177 "source": [
1178 "def pqr(p, q, r):\n",
1179 " return '{}:{};{}'.format(p, q, r)"
1180 ]
1181 },
1182 {
1183 "cell_type": "code",
1184 "execution_count": 55,
1185 "metadata": {},
1186 "outputs": [
1187 {
1188 "data": {
1189 "text/plain": [
1190 "'1:2;3'"
1191 ]
1192 },
1193 "execution_count": 55,
1194 "metadata": {},
1195 "output_type": "execute_result"
1196 }
1197 ],
1198 "source": [
1199 "pqrt = (1, 2, 3)\n",
1200 "pqr(*pqrt)"
1201 ]
1202 },
1203 {
1204 "cell_type": "code",
1205 "execution_count": 56,
1206 "metadata": {},
1207 "outputs": [
1208 {
1209 "data": {
1210 "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",
1211 "text/plain": [
1212 "<matplotlib.figure.Figure at 0x7f03fdc55b70>"
1213 ]
1214 },
1215 "metadata": {},
1216 "output_type": "display_data"
1217 }
1218 ],
1219 "source": [
1220 "plot_trace(trace_tour(sample_tours[0] + 'FLLLL'))"
1221 ]
1222 },
1223 {
1224 "cell_type": "code",
1225 "execution_count": 57,
1226 "metadata": {},
1227 "outputs": [
1228 {
1229 "data": {
1230 "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",
1231 "text/plain": [
1232 "<matplotlib.figure.Figure at 0x7f03fdcc74a8>"
1233 ]
1234 },
1235 "metadata": {},
1236 "output_type": "display_data"
1237 }
1238 ],
1239 "source": [
1240 "plot_trace(trace_tour(sample_tours[0] + 'FLLLL'), colour='g')"
1241 ]
1242 },
1243 {
1244 "cell_type": "code",
1245 "execution_count": 58,
1246 "metadata": {},
1247 "outputs": [
1248 {
1249 "data": {
1250 "image/png": "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\nRU5ErkJggg==\n",
1251 "text/plain": [
1252 "<matplotlib.figure.Figure at 0x7f03fdb35b00>"
1253 ]
1254 },
1255 "metadata": {},
1256 "output_type": "display_data"
1257 }
1258 ],
1259 "source": [
1260 "plot_trace(trace_tour('FFFLLFFL'))"
1261 ]
1262 },
1263 {
1264 "cell_type": "code",
1265 "execution_count": 59,
1266 "metadata": {
1267 "scrolled": true
1268 },
1269 "outputs": [
1270 {
1271 "data": {
1272 "text/plain": [
1273 "[Step(x=0, y=0, dir=<Direction.RIGHT: 2>),\n",
1274 " Step(x=1, y=0, dir=<Direction.RIGHT: 2>),\n",
1275 " Step(x=1, y=1, dir=<Direction.UP: 1>),\n",
1276 " Step(x=1, y=2, dir=<Direction.UP: 1>),\n",
1277 " Step(x=1, y=3, dir=<Direction.UP: 1>),\n",
1278 " Step(x=1, y=4, dir=<Direction.UP: 1>),\n",
1279 " Step(x=1, y=5, dir=<Direction.UP: 1>),\n",
1280 " Step(x=0, y=5, dir=<Direction.LEFT: 4>),\n",
1281 " Step(x=-1, y=5, dir=<Direction.LEFT: 4>),\n",
1282 " Step(x=-1, y=6, dir=<Direction.UP: 1>),\n",
1283 " Step(x=-2, y=6, dir=<Direction.LEFT: 4>),\n",
1284 " Step(x=-3, y=6, dir=<Direction.LEFT: 4>),\n",
1285 " Step(x=-4, y=6, dir=<Direction.LEFT: 4>),\n",
1286 " Step(x=-5, y=6, dir=<Direction.LEFT: 4>),\n",
1287 " Step(x=-6, y=6, dir=<Direction.LEFT: 4>),\n",
1288 " Step(x=-6, y=7, dir=<Direction.UP: 1>),\n",
1289 " Step(x=-7, y=7, dir=<Direction.LEFT: 4>),\n",
1290 " Step(x=-7, y=8, dir=<Direction.UP: 1>),\n",
1291 " Step(x=-7, y=9, dir=<Direction.UP: 1>),\n",
1292 " Step(x=-8, y=9, dir=<Direction.LEFT: 4>),\n",
1293 " Step(x=-8, y=8, dir=<Direction.DOWN: 3>),\n",
1294 " Step(x=-8, y=7, dir=<Direction.DOWN: 3>),\n",
1295 " Step(x=-8, y=6, dir=<Direction.DOWN: 3>),\n",
1296 " Step(x=-8, y=5, dir=<Direction.DOWN: 3>),\n",
1297 " Step(x=-8, y=4, dir=<Direction.DOWN: 3>),\n",
1298 " Step(x=-8, y=3, dir=<Direction.DOWN: 3>),\n",
1299 " Step(x=-8, y=2, dir=<Direction.DOWN: 3>),\n",
1300 " Step(x=-7, y=2, dir=<Direction.RIGHT: 2>),\n",
1301 " Step(x=-7, y=1, dir=<Direction.DOWN: 3>),\n",
1302 " Step(x=-7, y=0, dir=<Direction.DOWN: 3>),\n",
1303 " Step(x=-6, y=0, dir=<Direction.RIGHT: 2>),\n",
1304 " Step(x=-5, y=0, dir=<Direction.RIGHT: 2>),\n",
1305 " Step(x=-5, y=1, dir=<Direction.UP: 1>),\n",
1306 " Step(x=-5, y=2, dir=<Direction.UP: 1>),\n",
1307 " Step(x=-6, y=2, dir=<Direction.LEFT: 4>),\n",
1308 " Step(x=-6, y=3, dir=<Direction.UP: 1>),\n",
1309 " Step(x=-6, y=4, dir=<Direction.UP: 1>),\n",
1310 " Step(x=-5, y=4, dir=<Direction.RIGHT: 2>),\n",
1311 " Step(x=-4, y=4, dir=<Direction.RIGHT: 2>),\n",
1312 " Step(x=-3, y=4, dir=<Direction.RIGHT: 2>),\n",
1313 " Step(x=-3, y=3, dir=<Direction.DOWN: 3>),\n",
1314 " Step(x=-3, y=2, dir=<Direction.DOWN: 3>),\n",
1315 " Step(x=-3, y=1, dir=<Direction.DOWN: 3>),\n",
1316 " Step(x=-3, y=0, dir=<Direction.DOWN: 3>),\n",
1317 " Step(x=-3, y=-1, dir=<Direction.DOWN: 3>),\n",
1318 " Step(x=-2, y=-1, dir=<Direction.RIGHT: 2>),\n",
1319 " Step(x=-2, y=-2, dir=<Direction.DOWN: 3>),\n",
1320 " Step(x=-2, y=-3, dir=<Direction.DOWN: 3>),\n",
1321 " Step(x=-2, y=-4, dir=<Direction.DOWN: 3>),\n",
1322 " Step(x=-2, y=-5, dir=<Direction.DOWN: 3>),\n",
1323 " Step(x=-1, y=-5, dir=<Direction.RIGHT: 2>),\n",
1324 " Step(x=0, y=-5, dir=<Direction.RIGHT: 2>),\n",
1325 " Step(x=0, y=-6, dir=<Direction.DOWN: 3>),\n",
1326 " Step(x=1, y=-6, dir=<Direction.RIGHT: 2>),\n",
1327 " Step(x=1, y=-7, dir=<Direction.DOWN: 3>),\n",
1328 " Step(x=1, y=-8, dir=<Direction.DOWN: 3>),\n",
1329 " Step(x=2, y=-8, dir=<Direction.RIGHT: 2>),\n",
1330 " Step(x=2, y=-7, dir=<Direction.UP: 1>),\n",
1331 " Step(x=2, y=-6, dir=<Direction.UP: 1>),\n",
1332 " Step(x=2, y=-5, dir=<Direction.UP: 1>),\n",
1333 " Step(x=2, y=-4, dir=<Direction.UP: 1>),\n",
1334 " Step(x=2, y=-3, dir=<Direction.UP: 1>),\n",
1335 " Step(x=3, y=-3, dir=<Direction.RIGHT: 2>),\n",
1336 " Step(x=3, y=-2, dir=<Direction.UP: 1>),\n",
1337 " Step(x=3, y=-1, dir=<Direction.UP: 1>),\n",
1338 " Step(x=2, y=-1, dir=<Direction.LEFT: 4>),\n",
1339 " Step(x=1, y=-1, dir=<Direction.LEFT: 4>),\n",
1340 " Step(x=0, y=-1, dir=<Direction.LEFT: 4>),\n",
1341 " Step(x=0, y=0, dir=<Direction.UP: 1>)]"
1342 ]
1343 },
1344 "execution_count": 59,
1345 "metadata": {},
1346 "output_type": "execute_result"
1347 }
1348 ],
1349 "source": [
1350 "trace_tour(walks[3])"
1351 ]
1352 },
1353 {
1354 "cell_type": "code",
1355 "execution_count": 60,
1356 "metadata": {},
1357 "outputs": [
1358 {
1359 "data": {
1360 "image/png": "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\nVxR48cr/AwOlW67H9WljAAAAAElFTkSuQmCC\n",
1361 "text/plain": [
1362 "<matplotlib.figure.Figure at 0x7f03fda79780>"
1363 ]
1364 },
1365 "metadata": {},
1366 "output_type": "display_data"
1367 }
1368 ],
1369 "source": [
1370 "plot_trace(trace_tour(walks[3]))"
1371 ]
1372 },
1373 {
1374 "cell_type": "code",
1375 "execution_count": 61,
1376 "metadata": {},
1377 "outputs": [
1378 {
1379 "data": {
1380 "text/plain": [
1381 "10"
1382 ]
1383 },
1384 "execution_count": 61,
1385 "metadata": {},
1386 "output_type": "execute_result"
1387 }
1388 ],
1389 "source": [
1390 "long_walks = [w for w in walks if len(w) >= 30]\n",
1391 "len(long_walks)"
1392 ]
1393 },
1394 {
1395 "cell_type": "code",
1396 "execution_count": 62,
1397 "metadata": {},
1398 "outputs": [
1399 {
1400 "data": {
1401 "image/png": "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\nirCFtp8KBQAAAABJRU5ErkJggg==\n",
1402 "text/plain": [
1403 "<matplotlib.figure.Figure at 0x7f03fdbb2710>"
1404 ]
1405 },
1406 "metadata": {},
1407 "output_type": "display_data"
1408 }
1409 ],
1410 "source": [
1411 "plot_trace(trace_tour(long_walks[0]))"
1412 ]
1413 },
1414 {
1415 "cell_type": "code",
1416 "execution_count": 63,
1417 "metadata": {},
1418 "outputs": [
1419 {
1420 "data": {
1421 "text/plain": [
1422 "['RLFFLRFFFFRRLFFFRFFFFRFFLFFFRFRF',\n",
1423 " 'FFFFFLLFFRRLFFFFLLFFRLRFFLFFLRLL',\n",
1424 " 'LRLRLFFFFLLRLRLRFLFFFRLFLFFFLRLL',\n",
1425 " 'FLFFFFLFRLFFFFRLRFLLFFFFFFLRFLFLFLRFRFFRFFFFLRFFFLFRLRFLLFFFFRLFLFFR',\n",
1426 " 'LLFRLRFFLLRFRFLFFFLRLFFLFRFFFLFFRFFLFFFFLLFFFRFRFFLFRF',\n",
1427 " 'FLLFLFFFRLFFLLRFFFFLRFLFFLFFFFLRRF',\n",
1428 " 'FFLFRLLFFRFFFLRLFRLFLFFRLFFFLFFFRFRLRLFFLRRFFLLRLRFLFFLFFRFLFLLRRFFFRL',\n",
1429 " 'RFFFFFLLRLFFFRLFLRFLLFRFFFFFFFLLFFFFRLLR',\n",
1430 " 'LLFFFRLLFFFRFLLFRFFLLRFFLRLFLRRFLL',\n",
1431 " 'FLLRFLRFFRRFLFFRRLFFFFFFRFFRFFRL']"
1432 ]
1433 },
1434 "execution_count": 63,
1435 "metadata": {},
1436 "output_type": "execute_result"
1437 }
1438 ],
1439 "source": [
1440 "walks"
1441 ]
1442 },
1443 {
1444 "cell_type": "code",
1445 "execution_count": 64,
1446 "metadata": {},
1447 "outputs": [
1448 {
1449 "data": {
1450 "image/png": "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\n8v89qQ80wuYWhQAAAABJRU5ErkJggg==\n",
1451 "text/plain": [
1452 "<matplotlib.figure.Figure at 0x7f03fd986160>"
1453 ]
1454 },
1455 "metadata": {},
1456 "output_type": "display_data"
1457 }
1458 ],
1459 "source": [
1460 "plot_trace(trace_tour('FLFFLRFRLFRRRR'))"
1461 ]
1462 },
1463 {
1464 "cell_type": "code",
1465 "execution_count": 65,
1466 "metadata": {},
1467 "outputs": [
1468 {
1469 "data": {
1470 "text/plain": [
1471 "(313, [])"
1472 ]
1473 },
1474 "execution_count": 65,
1475 "metadata": {},
1476 "output_type": "execute_result"
1477 }
1478 ],
1479 "source": [
1480 "w = random_walk()\n",
1481 "ms = mistake_positions(trace_tour(w))\n",
1482 "len(ms), returns_to_origin(ms)"
1483 ]
1484 },
1485 {
1486 "cell_type": "code",
1487 "execution_count": 66,
1488 "metadata": {},
1489 "outputs": [
1490 {
1491 "data": {
1492 "image/png": "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\nQREEYVr+H+clU6giyaiIAAAAAElFTkSuQmCC\n",
1493 "text/plain": [
1494 "<matplotlib.figure.Figure at 0x7f03fd8c0898>"
1495 ]
1496 },
1497 "metadata": {},
1498 "output_type": "display_data"
1499 }
1500 ],
1501 "source": [
1502 "plot_trace(trace_tour(w))"
1503 ]
1504 },
1505 {
1506 "cell_type": "code",
1507 "execution_count": 67,
1508 "metadata": {
1509 "collapsed": true
1510 },
1511 "outputs": [],
1512 "source": [
1513 "def trim_loop(tour, random_mistake=False):\n",
1514 " trace = trace_tour(tour)\n",
1515 " mistakes = mistake_positions(trace)\n",
1516 " if random_mistake:\n",
1517 " end_mistake_index = random.randrange(len(mistakes))\n",
1518 " else:\n",
1519 " end_mistake_index = 0\n",
1520 "# 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",
1521 " # while this mistake extends to the next step in the trace...\n",
1522 " while (mistakes[end_mistake_index].i + 1 < len(trace) and \n",
1523 " end_mistake_index + 1 < len(mistakes) and\n",
1524 " mistakes[end_mistake_index].i + 1 == \n",
1525 " mistakes[end_mistake_index + 1].i):\n",
1526 "# 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",
1527 " # push this mistake finish point later\n",
1528 " end_mistake_index += 1\n",
1529 " mistake = mistakes[end_mistake_index]\n",
1530 " \n",
1531 " # find the first location that mentions where this mistake ends (which the point where the loop starts)\n",
1532 " mistake_loop_start = max(i for i, loc in enumerate(trace[:mistake.i])\n",
1533 " if (loc.x, loc.y) == (mistake.step.x, mistake.step.y))\n",
1534 "# print('Dealing with mistake from', mistake_loop_start, 'to', mistake.i, ', trace has len', len(trace))\n",
1535 " \n",
1536 " # direction before entering the loop\n",
1537 " direction_before = trace[mistake_loop_start].dir\n",
1538 " \n",
1539 " # find the new instruction to turn from heading before the loop to heading after the loop\n",
1540 " new_instruction = 'F'\n",
1541 " if (mistake.i + 1) < len(trace):\n",
1542 " if turn_left(direction_before) == trace[mistake.i + 1].dir:\n",
1543 " new_instruction = 'L'\n",
1544 " if turn_right(direction_before) == trace[mistake.i + 1].dir:\n",
1545 " new_instruction = 'R'\n",
1546 "# if (mistake.i + 1) < len(trace):\n",
1547 "# print('turning from', direction_before, 'to', trace[mistake.i + 1].dir, 'with', new_instruction )\n",
1548 "# else:\n",
1549 "# print('turning from', direction_before, 'to BEYOND END', 'with', new_instruction )\n",
1550 " return tour[:mistake_loop_start] + new_instruction + tour[mistake.i+1:]\n",
1551 "# return mistake, mistake_loop_start, trace[mistake_loop_start-2:mistake_loop_start+8]"
1552 ]
1553 },
1554 {
1555 "cell_type": "code",
1556 "execution_count": 68,
1557 "metadata": {},
1558 "outputs": [
1559 {
1560 "data": {
1561 "text/plain": [
1562 "'RFFRRFFFRFFRFLLRFLFFLLLLFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLRRLRRRRFFFFFFRRRLLFFFFFFLRRRLLLRLLLLRFRLRFRRRFRLRLLRFRLFLLRFRFLRRRRLRFLLRLRRLFFFRLRRFFRFLRFLLFLFRLRLRLRRRLFFRLRRFFRRFFLLRLLFLLLFRFRFLRLFFLFRRRRLRRLRRLRFRRLRRRFRRRRLLRFLLRRFFRLRFFLFLFRRLLLRLFFFRFRLRLLFRRFLLRLFFFLLRLLRRLRFRFFFFFRRFFLFRFLRFRFLFLFRLFLFLRFFLFRLRRRLRRRRFFFRFLLRLFRFRRRLRFFFFFLLFRRLFRRFRFRFLRLLFRFFFLLRRFRRRRLFFFLFLLLFFLRRLRFLFLFFRLLFFRRFFLRLLRFLRLLFLFRLLLRFFFFFFFFLFLRLLRLRLRFLLFFFLFLFFLFRRRRRFFRLLFFFRLFFLFRLFFRFFFFRLRRRLLFLRRFLRFFLRRFRRFLRFLRRLFRRLFFFFRLFLFFLRFFFFFRLFLFLRFFFLLLFLLLFFLRRLFLFRRFRRFFRRRFFRFLFLLFLFRFRFLLLRRRLFRRFFRLRFLFLFLRRLFFFLFRLRFRFFRFLRRFFFFFLFRLRRFRLLRLLFFLLLFFLFFFRLFRFRRRRLFLFLLLLRLFRFRLRLLFLFLLLRRRLLLFRRFRLRFFRRRLLLFRLRLLFFLLRFFFFRLLRLRLLLRLFFFRRLRFRFFRRRFFFRFFFFLRFLFRFLRFRRLLLRLLFRRLFFLRRFFFRLLFRLFLRRFLRLLRRFFLLFLLLFFFFRRFFRLFFLLFLLFRFRLRFLRFFRFRLRLLLFFFLFLRFRFRFLRRLLLLLRFRRLFLLLLRRFFFLLRFLFFRLLLLFLFRLRFFFFFLRLLFFLLLFFLLRRFLRRFLRLRRLLLRRRRRLLLFLRRLFFFRFLRRLF'"
1563 ]
1564 },
1565 "execution_count": 68,
1566 "metadata": {},
1567 "output_type": "execute_result"
1568 }
1569 ],
1570 "source": [
1571 "w = 'RFFRRFFFRFFRFLLRFLFFLLLLFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLRRLRRRRFFFFFFRRRLLFFFFFFLRRRLLLRLLLLRFRLRFRRRFRLRLLRFRLFLLRFRFLRRRRLRFLLRLRRLFFFRLRRFFRFLRFLLFLFRLRLRLRRRLFFRLRRFFRRFFLLRLLFLLLFRFRFLRLFFLFRRRRLRRLRRLRFRRLRRRFRRRRLLRFLLRRFFRLRFFLFLFRRLLLRLFFFRFRLRLLFRRFLLRLFFFLLRLLRRLRFRFFFFFRRFFLFRFLRFRFLFLFRLFLFLRFFLFRLRRRLRRRRFFFRFLLRLFRFRRRLRFFFFFLLFRRLFRRFRFRFLRLLFRFFFLLRRFRRRRLFFFLFLLLFFLRRLRFLFLFFRLLFFRRFFLRLLRFLRLLFLFRLLLRFFFFFFFFLFLRLLRLRLRFLLFFFLFLFFLFRRRRRFFRLLFFFRLFFLFRLFFRFFFFRLRRRLLFLRRFLRFFLRRFRRFLRFLRRLFRRLFFFFRLFLFFLRFFFFFRLFLFLRFFFLLLFLLLFFLRRLFLFRRFRRFFRRRFFRFLFLLFLFRFRFLLLRRRLFRRFFRLRFLFLFLRRLFFFLFRLRFRFFRFLRRFFFFFLFRLRRFRLLRLLFFLLLFFLFFFRLFRFRRRRLFLFLLLLRLFRFRLRLLFLFLLLRRRLLLFRRFRLRFFRRRLLLFRLRLLFFLLRFFFFRLLRLRLLLRLFFFRRLRFRFFRRRFFFRFFFFLRFLFRFLRFRRLLLRLLFRRLFFLRRFFFRLLFRLFLRRFLRLLRRFFLLFLLLFFFFRRFFRLFFLLFLLFRFRLRFLRFFRFRLRLLLFFFLFLRFRFRFLRRLLLLLRFRRLFLLLLRRFFFLLRFLFFRLLLLFLFRLRFFFFFLRLLFFLLLFFLLRRFLRRFLRLRRLLLRRRRRLLLFLRRLFFFRFLRRLF'\n",
1572 "w"
1573 ]
1574 },
1575 {
1576 "cell_type": "code",
1577 "execution_count": 69,
1578 "metadata": {},
1579 "outputs": [
1580 {
1581 "data": {
1582 "image/png": "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\nrC2Hf85MaAAAAABJRU5ErkJggg==\n",
1583 "text/plain": [
1584 "<matplotlib.figure.Figure at 0x7f03fd29a710>"
1585 ]
1586 },
1587 "metadata": {},
1588 "output_type": "display_data"
1589 }
1590 ],
1591 "source": [
1592 "w_short = w[:100]\n",
1593 "plot_trace(trace_tour(w_short))"
1594 ]
1595 },
1596 {
1597 "cell_type": "code",
1598 "execution_count": 70,
1599 "metadata": {},
1600 "outputs": [
1601 {
1602 "name": "stdout",
1603 "output_type": "stream",
1604 "text": [
1605 "RFFRRFFFRFFRFLLRFLFFLLLLFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLR\n",
1606 "RFFRRFFFRFFRFLLRFLFFFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLR\n"
1607 ]
1608 },
1609 {
1610 "data": {
1611 "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",
1612 "text/plain": [
1613 "<matplotlib.figure.Figure at 0x7f03fd244b70>"
1614 ]
1615 },
1616 "metadata": {},
1617 "output_type": "display_data"
1618 }
1619 ],
1620 "source": [
1621 "trimmed = trim_loop(w_short)\n",
1622 "print('{}\\n{}'.format(w_short, trimmed))\n",
1623 "plot_trace(trace_tour(trimmed))"
1624 ]
1625 },
1626 {
1627 "cell_type": "code",
1628 "execution_count": 71,
1629 "metadata": {},
1630 "outputs": [
1631 {
1632 "name": "stdout",
1633 "output_type": "stream",
1634 "text": [
1635 "RFFRRFFFRFFRFLLRFLFFFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLR\n",
1636 "RFFRRFFFRFFRFLLRFLFFLLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLR\n"
1637 ]
1638 },
1639 {
1640 "data": {
1641 "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOUAAAD7CAYAAACVFVP9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGWxJREFUeJzt3X90VPWZx/H3kx8IhN+QwKkhCFW0CwXXXcW1y66gVCoq\naF2P21isVvdUxXpQqSg9jVhqqaVWVOTQU6Srp1SrxVWQ8sMCCyULLVKoVFBLBPkhIeFHAgkmmeTZ\nP2YmTTmEzL1z5843med1zhwmcL/3+U6ST+5k+D7zFVXFGOOOrHRPwBjz9yyUxjjGQmmMYyyUxjjG\nQmmMYyyUxjgmJ6xCImL/92IynqpKW8eEeqVUVV+3kpIS32OTuaWjbiY91kyrmyh7+mqMYyyUxjim\nXYTyyiuvzJi6mfRYM7FuIsTLc92kColoWLWMcZGIoK690GOMaZuF0hjHWCiNcYyF0hjHJBxKEVko\nIuUi8ucWf9dbRFaJyAcislJEeqZmmsZkDi9XykXANaf93XTgHVW9EFgDPBrUxIzJVAmHUlV/Dxw7\n7a8nAv8du//fwKSA5mVMxkr2d8oCVS0HUNVDQH7yU2r/9uzZQ3FxMZs3b6a2ttbTLRKJpHv6Js1C\n6xIBePzxx5vvX3nllU6vqvDr1KlTDB48GIDFixd7Ht+7d28OHjxI586dg56aCdm6detYt26d94Ee\nV7kPAv7c4uOdQP/Y/QHAzrOM1Uxw7NgxBfTee+/VHTt2eBo7dOhQBXTBggUpmp1Jp1gG2syZ16ev\nErvFvQV8I3b/duBN7z8WOqZ58+YxbNgwT2MmT54MwFe+8pVUTMm0E17+S2QxUAoMFZFPROQOYDYw\nTkQ+AK6OfWx8GjlyJAADBw5M80xMOiX8O6Wqfq2Vf7o6oLkYY7AVPcY4x0JpjGMslMY4xkJpjGMs\nlMY4xkJpjGMslMY4xkJpjGMslAFbtmwZACtXrkzzTEx7FWqXSNh2797N/fffT58+fbjttts8ja2v\nr+cHP/gBo0eP5uqrE1+0FO8MKS0t5ZprTu8JT8yQIUOYPn06RUVFnsYdOHCAJ554gtmzZ9O7d++E\nxzU2NlJWVsacOXN49tlnOeeccxIem5WVxVVXXUV2dranuZrWdej3fRVp8y02U6J3797s27ePvLw8\nT+P279/PhRdeSG1tra+62dnZNDY2+hqbjAkTJjQ/QzCts/d9jbnzzjvZsGGD581YGhoaePHFF3nv\nvfc8jz169KjnQAIUFhZy4MAB5s6dS2Vlpee6+/fvZ+7cudTU1Hgeu3v3bubNm0dDQ0PCYyoqKgB4\n++23qaqqCvpLl7E6/JXyueeeY8qUKaHWzSTxZyNhf23bI7tSmtDk5HTolyZCZ6E0xjEWSmMcY6E0\nxjEWSmMcY6E0xjEWSmMcY6E0xjGBhFJEporIDhH5s4j8UkQ6BXFeYzJR0qEUkc8B9wOXqOoIoovc\nb032vMZkqqCevmYDeSKSA3QFDgZ0Xt+2bNkCwPz589M8E2O8SXp9lKoeFJGfAJ8AtcAqVX0n6Zkl\nqb6+HoDq6mpmzJiR8Lhdu3axZMkSvv/973Pq1ClPNdevX09paSm//vWv+epXv+ppbHuVlZXlqdXL\ntC3pBeki0gv4DfAfQBXwOvCaqi4+7TgtKSlp/jiMXbeuv/563y1F+fn5zV0QfmTKAu0RI0bQqVOn\n5mcm5m9O33Vr5syZCS1IDyKUNwPXqOrdsY+/DoxS1SmnHRd6l4gfNTU1rF+/ni9/+cueG3crKyvZ\nuHEjkyZNyohQVlZWkp8f3ZL0+PHj9OzZM80zcluiXSJBhPIyYCFwKVBHdBv2P6rqvNOOaxehTNbx\n48fp3bt3RoQSrHXLi9Bat1T1D0Sfsv4J2E50q7yfJXte035Y61awOnSTczpk4pUyJyeHhoaGdE/F\nedbkbEw7ZaE0xjEWSmMcY6E0xjEWSmMcY6E0xjEWSmMcY6E0xjEWyrPwsy/HrFmzAPjJT34S9HSc\nk459SzKBrY9qxfPPP8/9998PwOjRoxMed+DAAQAKCgpSMq9UqKys5J577qG8vNzTuA0bNpCdnW0L\n0QNmy+xakcyOXWPHjmX16tVkZbWPJyLjx4/3vZ9mXl4eixcv5oYbbgh4Vh1PaF0iiWqPoVy2bBlj\nxoyha9eu6Z5OykQiEXJzc4Fog/eFF16Y8NgPP/yQoqIiOnfunKrpdSi29jUAAwcO7NCBhGiHx8iR\nIwE8BRJg6NChFsgUsFAaC5ZjLJTGOMZCaYxjLJTGOMZCaYxjLJTGOMZCaYxjLJTGOCaoXbd6ishr\nIrJTRP4iIqOCOK8xmSioBelzgeWq+h8tNvkxxvgQxFZ43YHRqroIQFUjqlqd9MzSKN52NWXKlDaO\n/HuqyrFjx1IxpVC057l3JEE8fR0CVIrIIhHZKiI/E5EuAZwXgA8++IAjR44EdbqEXHHFFUC0NUlE\nEr5lZWXRp08f7r777lDnm6wePXoA0KdPH0+PV0QoLCyktLQ0zY+gYwliL5F/AjYB/6KqW0TkGaBK\nVUtOO87zrlvV1dX079+f8ePH88YbbyQ1T6+mTZvGnDlzfI9vTx0xZWVlTJgwgV27dnkem52dzcCB\nAykrK0uq3a0jSueuW/2B/1PVIbGP/xV4RFWvP+04z61b27dv5+KLLwagqanJ+S+6qrJ3714GDx7c\nrkIJ0bnHt1xI1NGjR+nbty9gu24lIswNfsqBfSIyNPZXVwHvJ3teoLml6JZbbnE+kBD9pPfq1Svd\n0/BFRDwFEqJPdyHa/mWBDE5Qr75+G/iliOQCZcAdAZ3XmIwTSChVdTvR/SmNMUmyFT3GOMZCaYxj\nLJTGOMZCaYxjLJTGOMZCaYxjLJTGOMZCGbDPPvsMgLq6ujTPxLRX7SKUdXV1zRvnuC6+KdC0adM8\njauqqmLPnj2+apaXl3venMc4TFVDuUVLeQf4vn3uc5/TsrIyX3X9Wr58eVJzLiws9D324YcfDvWx\nqqoOGTJEv/CFL4Retz2KZaDNrDi/wc/KlSuZPHkyhw8f9rQlXU1NDVu3buXmm2/mtdde81zXL1Vl\n9uzZ/Pa3v/U0bsOGDQAUFxfzySefeB6bm5tLQ0NDqN0pDQ0NdOnShdzcXE6ePEl2dnZotdujDrXr\nlqrS1NTk6Yu+Zs0arrrqKvr160dFRYWvumHy8xjjmpqaeOSRR5gzZ06ooayqqmruijlx4gTdunUL\nrXZ71KF23RIRz9+sY8eOBaBlY7XL/DzGuKysrLS0tsXbtXJyciyQAWoXoTQmk1gojXGMhdIYx1go\njXGMhdIYx1gojXGMhdIYxwQWShHJir1D+ltBndOYTBTklfIBAnq/V2MyWVBb4RUC1wI/D+J8xruj\nR48C0NjYmOaZmGQFdaX8KTCNaLeCUz755BP++te/eh6nqqxfv55PP/00BbNqXSQS4e23327uy0zU\nwoULAZg1a1Zagjl37tzQa3ZYibSSnO0GTACej92/EljaynGp6IY5K5JooerevbvvsRdccIHW1dV5\nnm9lZaUWFBQkNW+/t4ceesjX57ioqCiputOnT/dVtz0irNYtEXkSuA2IAF2A7sASVZ182nGed91K\n1u9//3tuv/12amtrufPOOz2NzcvL44c//CHnn38+1157bcLj1q1bR2lpKU8//TRTp071VHPZsmVc\nf310X6Ti4mIGDRqU8Ng1a9awadMmAL71rW817/PRFlXlRz/6EU1NTZSXl1NQUOBpzi0Xwse3EExE\nTU0N27dvB6JPubOyOt5/BPjddSvoRuZ/B95q5d9S+UPIGXPmzFFAX3rpJc9jly5dqn4/T9OmTfM1\ntrGxsfmqdfjwYc/jAc3JyfE8bvv27c11GxoaPI9vj0jwStnxfjyl2Te/+U0Avv71r6d5JonJyspi\n1KhRAOTn54dWd8SIEQD06tWLnJyg9pnqGAL9bKjq/wL/G+Q5jck0dqU0xjEWSmMcY6E0xjEWSmMc\nY6E0xjEWSmMcY6E0xjEWSmMcY6F0yN69e4G/tWF5Ed8cyGt3SRAikUjoNTsyC2WKvPDCC573BHnq\nqacA+NWvfuW5Xny/lJYLoFOtsrKy+X5VVVXC4xoaGpg3b15StVWVN998kzVr1nge29jYyMsvv8zW\nrVuTmkPKJLJANogbGbIg/eTJk0m1MnXr1k2rqqo81/3ud7+r+fn5GolEPI+99dZbddCgQZ7HqaoO\nGDAgqcc7fPhwX3WvuOKKtLS4de3aVY8ePeprziS4IN1WAgcsLy+PjRs3cvfdd/ONb3yDL37xi57G\njxgxgh49eniuW1dXR0VFhef9SCKRCK+88goQbQgvKipKeGxVVRWHDh0CYMmSJXTp0iWhcadOnWLK\nlCkcPHiQHTt20NTU5Ll1q7S0lIsuuojhw4c3NwEkYvXq1Tz99NPk5eVxxx13MGHChITHLly4kNdf\nf52ZM2fyzDPPeJqvJ4kkN4gbGXKlTBe/rVtNTU3NV4Hq6mpPY+vr6323Xx0/frx5bFNTk6exqtGr\nTklJiedxf/jDHxTQm266yfPYeGvdkiVLPI9VtdYtkyARaW7d6t69u6exubm5zfe9tl/Fd+waM2ZM\nqDuGXXrppYC3huy466677u/+TBULpTGOsVAa4xgLpTGOsVAa4xgLpTGOsVAa4xgLpTGOSTqUIlIo\nImtE5H0ReU9Evh3ExIzJVEEss4sAD6rqNhHpBrwrIqtUdVcA5zYm4yR9pVTVQ6q6LXb/JLATODfZ\n8xpvtmzZAnjr1kiWttjyouX9VDt27BgA7777ruex8Ra33bt3BzmlQAX6O6WInAdcDGwO8rymbWvX\nrgX+Fk4/7rvvPurq6hI+vmXfZ3V1ta+an376KT/+8Y89jYnvmbJs2TJP4/bu3UtxcTEAK1eu9DQ2\nVIkskE3kBnQDtgATW/l3X4t4TWJmzpyp+fn5vhZ3X3LJJUm1Mw0YMMDXnC+99NK0tF8BumDBAs/z\nLS8vV0D37dvn6/ESZuuWiOQArwMvq+qbrR33+OOPN98PY9etTHLy5EkqKio8L+6ORCLNzb7XXXcd\nL730Euecc05CY48cOUJRURGHDh2iqqqqeZF5ojZs2MCCBQsoLy9nxowZCY9bvXo1kyZNIjc3l+PH\njyc8bs+ePTzxxBO8+uqrnH/++Z7mCtFdswBKSkqa9wM9m9N33UpYIslt6wa8BDzdxjG+frqYxPht\n3VLV5quH1z01W7Z9+blC+1VRUaGAjhs3ztd4QH/3u995Hhdv+9q4caPvuhpG65aIfAkoBsaKyJ9E\nZKuIjE/2vCY8eXl5AHTq1MnTuPhVOScnJ9T2q379+gH+2q+SEW/7iv+ZKkk/fVXVjYC3dndjTKts\nRY8xjrFQGuMYC6UxjrFQGuMYC6UxjrFQGuMYC6UxjrFQGuMYC2UHsXTpUoDmbQS8qKmpAaC2tjbQ\nOblo27ZtAKxatSrNM2md7SXSQcR3+Jo3bx4XXHBBwuOmTZvWfH/+/Pnk5+cnPPbee+8FouunvbSM\nnTp1igceeICpU6dSXFzseR+RZMTnWVpaGlpNzxJZIBvEDVuQnlL33HNP2tqgkrn52Q+koaFB+/Xr\np08++aTnsfH9T5YvX+557Mcff6ydOnXSDz74wPNY1cQXpFsoO4j4N/mKFSs8jbvrrrt01qxZ2tjY\n6LnmxIkT9Re/+IXncXV1dfrkk08qoGPGjPE8Pr7Rjt/vKXx2idx1110K6G233ea7rlooM8fEiRMV\n0JqamnRPJWF+Q3nixAkF9Gtf+5rvun5C+dFHHymg77//vu+6GkbrlnHD0KFDAejatWuaZ5J63bp1\nA/D0u3MQ4o3RfhqkvbBQGuMYC6UxjrFQGuMYC6UxjrFQGuMYC6UxjrFQGuOYQEIpIuNFZJeIfCgi\njwRxTmMyVRDv+5oFPA9cAwwD/lNELkr2vMZkqiCulJcBH6nqXlVtAF4BJgZwXtOBVVRUANGNiaIr\n0MIR30bg5ZdfDq2mV0G0bp0L7Gvx8X6iQTXtRFNTE7W1tc3L18IQ390rKysLVfX1DuubNm3imWee\nSfj4srIynnvuOSDawuVl7JYtW3jzzVa3yQlUEKE802fzjD/6bIOf1BERevbsSX19veftBx588EFW\nrFjBrl3h7fNbWFhI3759GT9+vOd+yvimPitXrvS9pd2OHTuYOnWq53Hnnnsu2dmJbQiQtg1+gMuB\nFS0+ng48cobjfK2sN4kh1srkp09w1KhRvtugkoHPLpHHHnvMV+tWdXW1vvrqq766RA4fPqxLlizR\nSCTiaVxLhNgl8kfgfBEZJCKdgFuBtwI4r/Fg8uTJAIwbNy7NM0m9Rx99FIBhw4Z5Gte9e3duueUW\nXzXz8/O58cYbE75KJiOIDX4aRWQKsIroC0cLVXVn0jMznvTv3x+I7oDV0cV/943vvtXRBPIVVNUV\nwIVBnMuYTGcreoxxjIXSGMdYKI1xjIXSGMdYKI1xjIXSGMdYKI1xjIXSGMdYKDNcY2MjmzdvBuDA\ngQOh1Y1vSLR27Vqampo8jdUkWr3eeOMNAJ566inf50i1jr8mK0P4/UbNysqioKCAw4cPk5eXF/Cs\nWhev1aVLF26++eaEx1VWVrJhwwbA32OO1z3vvPM8jw2LhbKDqK+vp3PnztTU1HgKl4hw2WWXsWbN\nGnr16pXCGf69vn37MnPmTEpKSpqvXl4NHz7c85j4gv2bbrrJV80w2NPXDuLZZ5/ls88+Y+PGjZ7H\nVlRUpGXD2O9973ueWwWbmpqYM2cOAC+88ILnmvFmapcX7lsoO4j4Bq4dvXVLRJqbkx9++OE0zyY1\nLJQdRPwpq5+31Whv4u9UEObvwGGyUBrjGAulMY6xUBrjGAulMY6xUBrjGAulMY6xUBrjmKRCKSJP\nichOEdkmIr8RkR5BTcyYTJXslXIVMExVLwY+Ah5NfkrGZLakQqmq76hqvO9mE1CY/JRMmCKRSHPr\n1scff5zm2XjT2NhIfX29pzGLFi0C4KGHHkrFlAIR5KrcO4lug2fSwG/rVk5ODiNHjmTnzp0MGDAg\n4Fml1qxZs5g1axZ9+/ZNeEwkEgFg0qRJqZpW0toMpYisBvq3/Cuim6vMUNWlsWNmAA2quvhs57Jd\nt1LnyJEj5ObmcuTIEU/fpAAFBQVs376dLl26pGh2wYu3fUH0sXsxevRoXztueeV31y1JposbQERu\nB/4LGKuqdWc5TpOtZVoXX4i+du1azz/sLr/8cjZv3hzq5q1BOHHiBCIS6r6ayRARVLXNjoFkX30d\nD3wHuOFsgTSpF/8dKZOefXTv3r3dBNKLZF99fQ7oBqwWka0i4r3r1ATC68arxl1JvdCjqhcENRFj\nTJT9eDXGMRZKYxxjoTTGMRZKYxxjoTTGMRZKYxxjoTTGMRZKQ0NDQ7qnYFqwUHYwZWVlno6PRCJs\n3boVgA8//DAVUzIeubuhgvGkR4/omz58/vOf9zW+d+/eDB48OMgpGZ+S7hJJuJB1iaRUfX09N954\nI8uXL6egoIA+ffokPLZz587Mnz+fyy+/PIUzNIl2iVgoO5j6+no6deqU7mmYM7BQGuOYUPopjTHB\ns1Aa4xgLpTGOsVAa4xgLpTGOsVAa4xgLpTGOCSSUIvKwiDSJSOLLSIwxZ5R0KEWkELga2Jv8dM7M\nz7tMt9e6mfRYM7FuIoK4Uv4UmBbAeVqVSV+4THqsmVg3Ecm+Q/r1wD5VfS+g+RiT8ZLZ4Oe7wGPA\nuNP+zRiTBN8L0kVkOPAOUEs0jIXAAeAyVT18huNtNbrJeKF2iYjIx8AlqnoskBMak6GC/H9KxZ6+\nGpO00PopjTGJaVcrekTkfhHZJSLvicjsEOuGujhCRJ4SkZ0isk1EfiMiPVJcb3zs8/qhiDySylqx\neoUiskZE3o99Lb+d6pqn1c+Kbd34Vog1e4rIa7Gv619EZFRrx7abUIrIlcD1wHBV/SIwJ6S6KV8c\ncQargGGqejHwEfBoqgqJSBbwPHANMAz4TxG5KFX1YiLAg6r6D8C/APeFULOlB4D3Q6wHMBdYrqpf\nAEYCO1s7sN2EErgHmK2qEQBVrQypbsoXR5xOVd9R1abYh5uIvrKdKpcBH6nqXlVtAF4BJqawHqp6\nSFW3xe6fJPoNem4qa8bFfsheC/w8jHqxmt2B0aq6CEBVI6pa3drx7SmUQ4F/E5FNIrJWRP451QUd\nWRxxJ/DbFJ7/XGBfi4/3E1JAAETkPOBiYHNIJeM/ZMN8MWUIUCkii2JPm38mIl1aO9ip931tY6FC\nDtBLVS8XkUuBXxN9sKmsmbLFEWepO0NVl8aOmQE0qOrioOqeaSpn+LtQvmFFpBvwOvBA7IqZ6noT\ngHJV3Rb7dSis/y3IAS4B7lPVLSLyDDAdKGntYGeo6rjW/k1EvgUsiR33x9gLL31V9UgqasYWR5wH\nbBeR+OKId0XkjIsjgqrbov7tRJ9mjU22Vhv2A0UtPi4EDqa4JiKSQzSQL6vqm6muF/Ml4AYRuRbo\nAnQXkZdUdXKK6+4n+oxrS+zj14FWX1BrT09f/we4CkBEhgK5yQbybFR1h6oOUNUhqjqY6Cf2H4MI\nZFtEZDzwHeAGVa1Lcbk/AueLyCAR6QTcCoTxquSLwPuqOjeEWgCo6mOqWqSqQ4g+zjUhBBJVLQf2\nxb5vIfp93OoLTU5dKduwCHhRRN4D6oCUfzJPE+biiOeATsDq6EWaTap6byoKqWqjiEwh+opvFrBQ\nVVt9ZTAIIvIloBh4T0T+RPRz+5iqrkhl3TT7NvBLEckFyoA7WjvQFg8Y45j29PTVmIxgoTTGMRZK\nYxxjoTTGMRZKYxxjoTTGMRZKYxxjoTTGMf8PuSvpL7lBRvYAAAAASUVORK5CYII=\n",
1642 "text/plain": [
1643 "<matplotlib.figure.Figure at 0x7f03fd00c9b0>"
1644 ]
1645 },
1646 "metadata": {},
1647 "output_type": "display_data"
1648 }
1649 ],
1650 "source": [
1651 "trimmed2 = trim_loop(trimmed)\n",
1652 "print('{}\\n{}'.format(trimmed, trimmed2))\n",
1653 "plot_trace(trace_tour(trimmed2))"
1654 ]
1655 },
1656 {
1657 "cell_type": "code",
1658 "execution_count": 72,
1659 "metadata": {},
1660 "outputs": [
1661 {
1662 "data": {
1663 "text/plain": [
1664 "[Mistake(i=104, step=Step(x=-4, y=6, dir=<Direction.DOWN: 3>)),\n",
1665 " Mistake(i=105, step=Step(x=-5, y=6, dir=<Direction.LEFT: 4>)),\n",
1666 " Mistake(i=106, step=Step(x=-5, y=7, dir=<Direction.UP: 1>)),\n",
1667 " Mistake(i=107, step=Step(x=-5, y=8, dir=<Direction.UP: 1>)),\n",
1668 " Mistake(i=108, step=Step(x=-5, y=9, dir=<Direction.UP: 1>)),\n",
1669 " Mistake(i=115, step=Step(x=-5, y=12, dir=<Direction.LEFT: 4>)),\n",
1670 " Mistake(i=116, step=Step(x=-5, y=11, dir=<Direction.DOWN: 3>)),\n",
1671 " Mistake(i=127, step=Step(x=2, y=11, dir=<Direction.LEFT: 4>)),\n",
1672 " Mistake(i=130, step=Step(x=3, y=11, dir=<Direction.UP: 1>)),\n",
1673 " Mistake(i=132, step=Step(x=3, y=11, dir=<Direction.UP: 1>))]"
1674 ]
1675 },
1676 "execution_count": 72,
1677 "metadata": {},
1678 "output_type": "execute_result"
1679 }
1680 ],
1681 "source": [
1682 "mistake_positions(trace_tour(w[:130]))[-10:]"
1683 ]
1684 },
1685 {
1686 "cell_type": "code",
1687 "execution_count": 73,
1688 "metadata": {},
1689 "outputs": [
1690 {
1691 "name": "stdout",
1692 "output_type": "stream",
1693 "text": [
1694 "Step(x=40, y=36, dir=<Direction.UP: 1>)\n"
1695 ]
1696 },
1697 {
1698 "data": {
1699 "image/png": "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\nRK5CYII=\n",
1700 "text/plain": [
1701 "<matplotlib.figure.Figure at 0x7f03fcecd470>"
1702 ]
1703 },
1704 "metadata": {},
1705 "output_type": "display_data"
1706 }
1707 ],
1708 "source": [
1709 "w_tour_start = w #[:250]\n",
1710 "print(trace_tour(w_tour_start)[-1])\n",
1711 "plot_trace(trace_tour(w_tour_start))"
1712 ]
1713 },
1714 {
1715 "cell_type": "code",
1716 "execution_count": 74,
1717 "metadata": {},
1718 "outputs": [
1719 {
1720 "name": "stdout",
1721 "output_type": "stream",
1722 "text": [
1723 "RFFRRFFFRFFRFLLRFLFFLLLLFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLRRLRRRRFFFFFFRRRLLFFFFFFLRRRLLLRLLLLRFRLRFRRRFRLRLLRFRLFLLRFRFLRRRRLRFLLRLRRLFFFRLRRFFRFLRFLLFLFRLRLRLRRRLFFRLRRFFRRFFLLRLLFLLLFRFRFLRLFFLFRRRRLRRLRRLRFRRLRRRFRRRRLLRFLLRRFFRLRFFLFLFRRLLLRLFFFRFRLRLLFRRFLLRLFFFLLRLLRRLRFRFFFFFRRFFLFRFLRFRFLFLFRLFLFLRFFLFRLRRRLRRRRFFFRFLLRLFRFRRRLRFFFFFLLFRRLFRRFRFRFLRLLFRFFFLLRRFRRRRLFFFLFLLLFFLRRLRFLFLFFRLLFFRRFFLRLLRFLRLLFLFRLLLRFFFFFFFFLFLRLLRLRLRFLLFFFLFLFFLFRRRRRFFRLLFFFRLFFLFRLFFRFFFFRLRRRLLFLRRFLRFFLRRFRRFLRFLRRLFRRLFFFFRLFLFFLRFFFFFRLFLFLRFFFLLLFLLLFFLRRLFLFRRFRRFFRRRFFRFLFLLFLFRFRFLLLRRRLFRRFFRLRFLFLFLRRLFFFLFRLRFRFFRFLRRFFFFFLFRLRRFRLLRLLFFLLLFFLFFFRLFRFRRRRLFLFLLLLRLFRFRLRLLFLFLLLRRRLLLFRRFRLRFFRRRLLLFRLRLLFFLLRFFFFRLLRLRLLLRLFFFRRLRFRFFRRRFFFRFFFFLRFLFRFLRFRRLLLRLLFRRLFFLRRFFFRLLFRLFLRRFLRLLRRFFLLFLLLFFFFRRFFRLFFLLFLLFRFRLRFLRFFRFRLRLLLFFFLFLRFRFRFLRRLLLLLRFRRLFLLLLRRFFFLLRFLFFRLLLLFLFRLRFFFFFLRLLFFLLLFFLLRRFLRRFLRLRRLLLRRRRRLLLFLRRLFFFRFLRRLF\n",
1724 "RFFRRFFFRFLRFRFLLRFLLRLRRLFRLRRFFLLRLLRRFRFLRLFFLFLRRLRRLRLFLLRRFFLRLLFFFFFRRFFLFRLFFRLLRRFLFFFLRFLRRLRFLFLFFRLLFFRRFFLRLFRFFRLFFLRRFLRFLRRLFRRLFFFFRLFLFFLRFFLFRFLRRFFFFFLFRLRRFRLLRLLFRFLFFFRLFRFLFLRLRFFFFFLFFRFFFFLRFLFRFLRLRLFFLRRFFFRLLFRLFLRRFLRLLRLFFRFLRRLFLLRFLFFRFLFRLRFFFFFLRLLFRFLLRRFLRRFLRLRFLRRLFFFRFLRRLF\n",
1725 "Step(x=40, y=36, dir=<Direction.UP: 1>)\n"
1726 ]
1727 },
1728 {
1729 "data": {
1730 "image/png": "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\n",
1731 "text/plain": [
1732 "<matplotlib.figure.Figure at 0x7f03fd292eb8>"
1733 ]
1734 },
1735 "metadata": {},
1736 "output_type": "display_data"
1737 }
1738 ],
1739 "source": [
1740 "w_tour = w_tour_start\n",
1741 "w_trace = trace_tour(w_tour)\n",
1742 "mks = mistake_positions(w_trace)\n",
1743 "while len(mks) > 1:\n",
1744 "# print(len(mks))\n",
1745 " w_tour = trim_loop(w_tour)\n",
1746 " w_trace = trace_tour(w_tour)\n",
1747 " mks = mistake_positions(w_trace)\n",
1748 "print('{}\\n{}\\n{}'.format(w_tour_start, w_tour, trace_tour(w_tour)[-1]))\n",
1749 "plot_trace(trace_tour(w_tour))"
1750 ]
1751 },
1752 {
1753 "cell_type": "code",
1754 "execution_count": 75,
1755 "metadata": {
1756 "collapsed": true
1757 },
1758 "outputs": [],
1759 "source": [
1760 "def trim_all_loops(tour, mistake_reduction_attempt_limit=10):\n",
1761 " trace = trace_tour(tour)\n",
1762 " mistake_limit = 1\n",
1763 " if trace[-1].x == 0 and trace[-1].y == 0:\n",
1764 " mistake_limit = 0\n",
1765 " mistakes = mistake_positions(trace)\n",
1766 " \n",
1767 " old_mistake_count = len(mistakes)\n",
1768 " mistake_reduction_tries = 0\n",
1769 " \n",
1770 " while len(mistakes) > mistake_limit and mistake_reduction_tries < mistake_reduction_attempt_limit:\n",
1771 " tour = trim_loop(tour)\n",
1772 " trace = trace_tour(tour)\n",
1773 " mistakes = mistake_positions(trace)\n",
1774 " if len(mistakes) < old_mistake_count:\n",
1775 " old_mistake_count = len(mistakes)\n",
1776 " mistake_reduction_tries = 0\n",
1777 " else:\n",
1778 " mistake_reduction_tries += 1\n",
1779 " if mistake_reduction_tries >= mistake_reduction_attempt_limit:\n",
1780 " return ''\n",
1781 " else:\n",
1782 " return tour"
1783 ]
1784 },
1785 {
1786 "cell_type": "code",
1787 "execution_count": 76,
1788 "metadata": {},
1789 "outputs": [
1790 {
1791 "data": {
1792 "text/plain": [
1793 "'RFFRRFFFRFLRFRFLLRFLLRLRRLFRLRRFFLLRLLRRFRFLRLFFLFLRRLRRLRLFLLRRFFLRLLFFFFFRRFFLFRLFFRLLRRFLFFFLRFLRRLRFLFLFFRLLFFRRFFLRLFRFFRLFFLRRFLRFLRRLFRRLFFFFRLFLFFLRFFLFRFLRRFFFFFLFRLRRFRLLRLLFRFLFFFRLFRFLFLRLRFFFFFLFFRFFFFLRFLFRFLRLRLFFLRRFFFRLLFRLFLRRFLRLLRLFFRFLRRLFLLRFLFFRFLFRLRFFFFFLRLLFRFLLRRFLRRFLRLRFLRRLFFFRFLRRLF'"
1794 ]
1795 },
1796 "execution_count": 76,
1797 "metadata": {},
1798 "output_type": "execute_result"
1799 }
1800 ],
1801 "source": [
1802 "w_trimmed = trim_all_loops(w)\n",
1803 "w_trimmed"
1804 ]
1805 },
1806 {
1807 "cell_type": "code",
1808 "execution_count": 77,
1809 "metadata": {},
1810 "outputs": [
1811 {
1812 "data": {
1813 "image/png": "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\n",
1814 "text/plain": [
1815 "<matplotlib.figure.Figure at 0x7f03fcfd4358>"
1816 ]
1817 },
1818 "metadata": {},
1819 "output_type": "display_data"
1820 }
1821 ],
1822 "source": [
1823 "plot_trace(trace_tour(trim_all_loops(w)))"
1824 ]
1825 },
1826 {
1827 "cell_type": "code",
1828 "execution_count": 78,
1829 "metadata": {
1830 "collapsed": true
1831 },
1832 "outputs": [],
1833 "source": [
1834 "def reverse_tour(tour):\n",
1835 " def swap(tour_step):\n",
1836 " if tour_step == 'R':\n",
1837 " return 'L'\n",
1838 " elif tour_step == 'L':\n",
1839 " return 'R'\n",
1840 " else:\n",
1841 " return tour_step\n",
1842 " \n",
1843 " return ''.join(swap(s) for s in reversed(tour))"
1844 ]
1845 },
1846 {
1847 "cell_type": "code",
1848 "execution_count": 79,
1849 "metadata": {},
1850 "outputs": [
1851 {
1852 "data": {
1853 "image/png": "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\n",
1854 "text/plain": [
1855 "<matplotlib.figure.Figure at 0x7f03fd7e2940>"
1856 ]
1857 },
1858 "metadata": {},
1859 "output_type": "display_data"
1860 }
1861 ],
1862 "source": [
1863 "plot_trace(trace_tour(w_trimmed))"
1864 ]
1865 },
1866 {
1867 "cell_type": "code",
1868 "execution_count": 80,
1869 "metadata": {},
1870 "outputs": [
1871 {
1872 "data": {
1873 "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",
1874 "text/plain": [
1875 "<matplotlib.figure.Figure at 0x7f03fcf89198>"
1876 ]
1877 },
1878 "metadata": {},
1879 "output_type": "display_data"
1880 }
1881 ],
1882 "source": [
1883 "plot_trace(trace_tour(reverse_tour(w_trimmed)))"
1884 ]
1885 },
1886 {
1887 "cell_type": "code",
1888 "execution_count": 81,
1889 "metadata": {},
1890 "outputs": [
1891 {
1892 "data": {
1893 "image/png": "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\nH6uGZnvGhXMvAAAAAElFTkSuQmCC\n",
1894 "text/plain": [
1895 "<matplotlib.figure.Figure at 0x7f03fdaa1ef0>"
1896 ]
1897 },
1898 "metadata": {},
1899 "output_type": "display_data"
1900 }
1901 ],
1902 "source": [
1903 "w1 = random_walk()\n",
1904 "w2 = random_walk()\n",
1905 "plot_trace(trace_tour(w1))\n",
1906 "w1bounds = bounds(trace_tour(w1))\n",
1907 "plot_trace(trace_tour(w2), colour='r', xybounds=w1bounds)"
1908 ]
1909 },
1910 {
1911 "cell_type": "code",
1912 "execution_count": 82,
1913 "metadata": {},
1914 "outputs": [
1915 {
1916 "name": "stdout",
1917 "output_type": "stream",
1918 "text": [
1919 "w1 = 'RLFFFLFFLRFLFLRFFFFFFLLFFFLFLFLFFLLLFFFFFRFFLRFLFFLFFFFLLFLLRFFFFLRLFRRLLFLRFLFLLFFLFFRFFFFLRFLLRFFLRFFRFRLFRFRFFLFLRFRLLFRLFFLLLFFFRFLFFLFLLRFRFLFRRFRFLLFRFFFFLFFFRLFFFFRFRFRFLFFRFFFLFRFFRRLRFRFFLFFFRRFLFFRRRFLFFLRFFLLFFLFRFFRFRRFFRRLLLFFFFFFFRFLFLFLLFRFFFLFFFRRFFLFFRRFFLRFRLRFFFRFRLFRLFRRFLLLFLRFLFRFFRLFLFRFFFFLFRLFFRRFFRFRFFFFFFLFLRLFFFFRLRFFRLFFLFFFLRFFFFLRFFRFFRFRFFRFFRRRFFRFLRLLLFLFFFLFRFFRLFRLLFLFLFLLRFLFLFLFLFFRFFRRLLFRRLRLFFFFLRLRRRFFRFFRRFFRLLFFLLLLFLLLLFFRLFFRRRRFFRRRRLFFLFFFRLLRLFRLRFLFRFRRFLLLFFFFFLFFRRRFRLRLFRLLLRFLFFFFFFFFRRFFFFRLRRFFRLFFRLFFLLLFFLFFFFFLFFLFRRRFLFLFFFFLFLFLLLRFRFLFRLFLFFLRFLLFLRLLLFLFRRLFFRLFLRLFFRFLFLFFFRFRFRFFRFFRRFFRFRFFFFFRRFFLFFRFLRFFFLFFFFRFRLFRFFRRFFFFLFFFFLRFRFFLLLRLRRLLFFLRLLFFFRFFFFFFLFRFFFLRFRLRFFLLFFRLRFFFFRRFRFFLRFRFRFLFFFRFFFFRLFLRLFFLRLFFFFFRLFLRFFRLLFFRLFRFFFLRLRFLFLFFFLFFFFLFLRRFFRLLFFLFFLFRLFFFRLFRFRFFLFFLFLLFRLLFFRFLFLFFFFLFLRFRFRLFRRFLLRRRRFFRFLFRFFLLFRRRFRLRRLRFFLRLFLLFLLFFFRLLFLRFRLFLRFLRFFRLLRLRRFFFLLFFLLFLFRFLLLRFRRLFLLLRRFFFRFFFF\n",
1920 "w2 = 'LFLFFFFFFRFFFRRLLFFFFLFFFLFFLFFLLFFFLFLLFFRFRRLFFRLLLRFRLRLRRFFFFLRFLFLLLLRRFFRFLFFFFRFFFLLLRFRFFFLFRRFRLFFLLFLRFFFRFRLFFLFFFRLFFFRFFFRFRFRFFRFRRRLFRFRRFFRFRLRLFLFFFRLFRLRFLRFFFLFFRRFFRLLLLFRFFRFLRFFRFLLLRRFLFFFLLRLLFFFFLRFLLLLFRRFLRFFFLFFFLFRLLFRRLLLLFRLRRLRLFFFRFFFFFLRRFFLFFRFLRFLLFFFLFRLLLFRRRFFLLLLRFFLFFFRLRRFFFFLLRFFLFRFLRFRFLLFFRRLLFFRLRFFFRLFLRFLLFRLLLRRRFRFRRFFFRFFFFFLRFFRLFFLFFRRRRLFFRFRLFFRLRLFFLRFFRLLFFRFFLLRRLRRLRLLFLLFRRFLFFLLFFFLFFRFRFLFRFLFFFFLFLRRFLRLRLFLFRFFLFLFFFFLRLLFRFLLRFLRRFFFLRFFLLRFFRRFLFFRFRFFFFFFFFLFLRLFLFFFFLLRFRFLFFLRFFRFFFLLFRLFLRLFFLRFFLLLFFRFLFFRFFFFLRRFRLFFFLFLLLLFFFFLRFFRFFFRFRLRRLRFFRFFLLFLFRFFFRRFFFFFFFRFRLFFFLFRFFFFFFRFRLRFFLLLFFLRFRLLLLLLRFFFFLFFLFFLFRLFRLFFFLLFFFFRRRFRFRFLFLFFRLFFFLLRRFFFFLLFFFFFRRFFLRFLFFFFFLLFFFRFFLFLRFRFFFLFFFFRLRRFFRRFLRFLLLRRLRFLLFFRRLFFFFLFFRFFLRLLRRRLLLFFFLLFFLFFFFFFFRFFLLFFLRLFFFRFLFFFLLFRRFLRRFLLRFFLRFFFLFFFFLRFRRFRLLFFFFFFFFFLFFFFFRFRFLLLFFLRLFLFRLLFLFFRFFRRFLFFRRRFLFLLLFRFLFLFFFFLLLLLFFFRFFFLRFRLRFFLFFLFFFRFFRLFLFRFRFLFF\n"
1921 ]
1922 }
1923 ],
1924 "source": [
1925 "print(\"w1 = '{}\".format(w1))\n",
1926 "print(\"w2 = '{}\".format(w2))"
1927 ]
1928 },
1929 {
1930 "cell_type": "code",
1931 "execution_count": 83,
1932 "metadata": {
1933 "collapsed": true
1934 },
1935 "outputs": [],
1936 "source": [
1937 "def wander_near(locus, current, limit=10):\n",
1938 " valid_proposal = False\n",
1939 " while not valid_proposal:\n",
1940 " s = random.choice('FFFRL')\n",
1941 " if s == 'F':\n",
1942 " proposed = advance(current, current.dir)\n",
1943 " elif s == 'L':\n",
1944 " proposed = advance(current, turn_left(current.dir))\n",
1945 " elif s == 'R':\n",
1946 " proposed = advance(current, turn_right(current.dir))\n",
1947 " if abs(proposed.x - locus.x) < limit and abs(proposed.y - locus.y) < limit:\n",
1948 " valid_proposal = True\n",
1949 "# print('At {} going to {} by step {} to {}'.format(current, locus, s, proposed))\n",
1950 " return s, proposed"
1951 ]
1952 },
1953 {
1954 "cell_type": "code",
1955 "execution_count": 84,
1956 "metadata": {
1957 "collapsed": true
1958 },
1959 "outputs": [],
1960 "source": [
1961 "def seek(goal, current):\n",
1962 " dx = current.x - goal.x\n",
1963 " dy = current.y - goal.y\n",
1964 "\n",
1965 " if dx < 0 and abs(dx) > abs(dy): # to the left\n",
1966 " side = 'left'\n",
1967 " if current.dir == Direction.RIGHT:\n",
1968 " s = 'F'\n",
1969 " elif current.dir == Direction.UP:\n",
1970 " s = 'R'\n",
1971 " else:\n",
1972 " s = 'L'\n",
1973 " elif dx > 0 and abs(dx) > abs(dy): # to the right\n",
1974 " side = 'right'\n",
1975 " if current.dir == Direction.LEFT:\n",
1976 " s = 'F'\n",
1977 " elif current.dir == Direction.UP:\n",
1978 " s = 'L'\n",
1979 " else:\n",
1980 " s = 'R'\n",
1981 " elif dy > 0 and abs(dx) <= abs(dy): # above\n",
1982 " side = 'above'\n",
1983 " if current.dir == Direction.DOWN:\n",
1984 " s = 'F'\n",
1985 " elif current.dir == Direction.RIGHT:\n",
1986 " s = 'R'\n",
1987 " else:\n",
1988 " s = 'L'\n",
1989 " else: # below\n",
1990 " side = 'below'\n",
1991 " if current.dir == Direction.UP:\n",
1992 " s = 'F'\n",
1993 " elif current.dir == Direction.LEFT:\n",
1994 " s = 'R'\n",
1995 " else:\n",
1996 " s = 'L'\n",
1997 " if s == 'F':\n",
1998 " proposed = advance(current, current.dir)\n",
1999 " elif s == 'L':\n",
2000 " proposed = advance(current, turn_left(current.dir))\n",
2001 " elif s == 'R':\n",
2002 " proposed = advance(current, turn_right(current.dir))\n",
2003 " \n",
2004 "# print('At {} going to {}, currently {}, by step {} to {}'.format(current, goal, side, s, proposed))\n",
2005 "\n",
2006 " return s, proposed"
2007 ]
2008 },
2009 {
2010 "cell_type": "code",
2011 "execution_count": 85,
2012 "metadata": {
2013 "collapsed": true
2014 },
2015 "outputs": [],
2016 "source": [
2017 "def guided_walk(loci, locus_limit=5, wander_limit=10, seek_step_limit=20, return_anyway=False):\n",
2018 " trail = ''\n",
2019 " current = Step(0, 0, Direction.RIGHT) \n",
2020 " l = 0\n",
2021 " finished = False\n",
2022 " while not finished:\n",
2023 " if abs(current.x - loci[l].x) < locus_limit and abs(current.y - loci[l].y) < locus_limit:\n",
2024 " l += 1\n",
2025 " if l == len(loci) - 1:\n",
2026 " finished = True\n",
2027 " s, proposed = wander_near(loci[l], current, limit=wander_limit)\n",
2028 " trail += s\n",
2029 " current = proposed\n",
2030 "# print('!! Finished loci')\n",
2031 " seek_steps = 0\n",
2032 " while not (current.x == loci[l].x and current.y == loci[l].y) and seek_steps < seek_step_limit:\n",
2033 "# error = max(abs(current.x - loci[l].x), abs(current.y - loci[l].y))\n",
2034 "# s, proposed = wander_near(loci[l], current, limit=error+1)\n",
2035 " s, proposed = seek(loci[l], current)\n",
2036 " trail += s\n",
2037 " current = proposed\n",
2038 " seek_steps += 1\n",
2039 " if seek_steps >= seek_step_limit and not return_anyway:\n",
2040 " return ''\n",
2041 " else:\n",
2042 " return trail"
2043 ]
2044 },
2045 {
2046 "cell_type": "code",
2047 "execution_count": 86,
2048 "metadata": {},
2049 "outputs": [
2050 {
2051 "data": {
2052 "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",
2053 "text/plain": [
2054 "<matplotlib.figure.Figure at 0x7f03fdaa1f98>"
2055 ]
2056 },
2057 "metadata": {},
2058 "output_type": "display_data"
2059 }
2060 ],
2061 "source": [
2062 "def square_tour(a=80):\n",
2063 " \"a is width of square\"\n",
2064 " return ('F' * a + 'L') * 4\n",
2065 "\n",
2066 "plot_trace(trace_tour(square_tour()))"
2067 ]
2068 },
2069 {
2070 "cell_type": "code",
2071 "execution_count": 87,
2072 "metadata": {},
2073 "outputs": [
2074 {
2075 "data": {
2076 "image/png": "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\nybOEYIzJ+/+3mLJIMXCXRQAAAABJRU5ErkJggg==\n",
2077 "text/plain": [
2078 "<matplotlib.figure.Figure at 0x7f03fcf938d0>"
2079 ]
2080 },
2081 "metadata": {},
2082 "output_type": "display_data"
2083 }
2084 ],
2085 "source": [
2086 "def cross_tour(a=50, b=40):\n",
2087 " \"a is width of cross arm, b is length of cross arm\"\n",
2088 " return ('F' * a + 'L' + 'F' * b + 'R' + 'F' * b + 'L') * 4\n",
2089 "\n",
2090 "plot_trace(trace_tour(cross_tour()))"
2091 ]
2092 },
2093 {
2094 "cell_type": "code",
2095 "execution_count": 88,
2096 "metadata": {},
2097 "outputs": [
2098 {
2099 "data": {
2100 "image/png": "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\n",
2101 "text/plain": [
2102 "<matplotlib.figure.Figure at 0x7f03fda6aeb8>"
2103 ]
2104 },
2105 "metadata": {},
2106 "output_type": "display_data"
2107 }
2108 ],
2109 "source": [
2110 "def quincunx_tour(a=60, b=30, c=50):\n",
2111 " \"a is length of indent, b is indent/outdent distance, c is outdent outer length\"\n",
2112 " return ('F' * a + 'R' + 'F' * b + 'L' + 'F' * c + 'L' + 'F' * c + 'L' + 'F' * b + 'R') * 4\n",
2113 "plot_trace(trace_tour(quincunx_tour()))"
2114 ]
2115 },
2116 {
2117 "cell_type": "code",
2118 "execution_count": 89,
2119 "metadata": {},
2120 "outputs": [
2121 {
2122 "data": {
2123 "image/png": "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\nWKIAAAAASUVORK5CYII=\n",
2124 "text/plain": [
2125 "<matplotlib.figure.Figure at 0x7f03fc91f7f0>"
2126 ]
2127 },
2128 "metadata": {},
2129 "output_type": "display_data"
2130 }
2131 ],
2132 "source": [
2133 "plot_trace(trace_tour(('F' * 10 + 'R' + 'F' * 5 + 'L' + 'F' * 10 + 'L' + 'F' * 10 + 'L' + 'F' * 5 + 'R') * 4))"
2134 ]
2135 },
2136 {
2137 "cell_type": "code",
2138 "execution_count": 90,
2139 "metadata": {},
2140 "outputs": [
2141 {
2142 "data": {
2143 "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",
2144 "text/plain": [
2145 "<matplotlib.figure.Figure at 0x7f03fd7f34e0>"
2146 ]
2147 },
2148 "metadata": {},
2149 "output_type": "display_data"
2150 }
2151 ],
2152 "source": [
2153 "heart_points = [Step(60, 50, Direction.UP), Step(50, 90, Direction.UP),\n",
2154 " Step(20, 70, Direction.UP), \n",
2155 " Step(-40, 90, Direction.UP), Step(-60, 80, Direction.UP), \n",
2156 " Step(0, 0, Direction.RIGHT)]\n",
2157 "\n",
2158 "heart_tour = ''\n",
2159 "current = Step(0, 0, Direction.RIGHT)\n",
2160 "\n",
2161 "for hp in heart_points:\n",
2162 " while not (current.x == hp.x and current.y == hp.y):\n",
2163 " s, proposed = seek(hp, current)\n",
2164 " heart_tour += s\n",
2165 " current = proposed\n",
2166 "\n",
2167 "plot_trace(trace_tour(heart_tour))\n",
2168 "\n",
2169 "def heart_tour_func(): return heart_tour"
2170 ]
2171 },
2172 {
2173 "cell_type": "code",
2174 "execution_count": 91,
2175 "metadata": {},
2176 "outputs": [
2177 {
2178 "data": {
2179 "text/plain": [
2180 "'LRLRFRFFLFRFLFLFFFFFFRFFFFLFRRFFRLFLLRFFFLFFFRFFFLLFFRRLFFFRRFFLFRRFRFLFRRLRFRLRLRRFFFFRRRLFLFFLLLFLRFFFFFFFFRRFLRFFFRFFLRFFFRFRLRFRFFFRFFFFFFFRRFRLFFFLLRFFRFLFFLFFLLFLFFFFFFLFLFLFRFRRLFFFRFFLRFFLFRFFLRFRFRFFFFRFRRRFFLLFFLFLLFLFFFFFLLFLLLRFLFFFFFFLLRLLFLLFLRFFFLFFFRFFFFRFFFFFFFFFFFFRFRFLFFLFFLFLFLFRFRFLFFFFFLFRLFLFLFFLLRRRLLLFFFFFFFFLFFLFFRRFFRFLLFFRFFFFLFFLFLFFFLLLFFFFFRFFRFLFFLRFFRFFFRFFLRLFFLFFRRFRFFRFFFLFRFRFFRFLFFFFRLFFFFLFFFLLFLFRRRFFFRLLFFLLFLFFLFRLFLRLRFFFFFRFFFRLFFRRFRFRRFRFFFRFLFLFLFFFRFFRLFFRRFFFFFFRLLLLFFLRRRFLFFFLRRFLLLFFFFFFLLFLFFRRRFFRRRFLFFLFRFLFFFLFFFFLFLFFLRFFFFRRFFRFRFFLLFRFLRFRFLFFRRFLFFFFLFFFLFFLFRLLFFLLLLLFRLLFFLFLLRRLLLLRRFFFLLFFRFFFFFFFFRRFFFLRFLLFRRFLFFFFFFFFFFLRFFFLFRFFLFLLLFFRFLFFLRLFFFLFLLFLFLFFRFRRFLLFFLFLFRRFFFFFFLRFLLFFLFLRFFRRFFFFFFFFFRRRRFFRRFRRFFFRFFFFFFFRLFFFRRFFLFFLLRRFRFFFRLLFFFLLRFFFLFRLFFRFRFRRFFFFFFFFFFRFRFFFRFRRRFRLFFLLFLLFLFFFFLFFRLFRLRFFRFLFFFFFFLFFFFFFFLFFFLFFLLFRFLLFRFLLLLLRFFFFFRFFFRFRFFFLLLLLFFFFLLFFFFRFFRLFFFRRRFFFLLFLFLRFFFFLLFLFRLFLFFFFFFFRRFRFFRFFRFFFLRLRFFLLFRFFFFFFFRFFFLFFLRLFFFFFFFFRFFRFFFRFFRFFFRRFFFFFFLFFFLFLFRFFRRFFRLFLFLLRFLRFRFRFFFFLLFFRLLFFLFFFLRFFFFFFRLFLFFFFFFRRRFFRFFFFFLFFFFFRFRFFFLFLFLFFLRFRRRLFRRRFLFFFFLFLRFRFRFFFRRLFFFLLFFLFLFFFFFLLFFFFFLFLLFRFFFRLLLFFFLFFFLFFFFFFFFRRLFFRLLFFRRFFFRRFFFFFRRFRFFRFRFFRFFLFFFFFFFFFFLLFFFFLLFFFFLFFFFFFFFLRFRRRFFFFFFFFRRRRLRFLLLRLFRRFRFRFRRRFRLFFFFLFLFFLFLLFRFFFRFFFRLFRFFLLLFFFRFFFFFRFFRFFFFRLRRRFFRLLRFFFLLFRLLFLLFFRFRFRFFFRFLLFLFFFFFFFFFFFFLFFLLFFLLFLFRFFFFRFRFRRFRRRFFFFRFFRFLLFRFLRFFFFFLFFFRFRFRFRFFFFFFRLRFLFRFFRRRRFFFFFFFFRRLRRFRRFFFFFFFRRRFRFFFFFFRFFRFFFFLFFRFLFFFRFFRFRLFLFFLFLLLFFFFFFFFLLLLLLLFFFRLLLFFFFRRFFFRRFLFLLFRFFFRFFLFFLFRFFFRFFFLFFFFFFLFFFLFFRLFFFFLFLFFFLRFFLRFFFLLRFFLLLRFRRFFLFFLLLFFFLFFFRFFRLFRFLRFRFFFRFRFFFRFRFRLFFFLLFFFFRRFFLLFRLRLLFRFFFFFFFFFFRFFFFFFFFFFFFRFFFLRRRFLFFRRFFFLRFRRFLFFFFRFFFRRFFFLLFFRRFRRLRFFRFFFFFFFFFFFRRLRFRFLFFFFFFFLFLFFFFFFFFFFFFFLFLLFLRFRRFFFRRFRRFLFLRFFFRLFFFFLFFFLFLRFFRLFFFFRFRFLFRFFRFFLLFFLRFRLFFLLFFFRFLFFLFLFFFLRLFLRFFFFFLFLFFLLFFFFLRFRFLLLRLFFFFLFFFFLLFLRRRRRRFFFFFFRFFLFRFFFFFFRFFFFFFLFFFFRFRFFRFFLFFFFFRFRFFLLFRFRLFFFFFFLLFFFFFFFFLLLRFFFFFFRFFRFLFFRLR'"
2181 ]
2182 },
2183 "execution_count": 91,
2184 "metadata": {},
2185 "output_type": "execute_result"
2186 }
2187 ],
2188 "source": [
2189 "# lc = trace_tour(('F' * 50 + 'L') * 4)\n",
2190 "# lc = trace_tour(('F' * 50 + 'L' + 'F' * 20 + 'R' + 'F' * 20 + 'L') * 4)\n",
2191 "# lc = trace_tour(('F' * 60 + 'R' + 'F' * 30 + 'L' + 'F' * 60 + 'L' + 'F' * 60 + 'L' + 'F' * 30 + 'R') * 4)\n",
2192 "lc = trace_tour(heart_tour)\n",
2193 "rw = guided_walk(lc, wander_limit=8)\n",
2194 "rw"
2195 ]
2196 },
2197 {
2198 "cell_type": "code",
2199 "execution_count": 92,
2200 "metadata": {},
2201 "outputs": [
2202 {
2203 "data": {
2204 "image/png": "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\n",
2205 "text/plain": [
2206 "<matplotlib.figure.Figure at 0x7f03fd0eab00>"
2207 ]
2208 },
2209 "metadata": {},
2210 "output_type": "display_data"
2211 }
2212 ],
2213 "source": [
2214 "plot_trace(trace_tour(rw))"
2215 ]
2216 },
2217 {
2218 "cell_type": "code",
2219 "execution_count": 93,
2220 "metadata": {},
2221 "outputs": [
2222 {
2223 "data": {
2224 "image/png": "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\nmaU4RMws5f8Az4SYkuCKQGwAAAAASUVORK5CYII=\n",
2225 "text/plain": [
2226 "<matplotlib.figure.Figure at 0x7f03fc90abe0>"
2227 ]
2228 },
2229 "metadata": {},
2230 "output_type": "display_data"
2231 }
2232 ],
2233 "source": [
2234 "rw_trimmed = trim_all_loops(rw)\n",
2235 "plot_trace(trace_tour(rw_trimmed))"
2236 ]
2237 },
2238 {
2239 "cell_type": "code",
2240 "execution_count": 94,
2241 "metadata": {},
2242 "outputs": [
2243 {
2244 "data": {
2245 "text/plain": [
2246 "4"
2247 ]
2248 },
2249 "execution_count": 94,
2250 "metadata": {},
2251 "output_type": "execute_result"
2252 }
2253 ],
2254 "source": [
2255 "len(rw_trimmed)"
2256 ]
2257 },
2258 {
2259 "cell_type": "code",
2260 "execution_count": 95,
2261 "metadata": {},
2262 "outputs": [
2263 {
2264 "data": {
2265 "text/plain": [
2266 "(250,\n",
2267 " 92,\n",
2268 " 'LFLRRFFFFRFRFRLLFFFFLFFFFLFLRFFRFRLLFRFLRFFLFFFLFRLRFFLFLFRLFRFFFFRFLFFFFFLFFFLRRLFFFFLLRFRL')"
2269 ]
2270 },
2271 "execution_count": 95,
2272 "metadata": {},
2273 "output_type": "execute_result"
2274 },
2275 {
2276 "data": {
2277 "image/png": "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\nBPf/AaHHidH8UAAMAAAAAElFTkSuQmCC\n",
2278 "text/plain": [
2279 "<matplotlib.figure.Figure at 0x7f03fcf7c438>"
2280 ]
2281 },
2282 "metadata": {},
2283 "output_type": "display_data"
2284 }
2285 ],
2286 "source": [
2287 "lc = trace_tour(square_tour(a=10))\n",
2288 "rw = guided_walk(lc, wander_limit=4, locus_limit=2)\n",
2289 "rw_trimmed = trim_all_loops(rw)\n",
2290 "plot_trace(trace_tour(rw_trimmed))\n",
2291 "len(rw), len(rw_trimmed), rw_trimmed"
2292 ]
2293 },
2294 {
2295 "cell_type": "code",
2296 "execution_count": 96,
2297 "metadata": {
2298 "collapsed": true
2299 },
2300 "outputs": [],
2301 "source": [
2302 "# success_count = 0\n",
2303 "# while success_count <= 20:\n",
2304 "# lc = trace_tour(square_tour(a=10))\n",
2305 "# rw = guided_walk(lc, wander_limit=4, locus_limit=2)\n",
2306 "# if rw:\n",
2307 "# rw_trimmed = trim_all_loops(rw)\n",
2308 "# if len(rw_trimmed) > 10:\n",
2309 "# with open('small-squares.txt', 'a') as f:\n",
2310 "# f.write(rw_trimmed + '\\n')\n",
2311 "# success_count += 1"
2312 ]
2313 },
2314 {
2315 "cell_type": "code",
2316 "execution_count": 97,
2317 "metadata": {
2318 "collapsed": true
2319 },
2320 "outputs": [],
2321 "source": [
2322 "# success_count = 0\n",
2323 "# while success_count <= 20:\n",
2324 "# lc = trace_tour(square_tour())\n",
2325 "# rw = guided_walk(lc)\n",
2326 "# if rw:\n",
2327 "# rw_trimmed = trim_all_loops(rw)\n",
2328 "# if len(rw_trimmed) > 10:\n",
2329 "# with open('large-squares.txt', 'a') as f:\n",
2330 "# f.write(rw_trimmed + '\\n')\n",
2331 "# success_count += 1"
2332 ]
2333 },
2334 {
2335 "cell_type": "code",
2336 "execution_count": 98,
2337 "metadata": {
2338 "collapsed": true
2339 },
2340 "outputs": [],
2341 "source": [
2342 "# success_count = 0\n",
2343 "# while success_count <= 20:\n",
2344 "# lc = trace_tour(cross_tour())\n",
2345 "# rw = guided_walk(lc)\n",
2346 "# if rw:\n",
2347 "# rw_trimmed = trim_all_loops(rw)\n",
2348 "# if len(rw_trimmed) > 10:\n",
2349 "# with open('cross.txt', 'a') as f:\n",
2350 "# f.write(rw_trimmed + '\\n')\n",
2351 "# success_count += 1"
2352 ]
2353 },
2354 {
2355 "cell_type": "code",
2356 "execution_count": 99,
2357 "metadata": {
2358 "collapsed": true
2359 },
2360 "outputs": [],
2361 "source": [
2362 "# success_count = 0\n",
2363 "# while success_count <= 20:\n",
2364 "# lc = trace_tour(quincunx_tour())\n",
2365 "# rw = guided_walk(lc)\n",
2366 "# if rw:\n",
2367 "# rw_trimmed = trim_all_loops(rw)\n",
2368 "# if len(rw_trimmed) > 10:\n",
2369 "# with open('quincunx.txt', 'a') as f:\n",
2370 "# f.write(rw_trimmed + '\\n')\n",
2371 "# success_count += 1"
2372 ]
2373 },
2374 {
2375 "cell_type": "code",
2376 "execution_count": 100,
2377 "metadata": {},
2378 "outputs": [
2379 {
2380 "data": {
2381 "image/png": "iVBORw0KGgoAAAANSUhEUgAAARoAAAD7CAYAAAC13FspAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGcdJREFUeJzt3XmQlPW97/H3dzaHcRhAZDG4UMhFlFyLRVklojGguXEJ\nOcaYyE00EWI0mGgUTKLAzY05RHOoA2oiaixNXKpyqOMxVS5gBDfQQxg3IgPohYBsAioDMvt87x+z\niAjM80w/v+6ens+rqqu6Z57f8/t2T89nunue3/M1d0dEJKS8TBcgIrlPQSMiwSloRCQ4BY2IBKeg\nEZHgFDQiElxBuiYyM/0fXSTHubsd6utpfUXj7p3+MmvWrIzXkOmLHoPcfByORG+dRCQ4BY2IBKeg\nSbMJEyZkuoSM02PQpDM9DtbWe6vEJjLzdM0lIulnZng2fBgsIp2TgkZEgoscNGb2gJntMLO3Dvja\nb81sjZm9YWaLzKwsTJki0pHFeUXzIDDpoK8tBoa4+1BgPXBLUoWJSO6IHDTu/jLw0UFfe87dG5tv\nvgocn2BtIpIjkvyM5irg6QT3J5J27s6KFSuoqqqKNe7111/no48+anvDTiqRtU5m9gugzt0fTWJ/\nIpkyatQoVq5cmZa5HnnkEb797W+nZa5Mi3UcjZmdBPzV3U8/4GvfBaYC57p7zRHG+qxZs1pvT5gw\noVMdsCQdg5lx3HHHMWbMGEaPHh1pTEFBAY8++iglJSV87Wtfa3P7Tz75hDlz5gC0uUYomy1btoxl\ny5a13p4zZ85hj6OJGzT9aQqa/9l8+3zgd8CX3H13G2N1wJ5kPTNjyZIlnHfeecHmaGhooKCg6c1E\nLv1OJHLAnpk9CiwHBpnZJjO7ElgAlAJLzKzczO5JpGKRHJafnw80vU3rLCJ/RuPuh3oz+WCCtYhI\njtKRwSISnIJGRIJT0IhIcAoaEQlOQSMiwSloRCQ4BY2IBKegEWn2zDPPAPDrX/86w5XkHgWNSLNB\ngwYBcOmllwafq7i4mF69egWfJ1soaESaDRgwAICTTz456Dx79uyhurqapUuXBp0nmyhoRA7SshYp\nlOLiYqBpFXdnoaARSbOjjjoK6FyLKhU0IhKcgkZEglPQiEhwChoRCU5BIyLBKWhEJLhUW+L2MLPF\nZrbWzJ41s25hyhSRjizVlrgzgefc/RTgedQSV0QOIaWWuMDFwEPN1x8CLkmorpY5qak5bKuow8rF\nMbnUliOd4jzer7zyCgB/+MMfQpXTaaX6GU1vd98B4O7bgcRWif3jH/+gT58+FBcXY2aRLoWFhQwZ\nMiTWGDNj1KhRsceMHz8+9pgxY8bEHjN06FCKi4vJy8uLPOaUU05h7dq1Sf0oOiR354orroj1eJ91\n1lkAnH766W3sPRmlpaVpmScbJNISN6rZs2e3Xm+rU+UPfvADdu7cCUBhYWGk/Xfp0qX18G4za23S\ndSR5eXmtY+LMVVRUlJYx7alt3bp1XHbZZbzxxhuRts9VjzzySOv1qI/dBRdcwI033hiqJACqq6sB\n2LRpU9B5Qju4U+WRpNQS18zWABPcfYeZ9QWWuvuphxkbq1PlqaeeSkVFBXV1dZEC40B1dXWRn1i5\nNubDDz+kZ8+eQG51QYzL3cnLy6O6uvozYZ0NKisr6dat6f8mufQzSqRTZcu+mi8tngS+13z9u8B/\nxa6uDXFDBqL/9crFMccccwzQ9JdZ2vd4h1ZWVgZoUeUhHaYl7r8CXzGztcB5zbdFRD4j1Za40BQw\nIiKHpSODRSQ4BY2IBKegEZHgFDQiEpyCRkSCU9CISHBZGTTuTkVFBQC1tbUZrkY6omeffRb4tPuk\nZFZa1zrFUVRURG1tLfX19Z9ZIyTRhO5NlO3ef/99ALZs2ZLhSg6vvLwcM2PcuHGRti8tLeXuu+8O\n3uAuhFhrnVKaKOZap3POOYdVq1ZRWVkZsKrcU1tbS1lZGeeeey5PPfVUpsvJmLq6OoqKiqipqcnK\nP1Tz58/n+uuvjz2uX79+bN68GbNDLinKqCOtdcraoGlZVJlLi87SYceOHfTt2xfIrQV7cbUsqmxo\naCAvLys/IaCyspLCwkK6dOnS5rb19fWt67aqqqpau11mkyQXVUqW69OnD6BFlR1BWVlZpJCBpsXF\nJSUlAFkZMm1R0IhIcAoaEQlOQSMiwSloRCQ4BY2IBKegEZHgEgkaM/upma02s7fM7BEzy74jpEQk\nY1IOGjP7AvBjYHhzd4QC4Fup7ldEckdSb53ygaPNrAAoAbamusOWRZWNjY2p7ko6oVWrVgHw97//\nPcOVCCSwqNLdt5rZ74BNwH5gsbs/l+I+W6/v3bu3tQeORPfqq68yYMAApkyZEml7d2f16tX87W9/\n4yc/+UmkMY2NjezevZvf//733HbbbZFrq6+v5/bbb2fGjBmRey4VFhZy6623Mm3atNajn49kxYoV\nALz44ouMHDkycm3ZrKioiP3799OlSxduvvnmSGMaGxuprKxk/vz5sX5G3/nOdxg0aFB7S/2clNc6\nmVl3YBFwKbAH+A/gL+7+6EHb+axZs1pvt9Wp8oILLmD16tVs3rw5pfo6o+nTp7NgwYJMl3FYJSUl\n7N+/P9aYnj17snv37lhjTjzxRNasWdN66H5H98c//pHvf//7scfl5+fT0NAQa0xxcTE7d+48Ytve\ngztVzpkzJ9yiSjP7F2CSu1/dfHsKMMrdrztoOy2qTKP169fTvXt3evWK3g5969at1NbW0r9//8hj\nPv74Y7Zt28appx6yQekhVVVVUVFRwbBhwyKPqa+vp7y8nDPPPDMrVy6ny44dO9i3b1+sU0VUVlay\nadMmvvjFL0bavqioiLq6OlasWMHo0aMjzxN09baZjQQeAM4EaoAHgZXufvdB2yloRDqAuXPnMnPm\nzNi/e0FXb7v7f9P0dul14E2aWuYuTHW/IpIZIc7fk8gZ9tx9DjAniX2JSO7RkcEiEpyCRkSCU9CI\nSHAKGhEJTkEjIsEpaEQkuKwNmpZFlTpgT6Tjy8qgOTBc9uzZk8FKRCQJWRk0ZsYll1zCoEGD6N69\ne6bLEelU3J0ePXok2vdenSpF5DPKysrYu3cvL7zwAl/60pcij1OnShGJ7Lrrmk68MH78+MT2qaAR\nkc9oObVIkqfjUNCISHAKGhEJTkEjIsEpaEQkOAWNiASXVKfKbmb2FzNbY2b/MLNRSexXRHJDIqfy\nBP4deMrdLz2giZyICJBA0JhZV2C8u38PwN3rgcpU99uyqFJEOr4k3joNAHaZ2YNmVm5mC82sSyo7\nPHDZwccffxxpzIoVK5g/fz41NTWpTC0iASQRNAXAcOBudx9OU1vcmans0MyYMWMGAD169MDM2ryM\nHTuW66+/nqFDh6Z8h0Q6s4KCArp165Zo3/skGsj1AVa4+4Dm22cBM9z9woO2i9USF4jVxnP58uXM\nnDmT5cuXayGmSAq+8IUvsG3bNpYtW8bZZ5992O3S2hIXwMxeAK5293VmNgsocfcZB20Ta/V2e1x7\n7bXcc889ChqRFPzwhz/k3nvvpa6ujoKC6B/jHmn1dlL/dZoOPGJmhcD/A65MaL8ikmannHIKQKyQ\naUtSnSrfpKn3tojI5+jIYBEJTkEjIsEpaEQkOAWNiASnoBGR4BQ0IhJcTgXNjh07Ml2CiBxCVgfN\n2rVrWbp0aeTtFy1aBMDq1atDlSQi7ZDcoX8JW7hwIdOmTYs9rl+/fpx22mkBKhLpHAoLC1uWEyTW\nciVrO1UOHjyYtWvXMmnSJG688cbI40aOHEm3bt3aU6KI0LQEYd26dbz88suMGzcu8rh0rHVKXEuS\nPvPMMxmuRKRzGTp0KOvWrWPYsGGJ7TOrP6MRkfQbPXo0ACUlyZ2RV0EjIsEpaEQkOAWNiASnoBGR\n4BQ0IhJcYkFjZnnN7VaeTGqfIpIbknxFcz3wToL7E5EckVTv7eOBrwL3J7E/gOrq6qR2JSIZltQr\nmnnATUAi6xncnY0bNwLRO1WK5LJNmzaxffv2WGN27drFe++9F2vMJ598wrZt22KNiSKJ3tv/C9jh\n7m+Y2QQg5VVYZsbEiROpqKjQuiXJSTfddBN33nlnpstImyTWOo0DLjKzrwJdgK5m9rC7/++DN5w9\ne3br9bY6VW7dupVNmzYltnpUJFt8+OGHrSEzc2a07tHz5s1j4sSJDBkyJPI8Dz/8MP369WPSpEnU\n19dHGvP000+zZ88e/vSnP7W57cGdKo8k0dXbZnY2cKO7X3SI78VavX3qqadSUVGhrpOSc+rr6yks\nLATIqef3kVZv6zgakTRr6QA5atSoDFeSPomeJsLdXwBeSHKfItLx6RWNiASnoBGR4BQ0IhKcgkZE\nglPQiEhwChoRCU5BIyLBZWXQuDsVFRUAVFZWZriaZOzcubNdY+IeObp7924aGhpijdmzZw81NTWx\nxlRVVbF3795YY3JRe35GH374YaBqsldWBo2ZMWLECLp27UppaWmmy/mcmpoaxo0bh5lFvvTu3ZvB\ngwfHHtO/f/9YY4499liOPfbYWGO6d+9OcXFxrDElJSWUlZWxYMGCTP84EjVlypTYP6N+/frFGtOz\nZ08A+vbtm+F7mz5Z20DO3dm7dy95edmXhffeey/Lly9nwIABrU+aI9mwYQO7du1ixIgRlJWVRZpj\n7969VFRUMGLECPr27Rv5r+bKlSsZPnw41dXV1NXVRR5z2mmn0bt3bz755JPIYwoKCpg+fTo//vGP\nI43Jdi+//DJ//vOf6dOnDyeeeGKb21dXV/P2229zxhln8MEHH9DY2BhpnpUrVzJ+/HgWLlyYaskd\nRtYGzf79+zNdwmF1794dgPvvv59zzjknw9Vkzrhx41i+fHmmy0hMyx+Biy66qFOFQDpk38uFDuDC\nCy8E6NQhk4tOP/10AL75zW9muJLco6ARkeAUNCISnIJGRIJT0IhIcAoaEQlOQSMiwaUcNGZ2vJk9\nb2bvmNnbZjY9icJEJHckccBePXBDc1+nUmCVmS1294oE9i0iOSDlVzTuvt3d32i+vg9YA/RLcZ+t\niyqz+QjhqL1yOso8cbUcFRx64Wt77n+2PmadVaKf0ZhZf2Ao8FqK++G4444DPm1NkY0KCwsxM0pL\nSyNdLr/8cmpra2PNMW/evNjznHHGGWzYsCHQvf7UwIEDAVp7FEWxc+dOzjnnnMj3xcwoLCzk3HPP\njT1m2rRp7bpfUdeISQzunsgFKAX+Dlx8mO/7rFmzWi9Lly71IxkzZozn5eUdcZtMaWxs9K9//etO\nU6/xWJd58+bFmqs9cwA+atSoQPf+UxMnTvSmp1B0l112Wbvuz4gRI9o1rqGhIXJtb731lgP+q1/9\nKu5D0SktXbr0M7/Tzc+FQ+fD4b4R50LTZz3PANcfYZtYd2Lw4MGxn8TpVlVVFXnbJUuWOODTpk2L\nNQfgt99+uzc2NkbafteuXa2/ZKGNHTs29jxFRUUO+Lvvvht5TJzHucX+/ftjB81LL73kgE+ePDn2\nfOJHDJqk3jr9EXjH3f89of11CMXFxZG3Pe+88wCYOnVq7Hla3jpF0XLaigsuuCD2POlw8803A3Dy\nySdHHhPncU5lzFlnnQXANddcE3usHFkS/94eB3wHONfMXjezcjM7P/XSRCRXpPxJq7u/AuQnUIuI\n5CgdGSwiwSloRCQ4BY2IBKegEZHgFDQiEpyCRkSCy9qgaVlU2ZnXnWzbtg2Axx57LMOVHFrLosq4\nXS7TYenSpQA8//zzGa5EIEv7OvkBzdJqamoiL9qrrq7m5ptvZuPGjZG2f/bZZ6mtrWXq1Kmtv9Rt\nKS8vZ8uWLdx1111ce+21kcYcKGqTMfi0dWpLH6k4nn/+ecystTVMW4qLi3n33Xd5/fXXI4/Jz8+n\noaGBqqoqjjrqqEhjDvzZhrR27VoAbrjhBvr379/m9lu3bmXVqlWBq+rEDrc2IekLMdfEfPnLX/Ye\nPXrEGnP11Ve3a+Fdr1692jUujoqKCgf8oYceijUO8DvvvDPWmNmzZ7d7MWbcy29+85tYtU2fPt3z\n8/N9z549scbFVVtb62eccUbs+zNw4EDft29f0NpyFaEXVUa5xP3FbM+iypYny/r16yNtX19f75s2\nbYo1R2Njo7/55puxa1u0aJED/o1vfCPWOMDvuOOOWGPc3T/44IPYvzCVlZW+a9eu2HPF0fIzWr16\nddB52mPjxo2RF6/K5x0paLL2M5r2+NGPfgR8ep6UtuTn53PCCSfEmsPMYo8BmDx5MgA///nPY49t\nj169enH00UfHGtO1a9dIvcRT8ctf/hKAIUOGBJ2nPU466aTIi1clnpwKGhHJTgoaEQlOQSMiwSlo\nRCQ4BY2IBKegEZHgEgkaMzvfzCrMbJ2ZzUhinyKSO5I4Z3AecBcwCRgCXG5mg1Pdr4jkjiRe0YwE\n1rv7P929DngcuDjVnbYsqvQ0rY2Jo7y8HIA1a9YEnWfPnj0ALFmyJOg8IqElsaiyH7D5gNvv0xQ+\n7XZguMydO5cuXbq0OeaJJ55oXUgX2gsvvADArbfeyvjx49vcftu2bSxcuDD2POvWrQNg+/btsceK\nZJMkguZQx2wf8mXI7NmzW69PmDCBCRMmHHqHZtx3331cffXV3HLLLbGKufTSS2Nt3x433HADd999\nN4sWLWLRokWRx/Xu3TtWP6MzzzwTgKuuuip2jdmsrKyMmpqayCu+JTstW7aMZcuWRdrWUn1rYmaj\ngdnufn7z7Zk0La6ae9B2HvJt0M6dO9m8eTPDhw8PNkd7NTY28tJLLzFmzBiKiopijTUz7rjjDn72\ns58Fqi69WtYSlZeXM2zYsAxXI0kyM9z9kIvFkviMZiUw0MxOMrMi4FvAkwnsN5ZevXplZcgA5OXl\ncfbZZ8cOmVz005/+FEAh08kk0UCuwcyuAxbTFFwPuHvYT0mlw4q7olxyQyJn2HP3Z4BTktiXiOQe\nHRksIsEpaEQkOAWNiASnoBGR4BQ0IhKcgkZEglPQZLGWDpAtizhFOqqs7FQpTVauXAnAihUrMlxJ\n8iZPnsytt95KQUG0p2C/fv045phjAlcloaS81inyRIHXOuUid6ekpIS5c+cyffr0TJeTiNdee42x\nY8fGag0MUFpaypYtWygrKwtUmaQq9FonCcTMqK6upra2NtOlJGbUqFG89957PPzwwzQ0NETqcjph\nwgT27dvHU089lenypZ0UNJJ2/fv3Z8qUKeTlRXv6XXPNNcCn3T6l41HQSNbr1asXgFa/d2AKGhEJ\nTkEjIsEpaEQkOAWNiASnoBGR4FIKGjP7rZmtMbM3zGyRmeloKhH5nFRf0SwGhrj7UGA9EK83ioh0\nCikFjbs/5+4tx5K/ChyfeknSoqGhAYANGzZkuBKR1CT5Gc1VwNMJ7q/Te+WVVwB4/PHHM1yJSGra\nXDprZkuAPgd+iaZOlL9w9782b/MLoM7dHw1SZSc1btw4evTowW233ZbpUjKqqqqK/Px8dbfswNoM\nGnf/ypG+b2bfBb4KnNvWvqK2xJUm+fn5fPTRR9TV1WW6lIxasGABDQ0NPPHEE1x22WWZLkeapa0l\nrpmdD/wO+JK7725jW50moh1yrSVue9x3331MnTqVyspKunbtmuly5DBCniZiAVAKLDGzcjO7J8X9\niXzOwIEDARQyHVhKZ9hz9/+RVCEikrt0ZLCIBKegEZHgFDQiEpyCRkSCU9CISHAKGhEJTkGTxVoO\ncPz4448zXIlIahQ0WaxlUeWdd94ZecyLL77I1q1bY81TXl7OunXrYo1Zv349q1atijVm+/btLFu2\njDhHiFdWVvLaa6/FmkeyjzpVZrHq6mqOO+44vaJppudPdjvSEgT13s5ixcXFvPPOO7z44ouRx8ye\nPZsrr7ySE044IXKDtgULFjB69GiGDRsWuRf2Y489RllZGZMmTYo8ZvHixWzfvp0rrrgicm2rVq1i\nxYoVzJ8/P9L2kp30ikZEEqHe2yKSUQoaEQlOQSMiwSloRCQ4BY2IBKegEZHgEgkaM/uZmTWa2TFJ\n7E9EckvKQWNmxwPnAf9MvZzcF/Ws8blMj0GTzvQ4JPGKZh5wUwL76RQ605PrcPQYNOlMj0NKQWNm\nFwKb3f3thOoRkRyUSqfKXwI/B75y0PdERD6j3WudzOyLwHPAfpoC5nhgCzDS3T84xPZa6CSS4w63\n1imxRZVmtgEY7u4fJbJDEckZSR5H4+itk4gcQtpOEyEinVdajww2s1lm9n5zn+5yMzs/nfNnkpmd\nb2YVZrbOzGZkup5MMbONZvammb1uZv+d6XrSxcweMLMdZvbWAV/rYWaLzWytmT1rZt0yWWNImViC\n8G/uPrz58kwG5k87M8sD7gImAUOAy81scGaryphGYIK7D3P3kZkuJo0epOnnf6CZwHPufgrwPHBL\n2qtKk0wETWf8HGcksN7d/+nudcDjwMUZrilTjE64xs7dXwYO/kfJxcBDzdcfAi5Ja1FplIkf+LVm\n9oaZ3Z/LLxUP0g/YfMDt95u/1hk58KyZrTSzqzNdTIb1dvcdAO6+HeiV4XqCSfzk5Ec4wO8XwD3A\n/3F3N7P/C/wb8P2ka8hCh3oV11k/hR/r7tvNrBewxMzWNP+1lxyWeNC4+1fa3gqA+4C/Jj1/lnof\nOPGA28cD8Zov5Yjmv9y4+04z+0+a3lZ21qDZYWZ93H2HmfUFPnega65I93+d+h5wczKwOp3zZ9BK\nYKCZnWRmRcC3gCczXFPamVmJmZU2Xz8amEjneQ5A0yvbA1/dPgl8r/n6d4H/SndB6ZLuvk6/NbOh\nNP3nYSMwLc3zZ4S7N5jZdcBimsL9AXdfk+GyMqEP8J/Ny1EKgEfcfXGGa0oLM3sUmAD0NLNNwCzg\nX4G/mNlVwCbg0sxVGJYO2BOR4DrdvxlFJP0UNCISnIJGRIJT0IhIcAoaEQlOQSMiwSloRCQ4BY2I\nBPf/AaHHidH8UAAMAAAAAElFTkSuQmCC\n",
2382 "text/plain": [
2383 "<matplotlib.figure.Figure at 0x7f03fd7d8a20>"
2384 ]
2385 },
2386 "metadata": {},
2387 "output_type": "display_data"
2388 }
2389 ],
2390 "source": [
2391 "plot_trace(trace_tour(rw_trimmed), filename='test.png')"
2392 ]
2393 },
2394 {
2395 "cell_type": "code",
2396 "execution_count": 101,
2397 "metadata": {
2398 "collapsed": true
2399 },
2400 "outputs": [],
2401 "source": [
2402 "# patterns = [square_tour, cross_tour, quincunx_tour, heart_tour_func]\n",
2403 "# tours_filename = 'tours.txt'\n",
2404 "\n",
2405 "# try:\n",
2406 "# os.remove(tours_filename)\n",
2407 "# except OSError:\n",
2408 "# pass\n",
2409 "\n",
2410 "# success_count = 0\n",
2411 "# while success_count < 100:\n",
2412 "# lc = trace_tour(random.choice(patterns)())\n",
2413 "# rw = guided_walk(lc)\n",
2414 "# if rw:\n",
2415 "# rw_trimmed = trim_all_loops(rw)\n",
2416 "# if len(rw_trimmed) > 10:\n",
2417 "# with open(tours_filename, 'a') as f:\n",
2418 "# f.write(rw_trimmed + '\\n')\n",
2419 "# success_count += 1"
2420 ]
2421 },
2422 {
2423 "cell_type": "code",
2424 "execution_count": 102,
2425 "metadata": {},
2426 "outputs": [
2427 {
2428 "name": "stdout",
2429 "output_type": "stream",
2430 "text": [
2431 "Found mistakes: 1867\n"
2432 ]
2433 },
2434 {
2435 "data": {
2436 "text/plain": [
2437 "(5242,\n",
2438 " 1244,\n",
2439 " 'LLFFFFFLLRLRFFFFFFFRFFFFFFRRFFFLFFFFLRFRLFFLFFLFRRLFFFFRFLFFFRLFRLFFLFFFFRLFLLRRFFFRFRFLFRFFLRFRFLFLFRFFFFLLFFFFFFFRFFFFFFFFFRFFFRLFFFLFFFFLFFLRFFRFLFRFFFFFFFFFLLFFFRFFLRFFRLFFFLRFLFFFFFFLFRFRFFFFFFFFFRFFLRFFRLFLFFFFRFRLLFRFFRFLFFLFFFRLFFFFFLRFRFFFFFLRFFFLLFFFFRRLRFFFFLRRFFFFLFRFFLFFFFLFFFFLFFRRFFLFFFRFRLLRLRFRFLFRFLFFFFFFFLFRLLRRFFFFFFLFLRFLFFRFFFRLRRLLFFFRLFLRFLFRLFFFFFFRFFRFFFFLFFRLRFLLRFFFFFFLFRLFRFLFFRFFFRFLFLFRRLLRFRFLFFFFFLFLRLRRFLRFFFFLLFRFRLFLRRFFLFFFFLFRFRLFRLFLFFFFRFFRFLLRFFLLRFFRFRFLFLFRFLRFRLLFFFFRFFFRFFFFLRLFRRFFLFFLFRLFFFFRRFFFLFRFFFFFFFLLFFFRFFFRFFFLFRFLFFFLFFRFFFLLRRFFFLRFFLFFFRFFFFLFFFRFLRFLFRLFFFRFFFLLFFFFFRLFFFFRFFFRFFFFFFFFLLRFFRLRLFFFFFFFFFFFFFFRFFFFFLLFRFLFRFFFFFFLFLFRRFFFFFFRFLFFFFLFFFLFFLRRFFFFFFFLFFRFRFFFFFFFLFFFFFFFFFLFFFFFFFFFFRLFFLRFFFRFFFFRFLFFFFFFRLFFRLFLRFFRFLFRFFRFLFFFLLRFFFRLLRFRFFLFFRFFFFRFFFLFRFLFFFFRFFFFRRLFFLFFLFLRRLFFFRFLLFFFFRRFLFFFLFFFRFFLFRFFFRFFLFFFFFFFFRFLFFRFLFFFFLFFFLFFRFLRLFFFFRRLFFLLRLRRFFFFFFFFFRFLFFFFFFFFLFFFFRFFRFRLFFLLRFFRFFLLFFFLRFFFFFRRFFLRFLFFFLRFRFFFLFRFLFLFFFFFRFFFFFFFFFLFFFFRRLRFFLFFFFFLFLFFRFFLFFRRFFFLFFRLLFFFLRFFFFFFFFFRFFRLLFRFLLRRFRFFLFFFLRFFRFLFFRLFFFRLLRFFRFLFFLRFFFFFRLRFFFLRFFFFFFRRFLFFFLFFFFRRLFFRLFFFFFLFLFRLRFFRLFFFLRFRFFFLFRFLFFFLFRLFLFRFRLFFRFFFFFFRLFFFFLRL')"
2440 ]
2441 },
2442 "execution_count": 102,
2443 "metadata": {},
2444 "output_type": "execute_result"
2445 },
2446 {
2447 "data": {
2448 "image/png": "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\n",
2449 "text/plain": [
2450 "<matplotlib.figure.Figure at 0x7f03fdb72e48>"
2451 ]
2452 },
2453 "metadata": {},
2454 "output_type": "display_data"
2455 }
2456 ],
2457 "source": [
2458 "lc = trace_tour(cross_tour())\n",
2459 "rw = guided_walk(lc)\n",
2460 "print('Found mistakes:', len(mistake_positions(trace_tour(rw))))\n",
2461 "rw_trimmed = trim_all_loops(rw)\n",
2462 "plot_trace(trace_tour(rw_trimmed))\n",
2463 "len(rw), len(rw_trimmed), rw_trimmed"
2464 ]
2465 },
2466 {
2467 "cell_type": "code",
2468 "execution_count": 103,
2469 "metadata": {},
2470 "outputs": [
2471 {
2472 "data": {
2473 "image/png": "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\n",
2474 "text/plain": [
2475 "<matplotlib.figure.Figure at 0x7f03fdba0cf8>"
2476 ]
2477 },
2478 "metadata": {},
2479 "output_type": "display_data"
2480 }
2481 ],
2482 "source": [
2483 "plot_trace(trace_tour(rw))"
2484 ]
2485 },
2486 {
2487 "cell_type": "code",
2488 "execution_count": 104,
2489 "metadata": {},
2490 "outputs": [
2491 {
2492 "data": {
2493 "image/png": "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\n",
2494 "text/plain": [
2495 "<matplotlib.figure.Figure at 0x7f03fd5f98d0>"
2496 ]
2497 },
2498 "metadata": {},
2499 "output_type": "display_data"
2500 }
2501 ],
2502 "source": [
2503 "plot_trace(trace_tour(trim_all_loops(rw)))"
2504 ]
2505 },
2506 {
2507 "cell_type": "code",
2508 "execution_count": 105,
2509 "metadata": {
2510 "scrolled": true
2511 },
2512 "outputs": [
2513 {
2514 "name": "stdout",
2515 "output_type": "stream",
2516 "text": [
2517 "[Mistake(i=8, step=Step(x=0, y=0, dir=<Direction.RIGHT: 2>)), Mistake(i=30, step=Step(x=0, y=-8, dir=<Direction.LEFT: 4>)), Mistake(i=31, step=Step(x=-1, y=-8, dir=<Direction.LEFT: 4>))]\n"
2518 ]
2519 },
2520 {
2521 "data": {
2522 "text/plain": [
2523 "'RFFRLFFLRFRFLLFFFFLLFFFFFLRRFRFFFFFFLFFFFFLFFRLLFFFLRRRFFFFRRLFFFFFLFFRFRFFRFRLRLRFFFFFFFRFFRFRRFRFFFFRFFFFLLLFRRRFFFRFFFRFFFFRFFFLLFFFLFFFFLRFRLFFLFFLFRRLFFFFRRFFRFLLLFFFRFLFFFRLFLFRFFFLLRLRLFRFFFRRFFLFFLLRLLFFFFFFRLFFFRLLLFFFRLLFRFFFFRFRFFRFLFFFLFFLFFFFRLFLLRRFFFFFFRLLFFLFFFLFFFRFLFRFFLLRFRRFLFRLLFLFFLLFRFLFLFRFFFFLLFFFFFFFFRLLLFLFLFFRFLFFFLFFFLLRFFFFFLFFFFFFFFRFFFRLLLLLFFFLFFFFLFFLRFFRFLFFFFRRRFRLLRRFLRRLFFFFRFFFFFFFRRFFFFFLLLRFFRFFFFRFFFFLRRFFFFFFFLLFFFLFRRLLFFRFRFFFRRFFFRFFFRRFRFFFFFFFFLLFLRRLLRFFFRLFRFFLLFLLFFFLRRRFFFFFFFLFLLFLLRLLLLLFFFFFFFLFLLLRLFFLLFFFRFFLRFFRLFFFFRLLFRLFLLRLFFFFFLFFLLFFRFLRFRFLFLFRFFFFFRFRRRRFRFFFFFFRRFLFLLFLFFFFLFRFRFFFFFFFFFFFRFFLLRFLFLFLFFFFRFFLFFFRFFFRFFFRFLFFFLLLRFLRRFFLFLRRRFFFFFFFRFFFFRFFFFFFRLFFFLRLLFLRRLFFFFFLFFFRFFRFRFFLRFFRFFRFRRLRFFLFFFFFFLLFLFFRLFRLLFRRRFFRFRFFRFLFFLFFFFRRRRFFFFFFRLFLRRRFRFFFFLFFFLLRFFRFFFFLLFFFFFFFFLFFFFFFFFFFFFFFRFFRFFRFFFLLFFFFLFFRRFRFLFFFRFRLFRLFFRRFFFLLFLFLRFFFLRLLFLFFFFLRRFFRFFRFLLRRFFFFFFFFRRLFRRFRFFFFFLRFFFLLFFFFRRLFFFLLLLFFLLLLRFLRRFRLFFFFRFRRFFFFLRRFFFFLFRFLFFFRLFRLFFLRFFLFLFFFLRLFRFFFFFFFFRFRFRRLRFFRFFLFLFFLFFFFFLRFFFFLFFFRRFRRFFLFFFLLLFRFFLFFFRFRLFFFLFFFRRRFFFRFFRFLFLFLFFLRLFRFFFFFFLLLFFFRFFRLRLLRLRRLLLLFFFLFRFFLLFLFFRFFFFLFFLFFRFFRFRRRFFLFLRRRFFRFFRFFFLFRRFLLLLRFLFFFLFFFFFLFFFLLRRFFRRFFFRFFFFFFFRRFFRLFFFFFFFLFRLLRRFFFRFLFFLLFFRRFFLFLRFLFFRFLFFRRFRLLFRLRRLLFFFRLFLRRLFLRLFFFFFFFRFLFFLFFFFLRFFFFLRFFLFLFFFFFFRLLFFFLRFFRRLFFFLLFLRFLFFFFFFLFFLFRRRLRRLFLFFFLFFFRLFRFRFRRRRFRFLFFLLLFRLFFRLRFFRRLFFFFRFRFFLRRFRFFLFLRRLFFRRFFFFFFRFLRFFFFFFRFFLFFRFFFLFFFRLRFFFFFFFFRFFFFFFFLFFLFFFLFRFRLFRFRRLFLLFFLFFFFFFFFFFLRFFFLRLRFLFFFFFFFFFLFFRLRFLLRFFFFFFLFFFLRLFRRFLFFFFFFLFRRRLLLFRLLFLFFLFRFRLFLRFFFRFLFLFRFFFRFFFFFFFFFFFRFLRRRFFRRRFFFRRFFFFFRRFRLFFLFFFFRLFFFLRLRFRFLLFFFLLFRFRFFFLFLFFFRFRFFRFFFRFFFFFRFFFLFFFFFLRLRRFFRRLRFRRFFFLRRFRFRFLLFRFRRFFFFFFFFRRFFFFFFFRRLRFFRFLFRFFFFFLFRFLLLFFRFLFFFFLFFLFLFRRLLRFFFFLRFFRFLFFLFLFFFLFRFFLLFRRRFFLLFFRRFFFFLLFFFLFFFFFLFLRLRRFLRFFFFLLFRFRLFLRFLFLFLRRFFRFRFFFFFFLFFFFLFRFRLFRLFFFLFFFFFLRLRRRFFFFLFRFFRFFRFFFFRFFLFFLFFFFFRFFRFLFFFLFRFFRRRFLFLFRFFRLRFLLLFFRFRLFFFFLFLLFLFRFFLFFRFRFFFLFFFLFFFRRLRFLRRFRLFFFRRRFLLFFFLLRRFFFRFFFFFRFFFRFFFFFFFRFRFLFFFFLRRRFFFRFRFLRFRLLFFFFRFLFRFFLFRFFFFRFLRRFLRRLLFRLRFLRRRLLFFFFRFRRFRLLLFFLLLFRFFFRRFFRLRFFRFFFFRLLLRRFRLLLLFFFFRRFRFFFRFRLLFRRFFFFRFFFFFFFFRRFFLFFLFRLFFLFFRRFRRFRRFLFRFRFRLRFLLFLFFRFFLFFLFFLLFFFRFFFFLFRRFRFFFFFFRFFFFRFFLFFFLLFFFFFRLRRFFRFRFLRLLFFFLFFRLLFFFFFFFFFLLFFFFFRFRRRRRFFFFRLRFRRFRLFFFFLFRFFFFFFRFRFFRFRFFFLLFFFRFFFRFFFLFRFLFFFLFFRFFFLLRRFFFLRFFLFFFRFFFFFFFRRFFFFFLLFFLFFFFFRFLRFLFRLFFFRFFFLLFFFFFRFFFRFFFLLFFFLFFFRFFFFRFFFRFFFFFFFFLLRFFRFFFFRRFRLFRRLFFFFLFLLFLFFFFFFFFFFFRFLLFFRFLFFLLFRFFLFFFFFFFLLFRFFFFFRFLFFLLRLFFRFFLFLFLFLFFRRLRFFRFRFLFFLFFLFFLLLRFRFRFRFRFRFFRFFFFFFLFLFRRFFFFFFRFLFFFFLFFFRLLFRFFRLRLLFFFRFLFRRLFFRFRRFFRLLFFFLFLLLFLRFFFLFFFFRFFRFFFLRRFFFFRFFRRFFRFFFLFFRFFFLLFFLLRFFFFFFFLFFFFFFFLLLLFFLFFFFFFFFFRLFRLFFFLFFFRRFLLLRRRFRFRFLFFFFFLFLRLFFLFFLLFLFFFFLFLLLRFFFFFRFFRRRFFFFFFFRLFFRRFFLFFFFFFLRFRFRFRFFFFFLFFFFFLFLFRRFFRFFLRFFLFRFFFRRFFFLFLFFLLLRFLFRFRRFFFRFFRFLFFFLFFRLFFLFLLFFFRFRLRLFRRLRFFFRLLRFRFFFFFRFFFLRRFLFFFRFLLFFLLFFRFFFFFFFFFRRFRRFFFRFFFFRFFFLFRFLFFFFRFFFFRLLRRFFRFRFLLFFLFFLFLRRLFFFRLLFFLFRFFFFFRRFLRFRFRFRLFFFRFRFFRLFFLRRFLLLFLFFRFFFFRLFLLFFLFRFLFLLFFFRFRFFFFRFFRFRFFFLRRLFRFFFRLLLFFFFFFLFLRFLFFFLFLLLLFFRFFFRRFRLFLRFFFLFFFFFFFFLFRFFLFLFFFFFFFLFFLFRRFFFRRFFFFFFFFFFLLLRFLLFFFLLFFFFLRRRLRFLFFFFRRRFFFFRFFLFFFFFRFFFFRLLLFFFFFFLFFLLLRLFRFFLLFFFFFLFLFRLFFFRFFRRFFFLRFRRRRLLFFFFFRLFFFLRFLRLLFFLFLFFFFFFFLFFLLLLLFLLRLLFLLRLRFFFRRLRFFFFRRFRRFRFFFFRLFFFFFFFFFFFRFLLFFLFFFLFFRFRFRRFFRFFRFFLLFFLFFFLFFFLFFFLFRRLRLFFFLFRFFRFRRFFLLFFLFLFFFFLFFRFFFFFFLRLRFFRFFRFLLFRLLFFFFFLFFFFFFRFFFFRFRFRFFFFFFFFFFRFLFFRFLFFFFLFFFLFLFFRFRFFFFFFRFFLFLRFRFLLFLFFLFRFFFRRLFRLLLFLFFRRLRFFRFLFRRFFFFFFFLRLLFFFLFFFRLLFLFLLLRRRLFFRFFFLLLFLFFFFFFFFFFFLLFFFLLRFFLLFFFLFFLFRLRFFFFRFRFRFFFRRFFFRFFRRLFFLFFFFRFLFRFLFFLFFFFLFLRFFFFRFRFFFFRFRFFFFFFRRLRFRFLFLFLFFLFFFFFFFFFRFLFFFFFFFFRRRRLRFFFLLFFLFLFFLFLRLLFFFRLFRRFFFFFFFRFFRFRLFFFLRFRFFRRRFFFRLLLFFFFRFFRRRLFRFFFFFLLFFFLFFLRFFFLRFFRRLFFRFRFRLFFFFRFFLFFFLFLFFRRFFLFLFLRFFFRLFFFFLLFFFLRFFFFFRRFFLLFFFRRFLRRFLFFLFFFFLFFFFRRFFFFRFRRFFFFFLFFFLFRLFLFFFFFFFFFFFFLFRFFRFLLLRLFFLFRFFFRFRFLFFFLFFFRFLFFFLRLFFLFFLFLFFFFLFLFLFRFFFFRFRFFFRFLLFLFFFFFFFFLFFLFFFRFRFFRFFFLFRLLFFLRFFFFFRFRFFFFFFFFRFFFFFFFFRFFFFFFFFFRRLFLLFFFFFFFRRLRFFLFFFFFLFLFFRFFLFFRRLLLLLLFLLFFFFFFRFRFLRRFFRFLFFRRFRLRRFFRLLFFFLRFFFFFFFRFFLFLFFFLFLLFRFFRLLFFRFFFFLLFFFFFFFFFLFLFFFFFFLLRRFRFFLFFFFFFRFRLFFFFFFLRRFFRFFRLFFFFFFFRRLRFFFFRFLFRRLRFFFFFFFFRFRRFRRRFRLFLFFFRRFRFFLLLFLFLFFRRFFFRRRLFFLFFLFFRFRFRFFFFLLFLFRFRFLLFFFFFLFRFLFFLFFFFFLFLFRFFRLFFLRRFRFFFFRFFFFRLFFFRLFRFRRRFFFLRFRFFLLFFFLLRRLFLRFLRRFRFFRFLFFFLFRRFRFRRFFFFFFFLLFLFFFFLLLRFRRFFFLRFFFFFRFLFFLFLFFFFFLRRRFFFFFRFLFRLFLLRLFFLFFFFFRRFFFLFRFFRRFFFFRRFFFFRFRRFRRRFFFFFRFRRLFFFFRRFFRFRFLFFLFLFLFRLLFFLLFRLFFFRLLLFLFRLRFFLFFRLFFFLRRRRFFFFRFFRFFFLFFLFFFFFFFFLRRRFFFFFFFRLFLLLFFLLLFFFFFFFFFFFLFLLFFRFFFRFFFFFFLRFFFLFFLLFLFFRLRLFLFFFLFFFLFRRLLLFRFFRLRRFLFFLRFFFFFFLRLLFLFFRLLLFFRFRRFFFFRRRFRFFFFFRRRRFRLLLFFFFRFLLFFRRRRFLLFFLFFLFFFFLLLFFFFRFFFRFFFFFRFRRFRFFRFLLFLFFFLFFLLRLFLFFFLFLFRLRFRLFRFLLFLFFFRRFRRRRRLFFFLRFLLRRRFFFFFLFRFLFFFFLRFFRLFLFFFRFRFFFRFFFRFFFFFFFFFLRFFFLFLRFRFFLLFFRFLFFFFFFFFFFFFLFFFLFRLFLFRFRLFFRFFFFFFRLFFFFLRL'"
2524 ]
2525 },
2526 "execution_count": 105,
2527 "metadata": {},
2528 "output_type": "execute_result"
2529 }
2530 ],
2531 "source": [
2532 "w_tour = rw\n",
2533 "w_trace = trace_tour(w_tour)\n",
2534 "mks = mistake_positions(w_trace)\n",
2535 "print(mks[:3])\n",
2536 "trim_loop(w_tour)"
2537 ]
2538 },
2539 {
2540 "cell_type": "code",
2541 "execution_count": 106,
2542 "metadata": {
2543 "scrolled": true
2544 },
2545 "outputs": [
2546 {
2547 "name": "stdout",
2548 "output_type": "stream",
2549 "text": [
2550 "1867\n",
2551 "1863\n",
2552 "1860\n",
2553 "1859\n",
2554 "1850\n",
2555 "1843\n",
2556 "1837\n",
2557 "1833\n",
2558 "1831\n",
2559 "1829\n",
2560 "1821\n",
2561 "1816\n",
2562 "1814\n",
2563 "1799\n",
2564 "1793\n",
2565 "1788\n",
2566 "1784\n",
2567 "1778\n",
2568 "1777\n",
2569 "1772\n",
2570 "1764\n",
2571 "1760\n",
2572 "1758\n",
2573 "1755\n",
2574 "1752\n",
2575 "1748\n",
2576 "1736\n",
2577 "1731\n",
2578 "1726\n",
2579 "1717\n",
2580 "1705\n",
2581 "1700\n",
2582 "1695\n",
2583 "1692\n",
2584 "1686\n",
2585 "1681\n",
2586 "1677\n",
2587 "1674\n",
2588 "1669\n",
2589 "1661\n",
2590 "1658\n",
2591 "1657\n",
2592 "1653\n",
2593 "1646\n",
2594 "1644\n",
2595 "1642\n",
2596 "1636\n",
2597 "1625\n",
2598 "1623\n",
2599 "1609\n",
2600 "1602\n",
2601 "1597\n",
2602 "1596\n",
2603 "1595\n",
2604 "1590\n",
2605 "1586\n",
2606 "1582\n",
2607 "1571\n",
2608 "1569\n",
2609 "1565\n",
2610 "1564\n",
2611 "1563\n",
2612 "1561\n",
2613 "1557\n",
2614 "1550\n",
2615 "1548\n",
2616 "1547\n",
2617 "1541\n",
2618 "1536\n",
2619 "1534\n",
2620 "1532\n",
2621 "1529\n",
2622 "1527\n",
2623 "1521\n",
2624 "1517\n",
2625 "1516\n",
2626 "1513\n",
2627 "1512\n",
2628 "1510\n",
2629 "1506\n",
2630 "1493\n",
2631 "1489\n",
2632 "1482\n",
2633 "1480\n",
2634 "1479\n",
2635 "1473\n",
2636 "1471\n",
2637 "1469\n",
2638 "1460\n",
2639 "1457\n",
2640 "1453\n",
2641 "1451\n",
2642 "1444\n",
2643 "1442\n",
2644 "1440\n",
2645 "1438\n",
2646 "1432\n",
2647 "1427\n",
2648 "1417\n",
2649 "1413\n",
2650 "1405\n",
2651 "1401\n",
2652 "1393\n",
2653 "1389\n",
2654 "1377\n",
2655 "1372\n",
2656 "1362\n",
2657 "1343\n",
2658 "1341\n",
2659 "1337\n",
2660 "1331\n",
2661 "1329\n",
2662 "1325\n",
2663 "1317\n",
2664 "1313\n",
2665 "1286\n",
2666 "1285\n",
2667 "1281\n",
2668 "1273\n",
2669 "1265\n",
2670 "1255\n",
2671 "1247\n",
2672 "1243\n",
2673 "1236\n",
2674 "1234\n",
2675 "1230\n",
2676 "1222\n",
2677 "1216\n",
2678 "1215\n",
2679 "1214\n",
2680 "1213\n",
2681 "1209\n",
2682 "1206\n",
2683 "1199\n",
2684 "1198\n",
2685 "1196\n",
2686 "1192\n",
2687 "1191\n",
2688 "1189\n",
2689 "1184\n",
2690 "1180\n",
2691 "1176\n",
2692 "1170\n",
2693 "1163\n",
2694 "1161\n",
2695 "1154\n",
2696 "1148\n",
2697 "1146\n",
2698 "1145\n",
2699 "1139\n",
2700 "1136\n",
2701 "1133\n",
2702 "1129\n",
2703 "1126\n",
2704 "1120\n",
2705 "1113\n",
2706 "1111\n",
2707 "1105\n",
2708 "1098\n",
2709 "1095\n",
2710 "1085\n",
2711 "1076\n",
2712 "1070\n",
2713 "1067\n",
2714 "1065\n",
2715 "1062\n",
2716 "1058\n",
2717 "1056\n",
2718 "1047\n",
2719 "1044\n",
2720 "1042\n",
2721 "1041\n",
2722 "1037\n",
2723 "1031\n",
2724 "1027\n",
2725 "1019\n",
2726 "1011\n",
2727 "1009\n",
2728 "1008\n",
2729 "1004\n",
2730 "1000\n",
2731 "990\n",
2732 "986\n",
2733 "984\n",
2734 "982\n",
2735 "980\n",
2736 "974\n",
2737 "966\n",
2738 "960\n",
2739 "959\n",
2740 "957\n",
2741 "956\n",
2742 "954\n",
2743 "952\n",
2744 "950\n",
2745 "947\n",
2746 "946\n",
2747 "941\n",
2748 "936\n",
2749 "933\n",
2750 "930\n",
2751 "928\n",
2752 "922\n",
2753 "910\n",
2754 "903\n",
2755 "888\n",
2756 "883\n",
2757 "878\n",
2758 "874\n",
2759 "867\n",
2760 "857\n",
2761 "849\n",
2762 "847\n",
2763 "836\n",
2764 "833\n",
2765 "818\n",
2766 "808\n",
2767 "802\n",
2768 "801\n",
2769 "800\n",
2770 "789\n",
2771 "783\n",
2772 "768\n",
2773 "766\n",
2774 "763\n",
2775 "754\n",
2776 "746\n",
2777 "742\n",
2778 "734\n",
2779 "716\n",
2780 "706\n",
2781 "705\n",
2782 "702\n",
2783 "691\n",
2784 "686\n",
2785 "682\n",
2786 "670\n",
2787 "665\n",
2788 "663\n",
2789 "648\n",
2790 "641\n",
2791 "640\n",
2792 "639\n",
2793 "638\n",
2794 "633\n",
2795 "616\n",
2796 "603\n",
2797 "601\n",
2798 "594\n",
2799 "593\n",
2800 "592\n",
2801 "586\n",
2802 "582\n",
2803 "573\n",
2804 "571\n",
2805 "562\n",
2806 "550\n",
2807 "548\n",
2808 "545\n",
2809 "537\n",
2810 "530\n",
2811 "519\n",
2812 "517\n",
2813 "513\n",
2814 "509\n",
2815 "508\n",
2816 "501\n",
2817 "497\n",
2818 "476\n",
2819 "474\n",
2820 "465\n",
2821 "459\n",
2822 "448\n",
2823 "438\n",
2824 "435\n",
2825 "428\n",
2826 "421\n",
2827 "413\n",
2828 "412\n",
2829 "411\n",
2830 "408\n",
2831 "406\n",
2832 "402\n",
2833 "400\n",
2834 "394\n",
2835 "390\n",
2836 "384\n",
2837 "377\n",
2838 "359\n",
2839 "344\n",
2840 "340\n",
2841 "330\n",
2842 "324\n",
2843 "320\n",
2844 "309\n",
2845 "298\n",
2846 "291\n",
2847 "290\n",
2848 "284\n",
2849 "283\n",
2850 "281\n",
2851 "274\n",
2852 "268\n",
2853 "267\n",
2854 "263\n",
2855 "262\n",
2856 "257\n",
2857 "242\n",
2858 "238\n",
2859 "234\n",
2860 "215\n",
2861 "203\n",
2862 "199\n",
2863 "191\n",
2864 "180\n",
2865 "169\n",
2866 "166\n",
2867 "164\n",
2868 "149\n",
2869 "145\n",
2870 "141\n",
2871 "139\n",
2872 "132\n",
2873 "128\n",
2874 "112\n",
2875 "110\n",
2876 "102\n",
2877 "97\n",
2878 "89\n",
2879 "73\n",
2880 "65\n",
2881 "61\n",
2882 "54\n",
2883 "51\n",
2884 "44\n",
2885 "37\n",
2886 "33\n",
2887 "32\n",
2888 "26\n",
2889 "20\n",
2890 "17\n",
2891 "14\n",
2892 "12\n",
2893 "8\n",
2894 "RFFRRFFFRFFRFLLRFLFFLLLLFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLRRLRRRRFFFFFFRRRLLFFFFFFLRRRLLLRLLLLRFRLRFRRRFRLRLLRFRLFLLRFRFLRRRRLRFLLRLRRLFFFRLRRFFRFLRFLLFLFRLRLRLRRRLFFRLRRFFRRFFLLRLLFLLLFRFRFLRLFFLFRRRRLRRLRRLRFRRLRRRFRRRRLLRFLLRRFFRLRFFLFLFRRLLLRLFFFRFRLRLLFRRFLLRLFFFLLRLLRRLRFRFFFFFRRFFLFRFLRFRFLFLFRLFLFLRFFLFRLRRRLRRRRFFFRFLLRLFRFRRRLRFFFFFLLFRRLFRRFRFRFLRLLFRFFFLLRRFRRRRLFFFLFLLLFFLRRLRFLFLFFRLLFFRRFFLRLLRFLRLLFLFRLLLRFFFFFFFFLFLRLLRLRLRFLLFFFLFLFFLFRRRRRFFRLLFFFRLFFLFRLFFRFFFFRLRRRLLFLRRFLRFFLRRFRRFLRFLRRLFRRLFFFFRLFLFFLRFFFFFRLFLFLRFFFLLLFLLLFFLRRLFLFRRFRRFFRRRFFRFLFLLFLFRFRFLLLRRRLFRRFFRLRFLFLFLRRLFFFLFRLRFRFFRFLRRFFFFFLFRLRRFRLLRLLFFLLLFFLFFFRLFRFRRRRLFLFLLLLRLFRFRLRLLFLFLLLRRRLLLFRRFRLRFFRRRLLLFRLRLLFFLLRFFFFRLLRLRLLLRLFFFRRLRFRFFRRRFFFRFFFFLRFLFRFLRFRRLLLRLLFRRLFFLRRFFFRLLFRLFLRRFLRLLRRFFLLFLLLFFFFRRFFRLFFLLFLLFRFRLRFLRFFRFRLRLLLFFFLFLRFRFRFLRRLLLLLRFRRLFLLLLRRFFFLLRFLFFRLLLLFLFRLRFFFFFLRLLFFLLLFFLLRRFLRRFLRLRRLLLRRRRRLLLFLRRLFFFRFLRRLF\n",
2895 "LLFFFFFLLRLRFFFFFFFRFFFFFFRRFFFLFFFFLRFRLFFLFFLFRRLFFFFRFLFFFRLFRLFFLFFFFRLFLLRRFFFRFRFLFRFFLRFRFLFLFRFFFFLLFFFFFFFRFFFFFFFFFRFFFRLFFFLFFFFLFFLRFFRFLFRFFFFFFFFFLLFFFRFFLRFFRLFFFLRFLFFFFFFLFRFRFFFFFFFFFRFFLRFFRLFLFFFFRFRLLFRFFRFLFFLFFFRLFFFFFLRFRFFFFFLRFFFLLFFFFRRLRFFFFLRRFFFFLFRFFLFFFFLFFFFLFFRRFFLFFFRFRLLRLRFRFLFRFLFFFFFFFLFRLLRRFFFFFFLFLRFLFFRFFFRLRRLLFFFRLFLRFLFRLFFFFFFRFFRFFFFLFFRLRFLLRFFFFFFLFRLFRFLFFRFFFRFLFLFRRLLRFRFLFFFFFLFLRLRRFLRFFFFLLFRFRLFLRRFFLFFFFLFRFRLFRLFLFFFFRFFRFLLRFFLLRFFRFRFLFLFRFLRFRLLFFFFRFFFRFFFFLRLFRRFFLFFLFRLFFFFRRFFFLFRFFFFFFFLLFFFRFFFRFFFLFRFLFFFLFFRFFFLLRRFFFLRFFLFFFRFFFFLFFFRFLRFLFRLFFFRFFFLLFFFFFRLFFFFRFFFRFFFFFFFFLLRFFRLRLFFFFFFFFFFFFFFRFFFFFLLFRFLFRFFFFFFLFLFRRFFFFFFRFLFFFFLFFFLFFLRRFFFFFFFLFFRFRFFFFFFFLFFFFFFFFFLFFFFFFFFFFRLFFLRFFFRFFFFRFLFFFFFFRLFFRLFLRFFRFLFRFFRFLFFFLLRFFFRLLRFRFFLFFRFFFFRFFFLFRFLFFFFRFFFFRRLFFLFFLFLRRLFFFRFLLFFFFRRFLFFFLFFFRFFLFRFFFRFFLFFFFFFFFRFLFFRFLFFFFLFFFLFFRFLRLFFFFRRLFFLLRLRRFFFFFFFFFRFLFFFFFFFFLFFFFRFFRFRLFFLLRFFRFFLLFFFLRFFFFFRRFFLRFLFFFLRFRFFFLFRFLFLFFFFFRFFFFFFFFFLFFFFRRLRFFLFFFFFLFLFFRFFLFFRRFFFLFFRLLFFFLRFFFFFFFFFRFFRLLFRFLLRRFRFFLFFFLRFFRFLFFRLFFFRLLRFFRFLFFLRFFFFFRLRFFFLRFFFFFFRRFLFFFLFFFFRRLFFRLFFFFFLFLFRLRFFRLFFFLRFRFFFLFRFLFFFLFRLFLFRFRLFFRFFFFFFRLFFFFLRL\n",
2896 "Step(x=0, y=0, dir=<Direction.LEFT: 4>)\n"
2897 ]
2898 },
2899 {
2900 "data": {
2901 "image/png": "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\n",
2902 "text/plain": [
2903 "<matplotlib.figure.Figure at 0x7f03fdaa1860>"
2904 ]
2905 },
2906 "metadata": {},
2907 "output_type": "display_data"
2908 }
2909 ],
2910 "source": [
2911 "w_tour = rw\n",
2912 "w_trace = trace_tour(w_tour)\n",
2913 "mks = mistake_positions(w_trace)\n",
2914 "while len(mks) > 3:\n",
2915 " print(len(mks))\n",
2916 " w_tour = trim_loop(w_tour)\n",
2917 " w_trace = trace_tour(w_tour)\n",
2918 " mks = mistake_positions(w_trace)\n",
2919 "print('{}\\n{}\\n{}'.format(w_tour_start, w_tour, trace_tour(w_tour)[-1]))\n",
2920 "plot_trace(trace_tour(w_tour))"
2921 ]
2922 },
2923 {
2924 "cell_type": "code",
2925 "execution_count": 107,
2926 "metadata": {},
2927 "outputs": [
2928 {
2929 "data": {
2930 "text/plain": [
2931 "[]"
2932 ]
2933 },
2934 "execution_count": 107,
2935 "metadata": {},
2936 "output_type": "execute_result"
2937 }
2938 ],
2939 "source": [
2940 "mks"
2941 ]
2942 },
2943 {
2944 "cell_type": "code",
2945 "execution_count": 108,
2946 "metadata": {},
2947 "outputs": [
2948 {
2949 "ename": "IndexError",
2950 "evalue": "list index out of range",
2951 "output_type": "error",
2952 "traceback": [
2953 "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
2954 "\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)",
2955 "\u001b[0;32m<ipython-input-108-982d2ade068b>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mtrim_loop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mw_tour\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
2956 "\u001b[0;32m<ipython-input-67-102a8e4a5818>\u001b[0m in \u001b[0;36mtrim_loop\u001b[0;34m(tour, random_mistake)\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;31m# 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))\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0;31m# while this mistake extends to the next step in the trace...\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m while (mistakes[end_mistake_index].i + 1 < len(trace) and \n\u001b[0m\u001b[1;32m 11\u001b[0m \u001b[0mend_mistake_index\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m1\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmistakes\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mand\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0mmistakes\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mend_mistake_index\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mi\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m1\u001b[0m \u001b[0;34m==\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
2957 "\u001b[0;31mIndexError\u001b[0m: list index out of range"
2958 ]
2959 }
2960 ],
2961 "source": [
2962 "trim_loop(w_tour)"
2963 ]
2964 },
2965 {
2966 "cell_type": "code",
2967 "execution_count": 109,
2968 "metadata": {},
2969 "outputs": [
2970 {
2971 "data": {
2972 "image/png": "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\n",
2973 "text/plain": [
2974 "<matplotlib.figure.Figure at 0x7f03fd0eab38>"
2975 ]
2976 },
2977 "metadata": {},
2978 "output_type": "display_data"
2979 }
2980 ],
2981 "source": [
2982 "lc = trace_tour(square_tour(a=10))\n",
2983 "rw = guided_walk(lc, wander_limit=4, locus_limit=2)\n",
2984 "plot_trace(trace_tour(rw))"
2985 ]
2986 },
2987 {
2988 "cell_type": "code",
2989 "execution_count": 110,
2990 "metadata": {},
2991 "outputs": [
2992 {
2993 "data": {
2994 "text/plain": [
2995 "(292,\n",
2996 " 10,\n",
2997 " 'RFLLFFLFLL',\n",
2998 " [Step(x=-1, y=0, dir=<Direction.DOWN: 3>),\n",
2999 " Step(x=0, y=0, dir=<Direction.RIGHT: 2>)])"
3000 ]
3001 },
3002 "execution_count": 110,
3003 "metadata": {},
3004 "output_type": "execute_result"
3005 },
3006 {
3007 "data": {
3008 "image/png": "iVBORw0KGgoAAAANSUhEUgAAANsAAAEACAYAAAA6DQMYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAEWlJREFUeJzt3H2QVfV9x/H3d3dZdlkEpVhUHh0oSSulBoSkSdUrFkVj\niqVhWtuZqjhN2lrNwIS11Yw8mXY3JEYyGUd8SJSkhGQwGiAxgUCvyTbVRGRBx4fgKA9CQEU2Drvg\n7MO3f9zjzgp799675+zvsMvnNXOH+/Db7/lw2c8955571dwdEel7ZWkHEDlTqGwigahsIoGobCKB\nqGwigahsIoHELpuZjTGzbWb2kpm9YGa3JxFMZKCxuJ+zmdl5wHnu3mhmQ4HtwFx3fyWJgCIDRew9\nm7sfcvfG6Pox4GVgdNy5IgNNou/ZzGwCcDHwbJJzRQaCxMoWHUKuB74Q7eFEpIuKJIaYWQW5on3H\n3X+UZ42+hCkDhrtbqT+T1J7tW8BL7r6qp0XunvhlyZIlfTK3L2f3t7n9MXNfPhe9lcSp/08B/wDM\nMrMdZva8mc2JO1dkoIl9GOnu/wuUJ5BFZEDr998gyWQy/W52f5vbl7P729w4Yn+oXfSGzDzUtkT6\nkpnhKZ4gEZECVDaRQFQ2kUBUNpFAVDaRQFQ2kUBUNpFAVDaRQFQ2kUBUNpFAVDaRQFQ2kUBUNpFA\nVDaRQFQ2kUBUNpFAVDaRQFQ2kUBUNpFAVDaRQFQ2kUBUNpFAVDaRQFQ2kUBUNpFAVDaRQFQ2kUBU\nNpFAVDaRQFQ2kUBUNpFAVDaRQFQ2kUBUNpFAEimbmT1iZofNbFcS80QGoqT2bN8Grk5o1mnH3dm2\nbRuHDh1KO0rRmpub2bRpE+3t7WlHkUgiZXP3BuBoErNOJ+7O5s2bmTp1KrNnz+aee+5JO1JBzc3N\n1NXVccEFFzB37lx27tyZdiSJVKQd4HS1ceNG7rzzTt544w2am5sBWLduHcOHD085WX6tra2sXr2a\ntrY2WlpaGDx4MPX19UyaNCntaN0655xzWLhwIeXl5WlHCcLcPZlBZuOBje4+Nc/jvmTJks7bmUyG\nTCaTyLb7gplRVlZGR0dH2lGKNmTIENrb23n//ffTjlK0G264gbVr16Ydo0fZbJZsNtt5e9myZbi7\nlTzI3RO5AOOBXT087v0J4A899JBPmzbNa2pqHPBbb7017Vg9amlp8a997Wt+9tlne01NjVdVVfn2\n7dvTjtWt9evX+5AhQ7yqqsoPHjyYdpySRL/LJXckyVP/Fl0GjJkzZ7J9+3Y2bdrEjBkzmD59etqR\nelRdXc2iRYs4ePAgy5cvZ9KkSYwaNSrtWKfo6OigtraWlpYWOjo6WLFiRdqRgkjkMNLM1gIZ4A+A\nw8ASd//2SWs8iW2FYmbs3LmTqVO7PSqWGB5//HFuuukmjh07BkBVVRWvv/46559/fsrJimNmvTqM\nTOps5N+7+wXuPtjdx51cNJGuHn74YVpbWwEoKyujra2NH/7whymn6ns6GynBPfroo+zfv58ZM2Yw\nYcIEvv/973PRRRelHavPqWwS3KhRozrfS06YMIFLLrkk5URh6LuRIoGobCKBqGwigahsIoGobCKB\nqGwigahsIoGobCKBqGwigahsIoGobCKBqGwigahsIoGobCKBqGwigahsIoGobCKBqGwigahsIoGo\nbCKBqGwigahsIoGobCKBqGwigahsIoGobCKBqGwigahsIoGobCKBqGwigahsIoGobCKBqGwn+f3v\nf89bb70FwDvvvMORI0dSTiQDRSJlM7M5ZvaKmf3WzO5IYmYa2traGDduHGPHjgVgzpw5nHvuuezZ\nsyfdYDIgxC6bmZUB3wSuBi4CbjCzj8adm4aKigouvfRS2traAGhtbWXs2LGd5ROJI4k920xgt7vv\ndfdWYB0wN4G5qairq2Pw4MEADB06lPr6esrLy1NOdaq6ujpuu+02Dh8+nHYUKVISZRsN7O9y+83o\nvn5pypQpzJo1CzNjxIgRzJ8/P+1I3Vq/fj0PPPAAF154Ibfffnvn+0w5fSVRNuvmPk9gbmrq6upw\nd/bt20dFRQVmdtpdtm/fTltbG8ePH2f16tWMGTOGhQsXpv3UlWz48OFpRwimIoEZbwLjutweAxzs\nbuHSpUs7r2cyGTKZTAKbT96UKVN48MEHWbNmTdpR8mpoaOi8XllZyaBBg7jvvvv4+te/nmKq4jU1\nNVFZWcm+ffvSjlJQNpslm83GH+TusS5AOfAaMB6oBBqBP+5mnUtypk+f7oMGDfLJkyf7hg0b/Itf\n/KL3p+f4zjvv9KqqKq+pqfGnn3467TgliZ7nkrsSe8/m7u1m9m/AZnKHpY+4+8tx50rP6uvraWlp\n4brrrsPM+OUvf5l2pKI1NTWxatUqTpw4AcDixYt59tlnU07V95I4jMTdfwp8JIlZUpwrr7wy7Qi9\ntnLlSlpbWztvNzY28otf/ILLLrssxVR9T98gkeCOHTvGyJEjO2+PHDmSd999N8VEYahsEtyqVas4\ncOAAALNmzeLAgQNcf/31KafqeyqbSCAqm0ggKptIICqbSCAqm0ggKptIICqbSCAqm0ggKptIICqb\nSCAqm0ggKptIICqbSCAqm0ggKptIICqbSCAqm0ggKptIICqbSCAqm0ggKptIICqbSCAqm0ggKptI\nICqbSCAqm0ggKptIICqbSCAqm0ggKptIICqbSCAqm0ggKptIICpbP3f06FHuvfdennjiCQDuvfde\ntmzZknIq6U6sspnZZ83sRTNrN7NpSYWS4jU0NLB48WL27t1LWVkZtbW11NbWph1LuhF3z/YC8NfA\n0wlkkV649tprGTNmDK2trXR0dFBdXc2KFSvSjiXdiFU2d3/V3XcDllAeKVF5eTn19fUMHToUgNGj\nR/PpT3865VTSHb1nGwDmz5/PiBEjGDRoEF/96lcx02vf6ahg2cxsi5nt6nJ5IfrzMyECSmHl5eUs\nWLCAYcOG9au92oQJExg/fnzaMYKpKLTA3WcntbGlS5d2Xs9kMmQymaRGn/Gam5s5cuRIv9mrNTY2\ncuDAAZ588knuv/9+qqqq0o6UVzabJZvNxh/k7rEvwP8A0wuscek7ixcv9v70HM+ePdvNzGtqanzV\nqlVpxylJ9DyX3JO4p/6vN7P9wCeATWb2VMzuyxmgsbGRhoYG3J3m5maWLl3KiRMn0o7V5+KejXzS\n3ce6e7W7n+/u1yQVTAauu+++u7NcZsZ7773HmjVrUk7V93Q2UoJbtGgRy5cvB3JvY5YuXcpVV12V\ncqq+Z7lD0AAbMvNQ2zoT1dbWsnLlSvrTc2xmzJo1i61bt6YdpSRmhruXfCZKezaRQFQ2kUBUNpFA\nVDaRQFQ2kUBUNpFAVDaRQFQ2kUBUNpFAVDaRQFQ2kUBUNpFAVDaRQFQ2kUBUNpFAVDaRQFQ2kUBU\nNpFAVDaRQFQ2kUBUNpFAVDaRQFQ2kUBUNpFAVDaRQFQ2kUBUNpFAVDaRQFQ2kUBUNpFAVDaRQFQ2\nkUBUNpFAVLZ+7rnnnmPSpEmsXLkSgIkTJ3LzzTennEq6E6tsZvYVM3vZzBrN7HEzG5ZUMClOVVUV\ne/fu7by9Z88ejh8/nmIiySfunm0zcJG7XwzsBv4jfiQpxZQpU7j66qspK8v9U1ZWVvLlL3855VSn\nam9v57HHHmP//v1pR0lNrLK5+8/dvSO6+QwwJn4kKVVdXR2DBw+mvLycuXPnMnHixLQjneLtt99m\nwYIFTJ48mQULFpyRpatIcNYCYF2C86RIU6ZM4YorruAnP/kJR48eZd68eWlHOkVTUxMdHR2cOHGC\n7373u3zve98D6NwjnwnM3XteYLYFGNX1LsCBu9x9Y7TmLmCau/9ND3N8yZIlnbczmQyZTKb3yeVD\nduzYwcyZM2lra0s7SlGqq6upqKhg69atzJgxI+04Pcpms2Sz2c7by5Ytw92t1DkFy1ZwgNmNwOeA\nWe7+fg/rPO62pP86dOgQ48aNo7KykurqapYvX84tt9xCZWVl2tFKZma9Klusw0gzmwPUApf1VDSR\ns846i8svv5x58+b125LFFWvPZma7gUrgSHTXM+7+r3nWas8mA0Jv92yxDyOL3pDKJgNEb8t25pwK\nEkmZyiYSiMomEojKJhKIyiYSiMomEojKJhKIyiYSiMomEojKJhKIyiYSiMomEojKJhKIyiYSiMom\nEojKJhKIyiYSiMomEojKJhKIyiYSiMomEojKJhKIyiYSiMomEojKJhKIyiYSiMomEojKJhKIyiYS\niMomEojKJhKIyiYSiMomEojKJhKIyiYSSKyymdlyM9tpZjvM7Kdmdl5SwUQGmrh7tq+4+5+5+8eA\nHwNLEshUkmw22+9m97e5fTm7v82NI1bZ3P1Yl5s1QEe8OKXTL1jfz+3L2f1tbhwVcQeY2T3APwJN\nwBWxE4kMUAX3bGa2xcx2dbm8EP35GQB3/5K7jwP+G7itrwOL9Ffm7skMMhsH/Njd/zTP48lsSOQ0\n4O5W6s/EOow0s0nu/lp0cy7wcr61vQknMpDE2rOZ2XpgMrkTI3uBf3b33yWUTWRASewwUkR61mff\nIDGzr5jZy2bWaGaPm9mwPOvmmNkrZvZbM7ujiLmfNbMXzazdzKb1sG5Plw/cf11k5mJnl5r5HDPb\nbGavmtnPzGx4nnXtZvZ8lPnJ3m7fzCrNbJ2Z7Taz/4veTxdUxNwbzeytKOPzZragyLmPmNlhM9vV\nw5pvRHkbzeziJOaa2eVm1tQl75eKnDvGzLaZ2UvRCcHbE8ns7n1yAf4SKIuu1wH/1c2aMuA1YDww\nCGgEPlpg7keAPwK2AdN6WPc6cE6JmQvO7mXmeqA2un4HUJdn3XtFZCy4feBfgPuj638LrEto7o3A\nN3rxu/AXwMXArjyPX0Pu5BrAx4FnEpp7ObChF3nPAy6Org8FXu3muSg5c5/t2dz95+7+wYfczwBj\nulk2E9jt7nvdvRVYR+5ES09zX3X33UChEy5GiXvuImeXnDl6/LHo+mPA9XnWFXMSqZjtd93eeuDK\nhOYWm/FD3L0BONrDkrnAmmjts8BwMxuVwFzoXd5D7t4YXT9G7sTf6LiZQ30ReQHwVDf3jwb2d7n9\nJqf+pXrLgZ+Z2W/M7J8Smgm9y/yH7n4Ycv+QwLl51g02s1+b2a/MLF+Bi9l+5xp3bweazGxEgYzF\n/r3mRYdNPzCz7l5Ae+PkbR/Is+3e+ER0WP5jM/uTUn/YzCaQ23s+e9JDJWeOe+p/C9C1zUbul/wu\nd98YrbkLaHX3td2N6OY+L2ZuET7p7ofM7Fxgi5m97O4NCcwuNXNR7xMi46LMFwLbzGyXu79RzPYL\nrLFu1pysmLkbgLXu3mpmnye39yxmr1lIMdvuje3AeHdvMbNrgCfJnT0vLpTZUHJHBl/wD381EXqR\nOVbZ3H12T4+b2Y3AtcCsPEveBLq+eR8DHHT3L8TJFWU7FP35tpk9Qe4wqaFQ5iKUnDl6Ez/K3Q9H\n/2XEWwUyv2FmWeBjwMll63b7J63ZD4wFDppZOTDM3QsdbhWce9KMh8i9F03Cm+Ty5t12b3QtiLs/\nZWb3m9kId3+30M+aWQW5on3H3X+UROa+PBs5B6gF/srd38+z7DfAJDMbb2aVwN+Re/UsejN5tj0k\nelXCzGqAq4AXS5ibdza9y7wBuCm6fiNwyj+emZ0dzcPMRgKfBF7q5fY3RtsBmE/uhE8hBefah/8T\nqrl58uVj5H9ON5D7fi1m9gmg6YPD7jhzu76HMrOZ5D7qKli0yLeAl9x9VWKZSz1TU8IZnd3kPuh+\nPrp8cHbsfGBTl3VzyJ3t2Q38exFzryf3yn0c+B3w1MlzgQvJnU3bAbxQzNxiZ/cy8wjg59HPbAHO\nju6fDjwYXf9zYFeUeSdwUw/zTtk+sAy4Lro+GPhB9PgzwIQi//6F5v4nuRetHcBWYHKRc9eSe9V/\nH9gH3Ax8HvhclzXfJHc2dCc9nGUuZS5wa5e8vwI+XuTcTwHtXX6Hno+em1iZ9aG2SCD63yKIBKKy\niQSisokEorKJBKKyiQSisokEorKJBKKyiQTy/zjFjsdEQVmOAAAAAElFTkSuQmCC\n",
3009 "text/plain": [
3010 "<matplotlib.figure.Figure at 0x7f03fd712198>"
3011 ]
3012 },
3013 "metadata": {},
3014 "output_type": "display_data"
3015 }
3016 ],
3017 "source": [
3018 "rw_trimmed = trim_all_loops(rw)\n",
3019 "plot_trace(trace_tour(rw_trimmed))\n",
3020 "len(rw), len(rw_trimmed), rw_trimmed, trace_tour(rw_trimmed)[-2:]"
3021 ]
3022 },
3023 {
3024 "cell_type": "code",
3025 "execution_count": 111,
3026 "metadata": {},
3027 "outputs": [
3028 {
3029 "data": {
3030 "text/plain": [
3031 "(1, Step(x=0, y=0, dir=<Direction.RIGHT: 2>))"
3032 ]
3033 },
3034 "execution_count": 111,
3035 "metadata": {},
3036 "output_type": "execute_result"
3037 },
3038 {
3039 "data": {
3040 "image/png": "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\noOEAAAAASUVORK5CYII=\n",
3041 "text/plain": [
3042 "<matplotlib.figure.Figure at 0x7f03fd6c24a8>"
3043 ]
3044 },
3045 "metadata": {},
3046 "output_type": "display_data"
3047 }
3048 ],
3049 "source": [
3050 "rw_trimmed = rw\n",
3051 "mks = len(mistake_positions(trace_tour(rw_trimmed)))\n",
3052 "while mks >= 4:\n",
3053 " rw_trimmed = trim_loop(rw_trimmed, random_mistake=True)\n",
3054 " mks = len(mistake_positions(trace_tour(rw_trimmed)))\n",
3055 " \n",
3056 "# rw_trimmed = trim_all_loops(rw)\n",
3057 "plot_trace(trace_tour(rw_trimmed))\n",
3058 "mks, trace_tour(rw_trimmed)[-1]"
3059 ]
3060 },
3061 {
3062 "cell_type": "code",
3063 "execution_count": 112,
3064 "metadata": {
3065 "collapsed": true
3066 },
3067 "outputs": [],
3068 "source": [
3069 "def trim_some_mistakes(tour, mistake_limit):\n",
3070 " trimmed_tour = rw\n",
3071 " mistake_count = len(mistake_positions(trace_tour(trimmed_tour)))\n",
3072 " while len(mistake_positions(trace_tour(trimmed_tour))) > mistake_limit:\n",
3073 " trimmed_tour = trim_loop(trimmed_tour, random_mistake=True)\n",
3074 " return trimmed_tour"
3075 ]
3076 },
3077 {
3078 "cell_type": "code",
3079 "execution_count": 113,
3080 "metadata": {},
3081 "outputs": [
3082 {
3083 "data": {
3084 "text/plain": [
3085 "(3, Step(x=0, y=0, dir=<Direction.RIGHT: 2>))"
3086 ]
3087 },
3088 "execution_count": 113,
3089 "metadata": {},
3090 "output_type": "execute_result"
3091 },
3092 {
3093 "data": {
3094 "image/png": "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\n",
3095 "text/plain": [
3096 "<matplotlib.figure.Figure at 0x7f03fdb2d6d8>"
3097 ]
3098 },
3099 "metadata": {},
3100 "output_type": "display_data"
3101 }
3102 ],
3103 "source": [
3104 "rw_trimmed = trim_some_mistakes(rw, 4)\n",
3105 "\n",
3106 "plot_trace(trace_tour(rw_trimmed))\n",
3107 "len(mistake_positions(trace_tour(rw_trimmed))), trace_tour(rw_trimmed)[-1]"
3108 ]
3109 },
3110 {
3111 "cell_type": "code",
3112 "execution_count": 114,
3113 "metadata": {
3114 "collapsed": true
3115 },
3116 "outputs": [],
3117 "source": [
3118 "# patterns = [square_tour, cross_tour, quincunx_tour, heart_tour_func]\n",
3119 "# tours_filename = 'tours-with-mistakes.txt'\n",
3120 "\n",
3121 "# try:\n",
3122 "# os.remove(tours_filename)\n",
3123 "# except OSError:\n",
3124 "# pass\n",
3125 "\n",
3126 "# success_count = 0\n",
3127 "# while success_count < 100:\n",
3128 "# lc = trace_tour(random.choice(patterns)())\n",
3129 "# rw = guided_walk(lc)\n",
3130 "# if rw:\n",
3131 "# rw_trimmed = trim_some_mistakes(rw, random.randint(0, 15) + random.randint(1, 3))\n",
3132 "# if len(rw_trimmed) > 10:\n",
3133 "# with open(tours_filename, 'a') as f:\n",
3134 "# f.write(rw_trimmed + '\\n')\n",
3135 "# success_count += 1"
3136 ]
3137 },
3138 {
3139 "cell_type": "code",
3140 "execution_count": 115,
3141 "metadata": {},
3142 "outputs": [
3143 {
3144 "data": {
3145 "image/png": "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\nu6uK/+qrr/Lss8822CJvcXExhYWFzj2UzjnJO++8A8Add9zBxx9/rPf49vDx8VEvZsCAAQwbNoyh\nQ4cybNgwtc7p7e1N+/btHYqvffv2HD9+XBnQfPbZZ4EzPf3gwYPtWt0NDAysM+poDfrTOq0fbTvt\noEGDANQoVdt1V7usmW/HbU00S4+v9e72KC8vd7jH//HHH3nllVdwd3fHzc2Nqqoqxo4dq3r68ePH\nExAQgMlkorq6Gm9vb0pLSwkJCaGoqEiZ9lq+fDmdOnUiIyND38Kr4xQPPPAAu3fvJjc3l88//5yb\nb76ZoKAg8vLy8PPzo7CwkB9++IHXXnut1a3hA82jsqup3Hp5ecnBgwdLPz8/eeGFF8rAwEDZp08f\n2a5dOwnIq666yiVqiunp6Q6H/eOPPyQgb7vttkanrXP2o5VVjfT0dPX7pZdeku3atZMdOnSQERER\nSkW8paClrexqyjIVFRXk5uZSUlJCbm4uhYWFZGVlqSF7Yx1fyNOjCmd6by8vLwDdWo+OQ9Q2uqHt\ntZdS8q9//Uud16ztvv/++82eR0doloqvzb2ff/55dc7T05PKykp69+7Nrbfe6pJ0tPm6h4eHw/do\nJr10lV0dRzhx4oSFBV2tEdDK3sqVK7nxxhut3tuaaNZtubW19jSCg4O5+uqrGx2/9ieYt8j1oXns\nqc+Ygo4O1FiKMlcnb0iZaw00a8U/efIk7dq1w9PTk8LCQkpLSwkPD3e6t62srCQ/P1/11uYquAAH\nDhwgJycHg8GA0WhUQr+goCC8vb0twkopMZlMusqujkMcOHBA7RaFtqvA0ywVX/NnFx4eDkBBQQFB\nQUHq+nnnnedUfBdffDHbtm2zef3KK690OK709HT8/f11bzs6DhEfH19nLwmc6fHbilfnZsml5mVE\nm+NrcyStt9XW8h1l27Zt9OzZU91v7VNzqql9att5zcNAzX7q4uJii1ZcR8cWBw4c4PDhw3XOO+vp\nqaVplorv5eWFEILk5GQAOnXqpK41ZIgUEBDAkSNH1PxcCEGHDh2AM+60a38uWbIEgFOnTql7oGaf\nP6Du19GxR9euXS0UzWrP8SdOnIgQgvnz57dI/hylWYb6lZWVyigG1GzKiY6ObnB8WVlZfPPNN6rn\n3rZtG7NnzwZq/oB33nmHsLAwjEYjRqMRDw8PpJSMGjVKWdxZtWoVN954I//85z+57rrruOKKKxr/\n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\n",
3146 "text/plain": [
3147 "<matplotlib.figure.Figure at 0x7f03fd276ac8>"
3148 ]
3149 },
3150 "metadata": {},
3151 "output_type": "display_data"
3152 }
3153 ],
3154 "source": [
3155 "lc = trace_tour(square_tour())\n",
3156 "rw = guided_walk(lc, seek_step_limit=0, return_anyway=True)\n",
3157 "plot_trace(trace_tour(rw))"
3158 ]
3159 },
3160 {
3161 "cell_type": "code",
3162 "execution_count": 116,
3163 "metadata": {},
3164 "outputs": [
3165 {
3166 "data": {
3167 "image/png": "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\n",
3168 "text/plain": [
3169 "<matplotlib.figure.Figure at 0x7f03fc718f28>"
3170 ]
3171 },
3172 "metadata": {},
3173 "output_type": "display_data"
3174 }
3175 ],
3176 "source": [
3177 "rw_trimmed = trim_some_mistakes(rw, 1)\n",
3178 "plot_trace(trace_tour(rw_trimmed))"
3179 ]
3180 },
3181 {
3182 "cell_type": "code",
3183 "execution_count": 117,
3184 "metadata": {},
3185 "outputs": [
3186 {
3187 "data": {
3188 "text/plain": [
3189 "[Mistake(i=32, step=Step(x=10, y=4, dir=<Direction.RIGHT: 2>))]"
3190 ]
3191 },
3192 "execution_count": 117,
3193 "metadata": {},
3194 "output_type": "execute_result"
3195 }
3196 ],
3197 "source": [
3198 "mistake_positions(trace_tour(rw_trimmed))"
3199 ]
3200 },
3201 {
3202 "cell_type": "code",
3203 "execution_count": null,
3204 "metadata": {
3205 "collapsed": true
3206 },
3207 "outputs": [],
3208 "source": [
3209 "# patterns = [square_tour, cross_tour, quincunx_tour, heart_tour_func]\n",
3210 "# tours_filename = 'tours-open.txt'\n",
3211 "\n",
3212 "# try:\n",
3213 "# os.remove(tours_filename)\n",
3214 "# except OSError:\n",
3215 "# pass\n",
3216 "\n",
3217 "# success_count = 0\n",
3218 "# while success_count < 100:\n",
3219 "# lc = trace_tour(random.choice(patterns)())\n",
3220 "# rw = guided_walk(lc, seek_step_limit=0, return_anyway=True)\n",
3221 "# if rw:\n",
3222 "# rw_trimmed = trim_some_mistakes(rw, random.randint(0, 15) + random.randint(1, 3))\n",
3223 "# if len(rw_trimmed) > 10:\n",
3224 "# with open(tours_filename, 'a') as f:\n",
3225 "# f.write(rw_trimmed + '\\n')\n",
3226 "# success_count += 1"
3227 ]
3228 },
3229 {
3230 "cell_type": "code",
3231 "execution_count": 119,
3232 "metadata": {
3233 "collapsed": true
3234 },
3235 "outputs": [],
3236 "source": [
3237 "tours_filename = 'tours-random-walk.txt'\n",
3238 "\n",
3239 "try:\n",
3240 " os.remove(tours_filename)\n",
3241 "except OSError:\n",
3242 " pass\n",
3243 "\n",
3244 "success_count = 0\n",
3245 "while success_count < 200:\n",
3246 " rw = random_walk()\n",
3247 " if rw:\n",
3248 " if random.choice([True, False]):\n",
3249 " rw_trimmed = trim_some_mistakes(rw, random.randint(0, 15) + random.randint(1, 3))\n",
3250 " else:\n",
3251 " rw_trimmed = trim_all_loops(rw)\n",
3252 " if len(rw_trimmed) > 10:\n",
3253 " with open(tours_filename, 'a') as f:\n",
3254 " f.write(rw_trimmed + '\\n')\n",
3255 " success_count += 1"
3256 ]
3257 },
3258 {
3259 "cell_type": "code",
3260 "execution_count": null,
3261 "metadata": {
3262 "collapsed": true
3263 },
3264 "outputs": [],
3265 "source": []
3266 }
3267 ],
3268 "metadata": {
3269 "kernelspec": {
3270 "display_name": "Python 3",
3271 "language": "python",
3272 "name": "python3"
3273 },
3274 "language_info": {
3275 "codemirror_mode": {
3276 "name": "ipython",
3277 "version": 3
3278 },
3279 "file_extension": ".py",
3280 "mimetype": "text/x-python",
3281 "name": "python",
3282 "nbconvert_exporter": "python",
3283 "pygments_lexer": "ipython3",
3284 "version": "3.5.2+"
3285 }
3286 },
3287 "nbformat": 4,
3288 "nbformat_minor": 2
3289 }