{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "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", "1. which tours are closed?\n", "2. what is the area enclosed by the tour?" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import collections\n", "import enum\n", "import random\n", "import os\n", "\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "class Direction(enum.Enum):\n", " UP = 1\n", " RIGHT = 2\n", " DOWN = 3\n", " LEFT = 4\n", " \n", "turn_lefts = {Direction.UP: Direction.LEFT, Direction.LEFT: Direction.DOWN,\n", " Direction.DOWN: Direction.RIGHT, Direction.RIGHT: Direction.UP}\n", "\n", "turn_rights = {Direction.UP: Direction.RIGHT, Direction.RIGHT: Direction.DOWN,\n", " Direction.DOWN: Direction.LEFT, Direction.LEFT: Direction.UP}\n", "\n", "def turn_left(d):\n", " return turn_lefts[d]\n", "\n", "def turn_right(d):\n", " return turn_rights[d]\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Step = collections.namedtuple('Step', ['x', 'y', 'dir'])\n", "Mistake = collections.namedtuple('Mistake', ['i', 'step'])" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def advance(step, d):\n", " if d == Direction.UP:\n", " return Step(step.x, step.y+1, d)\n", " elif d == Direction.DOWN:\n", " return Step(step.x, step.y-1, d)\n", " elif d == Direction.LEFT:\n", " return Step(step.x-1, step.y, d)\n", " elif d == Direction.RIGHT:\n", " return Step(step.x+1, step.y, d)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def step(s, current):\n", " if s == 'F':\n", " return advance(current, current.dir)\n", " elif s == 'L':\n", " return advance(current, turn_left(current.dir))\n", " elif s == 'R':\n", " return advance(current, turn_right(current.dir))\n", " else:\n", " raise ValueError" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def trace_tour(tour, startx=0, starty=0, startdir=Direction.RIGHT):\n", " current = Step(startx, starty, startdir)\n", " trace = [current]\n", " for s in tour:\n", " current = step(s, current)\n", " trace += [current]\n", " return trace " ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def positions(trace):\n", " return [(s.x, s.y) for s in trace]" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def valid(trace):\n", " return (trace[-1].x == 0 \n", " and trace[-1].y == 0 \n", " and len(set(positions(trace))) + 1 == len(trace))" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def valid_prefix(tour):\n", " current = Step(0, 0, Direction.RIGHT)\n", " prefix = []\n", " posns = []\n", " for s in tour:\n", " current = step(s, current)\n", " prefix += [s]\n", " if (current.x, current.y) in posns:\n", " return ''\n", " elif current.x == 0 and current.y == 0: \n", " return ''.join(prefix)\n", " posns += [(current.x, current.y)]\n", " if current.x == 0 and current.y == 0:\n", " return ''.join(prefix)\n", " else:\n", " return ''" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def mistake_positions(trace, debug=False):\n", " mistakes = []\n", " current = trace[0]\n", " posns = [(0, 0)]\n", " for i, current in enumerate(trace[1:]):\n", " if (current.x, current.y) in posns:\n", " if debug: print(i, current)\n", " mistakes += [Mistake(i+1, current)]\n", " posns += [(current.x, current.y)]\n", " if (current.x, current.y) == (0, 0):\n", " return mistakes[:-1]\n", " else:\n", " return mistakes + [Mistake(len(trace)+1, current)]" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def returns_to_origin(mistake_positions):\n", " return [i for i, m in mistake_positions\n", " if (m.x, m.y) == (0, 0)]" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": true }, "outputs": [], "source": [ "sample_tours = ['FFLRLLFLRL', 'FLLFFLFFFLFFLFLLRRFR', 'FFRLLFRLLFFFRFLLRLLRRLLRLL']" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def random_walk(steps=1000):\n", " return ''.join(random.choice('FFLR') for _ in range(steps))" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def bounds(trace):\n", " return (max(s.x for s in trace),\n", " max(s.y for s in trace),\n", " min(s.x for s in trace),\n", " min(s.y for s in trace))" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": true }, "outputs": [], "source": [ "plot_wh = {Direction.UP: (0, 1), Direction.LEFT: (-1, 0),\n", " Direction.DOWN: (0, -1), Direction.RIGHT: (1, 0)}" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def chunks(items, n=2):\n", " return [items[i:i+n] for i in range(len(items) - n + 1)]" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def plot_trace(trace, colour='k', highlight_start=True,\n", " xybounds=None, fig=None, subplot_details=None, filename=None, show_axis=False):\n", " if show_axis:\n", " plt.axis('on')\n", " else:\n", " plt.axis('off')\n", " plt.axes().set_aspect('equal')\n", " \n", " if highlight_start:\n", " plt.axes().add_patch(plt.Circle((trace[0].x, trace[0].y), 0.2, color=colour))\n", " \n", " for s, t in chunks(trace, 2):\n", " w, h = plot_wh[t.dir]\n", " 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", " xh, yh, xl, yl = bounds(trace)\n", " if xybounds is not None: \n", " bxh, byh, bxl, byl = xybounds\n", " plt.xlim([min(xl, bxl)-1, max(xh, bxh)+1])\n", " plt.ylim([min(yl, byl)-1, max(yh, byh)+1])\n", " else:\n", " plt.xlim([xl-1, xh+1])\n", " plt.ylim([yl-1, yh+1])\n", " if filename:\n", " plt.savefig(filename)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def trim_loop(tour, random_mistake=False):\n", " trace = trace_tour(tour)\n", " mistakes = mistake_positions(trace)\n", " if random_mistake:\n", " end_mistake_index = random.randrange(len(mistakes))\n", " else:\n", " end_mistake_index = 0\n", "# 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", " # while this mistake extends to the next step in the trace...\n", " while (mistakes[end_mistake_index].i + 1 < len(trace) and \n", " end_mistake_index + 1 < len(mistakes) and\n", " mistakes[end_mistake_index].i + 1 == \n", " mistakes[end_mistake_index + 1].i):\n", "# 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", " # push this mistake finish point later\n", " end_mistake_index += 1\n", " mistake = mistakes[end_mistake_index]\n", " \n", " # find the first location that mentions where this mistake ends (which the point where the loop starts)\n", " mistake_loop_start = max(i for i, loc in enumerate(trace[:mistake.i])\n", " if (loc.x, loc.y) == (mistake.step.x, mistake.step.y))\n", "# print('Dealing with mistake from', mistake_loop_start, 'to', mistake.i, ', trace has len', len(trace))\n", " \n", " # direction before entering the loop\n", " direction_before = trace[mistake_loop_start].dir\n", " \n", " # find the new instruction to turn from heading before the loop to heading after the loop\n", " new_instruction = 'F'\n", " if (mistake.i + 1) < len(trace):\n", " if turn_left(direction_before) == trace[mistake.i + 1].dir:\n", " new_instruction = 'L'\n", " if turn_right(direction_before) == trace[mistake.i + 1].dir:\n", " new_instruction = 'R'\n", "# if (mistake.i + 1) < len(trace):\n", "# print('turning from', direction_before, 'to', trace[mistake.i + 1].dir, 'with', new_instruction )\n", "# else:\n", "# print('turning from', direction_before, 'to BEYOND END', 'with', new_instruction )\n", " return tour[:mistake_loop_start] + new_instruction + tour[mistake.i+1:]\n", "# return mistake, mistake_loop_start, trace[mistake_loop_start-2:mistake_loop_start+8]" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def trim_all_loops(tour, mistake_reduction_attempt_limit=10):\n", " trace = trace_tour(tour)\n", " mistake_limit = 1\n", " if trace[-1].x == 0 and trace[-1].y == 0:\n", " mistake_limit = 0\n", " mistakes = mistake_positions(trace)\n", " \n", " old_mistake_count = len(mistakes)\n", " mistake_reduction_tries = 0\n", " \n", " while len(mistakes) > mistake_limit and mistake_reduction_tries < mistake_reduction_attempt_limit:\n", " tour = trim_loop(tour)\n", " trace = trace_tour(tour)\n", " mistakes = mistake_positions(trace)\n", " if len(mistakes) < old_mistake_count:\n", " old_mistake_count = len(mistakes)\n", " mistake_reduction_tries = 0\n", " else:\n", " mistake_reduction_tries += 1\n", " if mistake_reduction_tries >= mistake_reduction_attempt_limit:\n", " return ''\n", " else:\n", " return tour" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def reverse_tour(tour):\n", " def swap(tour_step):\n", " if tour_step == 'R':\n", " return 'L'\n", " elif tour_step == 'L':\n", " return 'R'\n", " else:\n", " return tour_step\n", " \n", " return ''.join(swap(s) for s in reversed(tour))" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def wander_near(locus, current, limit=10):\n", " valid_proposal = False\n", " while not valid_proposal:\n", " s = random.choice('FFFRL')\n", " if s == 'F':\n", " proposed = advance(current, current.dir)\n", " elif s == 'L':\n", " proposed = advance(current, turn_left(current.dir))\n", " elif s == 'R':\n", " proposed = advance(current, turn_right(current.dir))\n", " if abs(proposed.x - locus.x) < limit and abs(proposed.y - locus.y) < limit:\n", " valid_proposal = True\n", "# print('At {} going to {} by step {} to {}'.format(current, locus, s, proposed))\n", " return s, proposed" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def seek(goal, current):\n", " dx = current.x - goal.x\n", " dy = current.y - goal.y\n", "\n", " if dx < 0 and abs(dx) > abs(dy): # to the left\n", " side = 'left'\n", " if current.dir == Direction.RIGHT:\n", " s = 'F'\n", " elif current.dir == Direction.UP:\n", " s = 'R'\n", " else:\n", " s = 'L'\n", " elif dx > 0 and abs(dx) > abs(dy): # to the right\n", " side = 'right'\n", " if current.dir == Direction.LEFT:\n", " s = 'F'\n", " elif current.dir == Direction.UP:\n", " s = 'L'\n", " else:\n", " s = 'R'\n", " elif dy > 0 and abs(dx) <= abs(dy): # above\n", " side = 'above'\n", " if current.dir == Direction.DOWN:\n", " s = 'F'\n", " elif current.dir == Direction.RIGHT:\n", " s = 'R'\n", " else:\n", " s = 'L'\n", " else: # below\n", " side = 'below'\n", " if current.dir == Direction.UP:\n", " s = 'F'\n", " elif current.dir == Direction.LEFT:\n", " s = 'R'\n", " else:\n", " s = 'L'\n", " if s == 'F':\n", " proposed = advance(current, current.dir)\n", " elif s == 'L':\n", " proposed = advance(current, turn_left(current.dir))\n", " elif s == 'R':\n", " proposed = advance(current, turn_right(current.dir))\n", " \n", "# print('At {} going to {}, currently {}, by step {} to {}'.format(current, goal, side, s, proposed))\n", "\n", " return s, proposed" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def guided_walk(loci, locus_limit=5, wander_limit=10, seek_step_limit=20, return_anyway=False):\n", " trail = ''\n", " current = Step(0, 0, Direction.RIGHT) \n", " l = 0\n", " finished = False\n", " while not finished:\n", " if abs(current.x - loci[l].x) < locus_limit and abs(current.y - loci[l].y) < locus_limit:\n", " l += 1\n", " if l == len(loci) - 1:\n", " finished = True\n", " s, proposed = wander_near(loci[l], current, limit=wander_limit)\n", " trail += s\n", " current = proposed\n", "# print('!! Finished loci')\n", " seek_steps = 0\n", " while not (current.x == loci[l].x and current.y == loci[l].y) and seek_steps < seek_step_limit:\n", "# error = max(abs(current.x - loci[l].x), abs(current.y - loci[l].y))\n", "# s, proposed = wander_near(loci[l], current, limit=error+1)\n", " s, proposed = seek(loci[l], current)\n", " trail += s\n", " current = proposed\n", " seek_steps += 1\n", " if seek_steps >= seek_step_limit and not return_anyway:\n", " return ''\n", " else:\n", " return trail" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_trace(trace_tour('LFFRLFFFFRLRRFFFFRFFRLFRRRFRFFLLRLRLRL'))" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def square_tour(a=80):\n", " \"a is width of square\"\n", " return ('F' * a + 'L') * 4\n", "\n", "plot_trace(trace_tour(square_tour()))" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_trace(trace_tour(square_tour(a=5)))" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def cross_tour(a=50, b=40):\n", " \"a is width of cross arm, b is length of cross arm\"\n", " return ('F' * a + 'L' + 'F' * b + 'R' + 'F' * b + 'L') * 4\n", "\n", "plot_trace(trace_tour(cross_tour()))" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def quincunx_tour(a=60, b=30, c=50):\n", " \"a is length of indent, b is indent/outdent distance, c is outdent outer length\"\n", " return ('F' * a + 'R' + 'F' * b + 'L' + 'F' * c + 'L' + 'F' * c + 'L' + 'F' * b + 'R') * 4\n", "plot_trace(trace_tour(quincunx_tour()))" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n1sd/Aw+RJa+eq45oAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "heart_points = [Step(60, 50, Direction.UP), Step(50, 90, Direction.UP),\n", " Step(20, 70, Direction.UP), \n", " Step(-40, 90, Direction.UP), Step(-60, 80, Direction.UP), \n", " Step(0, 0, Direction.RIGHT)]\n", "\n", "heart_tour = ''\n", "current = Step(0, 0, Direction.RIGHT)\n", "\n", "for hp in heart_points:\n", " while not (current.x == hp.x and current.y == hp.y):\n", " s, proposed = seek(hp, current)\n", " heart_tour += s\n", " current = proposed\n", "\n", "plot_trace(trace_tour(heart_tour))\n", "\n", "def heart_tour_func(): return heart_tour" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def trim_some_mistakes(tour, mistake_limit):\n", " trimmed_tour = rw\n", " mistake_count = len(mistake_positions(trace_tour(trimmed_tour)))\n", " while len(mistake_positions(trace_tour(trimmed_tour))) > mistake_limit:\n", " trimmed_tour = trim_loop(trimmed_tour, random_mistake=True)\n", " return trimmed_tour" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "10" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nJogA7b/FLob4OhrHyQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_trace(trace_tour(sample_tours[0]))\n", "len(sample_tours[0])" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_trace(trace_tour(sample_tours[1]))" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAASMAAAEACAYAAAD4GBC1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAACyxJREFUeJzt3W2spHdZx/Hvr552d8v2KV2FtkELGGwgkKLUB4Lb8sKm\nGB8SFXVfaGJB1FKrCUrarRVNoUDTghqr2GAjwRgxohKDDzFRUw3gAxXUhCUNqAlSoK1uS93ubrvn\n8sV9L6jJdncbz/2/zsz3k0w607S5rplz5nv+M2/uVBWSNNoZoxeQJDBGkpowRpJaMEaSWjBGklow\nRpJaMEaSWjBGklowRpJaMEaSWjBGklowRpJaMEaSWjBGklowRpJaMEaSWjBGklowRpJaMEaSWjBG\nklowRpJaMEaSWjBGklowRpJaMEaSWjBGklowRpJaMEaSWjBGklowRpJaMEaSWjBGklowRpJaMEaS\nWjBGklowRpJaMEaSWjBGklowRpJaMEaSWjBGC0qyO8nrklw0ehepm43RC6yDJLuBG4AbgV3AlyW5\ne8EVjlXVEwvOk05bqmr0DisvyYPAnvlhARmwxtdW1T8MmCudEj+mLWMP8H7gILAJXFdVWeIG7J9n\n3jbw+UsnZYyWcy9wMfBa4H1LDJw/Ht7E9HO+MsmLl5grPR3GaEFV9XhV3VNVn19o5JXAM+b7O4B9\nC82VTpsxWm1/DFw+378WePPAXaSnZIxWWFVtVtU/zQ8PVNVjQxeSnoIxktSCMZLUgjGS1IIxktSC\nMZLUgjGS1IIxktSCMZLUgjGS1IIxktSCMZLUgjGS1IIxktSCMZLUgjGS1IIxktSCMZLUgjGS1IIx\nktSCMZLUgjGS1IIxktSCMdpCSc5I8h3zw71Jnjt0IamxjdELrLgXAe+f738bcAT4vnHrSH2t1cko\nyZ4ktyW5YqGR/wgcv4jiEeAdC82Vtp21OBkleSbwU8B1wE7g8iR3LDT+PcBbgfuq6sMLzZS2nbWI\nEXAfcPH/ePzK+bak/QvPAyDJhcAhYM+I+dKpWpePaRcD9wIfAwp4W1Vl4dtfDXrub2A6Df7MoPnS\nKVmXGAE8CLwEuAq4fewqy5hPRdcz/ZxfnOTlg1eSTmidYkRN7q2q/xi9y0K+Dtg13z8b+JaBu0hP\naV2+M1pXfwZcABwErgb+Yuw60omt1clo3cwnwUfmh49W1ZNDF5KegjGS1IIxktSCMZLUgjGS1IIx\nktSCMZLUgjGS1IIxktSCMZLUgjGS1IIxktSCMZLUgjGS1IIxktSCMZLUgjGS1IIxktSCMZLUgjGS\n1IIxktSCMZLUgjGS1MJKxyiTV88Pr0myd+hCkk5opWMEXAjcDWwyXVn1bWPXkXQiKx2jqnoI+C2m\nGD0OvHGp2UneneR1SXYsNfNkklyV5A+SPGfA7CT5ziS/n+TCAfM3kvxAkt8Z8TNJsjPJDUnuWXr2\ndpGqGr3DlprfePcDDwJ3LTj6VuAQcBi4raruXHD2/5KkgAPAs4GdwJ8CH1pwhcPAa4GLgN3AbwCf\nXHD+E8ANwLnz/NuBLyw4/0zgx4EdwNnALQvOBri7qj6/8MzTtvIxAkjyLuDVJ/0Pt8ZR4Czg+6vq\nvSMWSPIR4HLGnYT/EzgH2Bg0/2GmEJ05aP5jTL8DZw2a/1ngkqraHDT/lKz0x7Tjquo1VZUlb8AR\npjfhG+Y1Lhn3CvBS4Grgo/PjVy78WuwBvhf41Dz/hQvPfxbwI0xvygLOX3j+VwA3AgeBQwvPPQSc\nB3zXMr9qT19qDU5GIyR5LvCZqjo8f0x6fVW9ffBOAS4DDtSAH3ySM4DnV9WBpWfP8zeA51TV/YPm\n7wKeVVX/stC8twPXMX08/FfgedX4dDTq2LzyqupTJ/+vljUH6OMD528yfXc1av6TTN8fjpr/OLBI\niGYvYAoRTB+Tz2U6nbW0Fh/TpHVUVdcAH5jv76mqtiECYySpCWMkqQVjJKkFYySpBWMkqQVjJKkF\nYySpBWMkqQVjJKkFYySpBWMkqQVjJKkFYySpBWMkqQVjJKkFYySpBWMkqQVjJKkFYySpBWMkqQVj\nJKkFYySpBWMkqQVjtIWSnD1f1RPg+iRXD11IaswYba1nAz85378U2DduFam3tYpRkquSfDjJq5aY\nV1WfYLqi5yZwBPj5JeZqvSXZl+SDSfaO3uV0ZLr8+mpL8grgDuBrgGfM//pPFhq/G3g58J6q+sGF\nZqqJJGcBtzP97i3lmvmf/wU8AZxfVVlw/tOyLjEq4BjwJLBjwAoHga+vqvsHzNZASd4E3Dxo/BEg\nwJuq6tZBO5yydfqY9kfArwBHgZurKgveLjBE6yfJucBPMP3O3bbU7xvT1wFHgV8GLtkOIYL1Ohm9\nr6q+J8l5wKO1Dk9cQyW5helUtAM4DFxUVQcXmHsGcE5VPbLVs/4/rdPJCICqesQQaSG7+NLXAp/h\nS99Xbqmq2txuIQLYGL2AtKqqan+SR4G3VNXzRu/T3dqdjCT1ZIwktWCMJLVgjCS1YIwktWCMJLVg\njCS1YIwktWCMJLVgjCS1YIwktWCMJLVgjCS1YIwktWCMJLVgjCS1YIwktWCMJLVgjCS1YIwktWCM\nJLVgjCS1YIwktbDSMUqyI8l754ffneSnhy4k6YRWOkbATuDb5/sFfPNSg5NkqVkdjX7+o+fr9K10\njOZL/N7BdJ3zw8BNC47/eJLfS3LZgjNbSHIp8ECSO5PsGTD/CuCzSW5Ocs7S8/X0ZNUvO5/kfOAB\nIMDRBUefAxybZ34Q+NaqWnL+FyV5I/D6BUceD8BhYBP4a+CbBsw/xPQz+IWq+tkF539Rkv3Am6vK\nk9pJrHyMAJJcC/z6gNHF9IbcBVxfVXctvUCSlwD3LT13dpQpRh8DvmHA/MNMf4R2jIpBkl8Cfgz4\nyqp6YMQO28VKf0w7rqruqaoseQM+DfwlsHdeY8egp387UxQfYn5TLvDcvxr4AvCbwPOr6hsXfu1f\nBjwG3AW8atDrTpIvB17D9PrfMmqP7WJj9AIr7NKqOgYw6rvU+VT0CqbTwbnAtcA7t3puVX0yyQXH\nn//SqupDSc6vqmNJ9p78/9gyNwFnMr3PfjjJrZ6OTmwtTkYjjHoj/h+HgL+d7/870+loEaOf/+j5\ns39j+kMA0/eGQ74z3C48Ga2wqvoE8LIkBeyrqr8ZvdM6qapfTLILeEtVXTl6n+48GUlqwRhJasEY\nSWrBGElqwRhJasEYSWrBGElqwRhJasEYSWrBGElqwRhJasEYSWrBGElqwRhJasEYSWrBGElqwRhJ\nasEYSWrBGElqwRhJasEYSWrBGElqwRhJasEYbaEkFyf56PzwziQ3Dl1ozST5IeB35/v/nOSFg1fS\nUzBGW+sY8IL5/lFg51KDkyw2q7ENpst6A1zG9PNYhK//6TNGW6iqPsd0bfsn5ts7lpib5Dzg4SR/\nnuSlS8xs6t3AI0ABf1hVB5YYmmQfcDDJncDZS8xcBamq0TustCTPBD7NmEuJF3CE6UR2RVX9/YAd\nhkryo8CvDhi9yXQa3gA2qioDdthWRrxB1kpVfW7+S/lzC47dDXwVU4g2gV8DPrLg/E7eBbwIWPJa\n98e/m3oSeBjYv+DsbcuT0QpKshv4O+ADwFur6qHBK62VJFcDdzH9Afrtqlrsu6rtzBhJasEvsCW1\nYIwktWCMJLVgjCS1YIwktWCMJLVgjCS1YIwktWCMJLVgjCS1YIwktWCMJLVgjCS1YIwktWCMJLVg\njCS1YIwktWCMJLVgjCS1YIwktWCMJLVgjCS1YIwktWCMJLVgjCS1YIwktWCMJLVgjCS1YIwktWCM\nJLVgjCS1YIwktWCMJLVgjCS1YIwktWCMJLVgjCS1YIwktWCMJLVgjCS1YIwktWCMJLVgjCS1YIwk\ntWCMJLVgjCS1YIwktWCMJLVgjCS1YIwktfDfe+gKnnXxV4YAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_trace(trace_tour(sample_tours[2]))" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['FFFLLFFFFLLF',\n", " 'LLFLFLRFLLFF',\n", " 'FLRRLLFLFFLF',\n", " 'FRLLFRRFLRFLRRFFFRLRFF',\n", " 'LLRFLFFLFFFFLFFFFLFL',\n", " 'LFRFFFRRFLRF',\n", " 'LFRFFLRRFFRFLRFR',\n", " 'LFFFLLFFFRFLLFFL',\n", " 'RLFFLRLFLFFFLF',\n", " 'RLRFFRFFFRRLRLFR']" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "samples = []\n", "while len(samples) < 10:\n", " t = valid_prefix(random_walk())\n", " if len(t) > 8 and len(t) < 25:\n", " samples += [t]\n", "samples" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_trace(trace_tour(samples[2]))" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mistakes = [t.strip() for t in open('tours-random-walk.txt').readlines()\n", " if len(t) > 8\n", " if len(t) < 26]\n", "len(mistakes)" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQMAAAEACAYAAAC3RRNlAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAABydJREFUeJzt3U+o9XldwPH3x+axNEpwEBSdCO0PghCG6MI/S5HAoF0h\n1CJIIm2VtHCgbBPSQkGFESxQN6H1UC4E2wRFCv2hmCisQCnJzGxIcWaceXS+Le43Eheiz7nnnLnn\neb3gcM/Z3M/nHu593/P7bb6z1grgGedeAHh6EAOgEgNgEwOgEgNgEwOgEgNgEwOgEgNgEwOgEgNg\nEwOgEgNgEwOgEgNgEwOgEgNgEwOgEgNgEwOgEgNgEwOgEgNgEwOgEgNgEwOgEgNgEwOgEgNgEwOg\nEgNgEwOgEgNgEwOgEgNgEwOgEoMbY2aeOzM/eu49uFyz1jr3DjfezDyj44f1o9VPV7ert6+1/vnI\n87jHiME1mJn3Vr9yonFPVat62Vrr0yeayT3AZcL1+NXq1pEff9RVCG5X31O5ZOBa3XfuBS7BWuup\nrv5Qj2ZmfrG6f631LzPj4xzXTgxuiLXWI9Uj596Dy+UyAajEANjEAKjEANjEAKjEANjEAKjEANjE\nAKjEANjEAKjEANjEAKjEANjEAKjEANjEAKjEANjEAKjEANjEAKjE4EaZmefMzL/ulx+bmdefdSEu\nihhco5l53sy8fmbmSCMe7eoAlaonq38/0hzuQc5NuAYz8/zq16s3V8+qXjszjx9p3EPVO6pPrLX+\n4UgzuAc5a/EazMxXq+8/8difWGs9fOKZXDAxuAb7uLOPVq+sXlT9wFrrWJ8M4CjcM7g+/1i9uPoh\nIeAmcs/gGu0DWD9/7j3gbvhkAFRiAGxiAFRiAGxiAFRiAGxiAFRiAGxiAFRiAGxiAFRiAGxiAFRi\nAGxiAFRiAGxiAFRiAGxiAFRiAGxiAFRicJCZuTUzX9wvf2Nm3nLWheAAFx2DmXlgZt48M7eO8f3X\nWneqT1ereqz6y2PMgVO4yHMTZubF1YPVz1XfVz0wM5870ri/qF5T/fVaSwy4sS7yeLWZ+VJ1f1f/\nsY91IvK3evVa65MnmgXX7lJjsKo/q56oXle9ZK3l+HL4Ni7yMmH7ylrrjTPz7LXWY+deBp7uLvoG\nYpUQwHfm4mMAfGfEAKjEANjEAKjEANjEAKjEANjEAKjEANjEAKjEANjEAKjEANjEAKjEANjEAKjE\nANjEAKjEANjEAKguMAYz84P76XNm5nvPugzcIBcXg+rh/fW11TvPuQjcJJcYg49XT1aPVh871pCZ\necXMvP2bPonAjXZxJyrNzAuqf6v+p7p9xFG/UN3q6sDV91dvW5f2ZnJPubgYVM3M71S/dqJxX+vq\ncNdfXms9dKKZcO0u8TKhtdbb1lpzzEf11uo/q7fssc8/308Mh7vIGJzCWuu91QvWWr977l3gOojB\nAdwj4JKIAVCJAbCJAVCJAbCJAVCJAbCJAVCJAbCJAVCJAbCJAVCJAbCJAVCJAbCJAVCJAbCJAVCJ\nAbCJAVCJAbCJwYFm5iX76Y/MzLPPugwcQAwOMDO3+v+zHd/U1VkKcCOJwQHWWneqP66+3tXJSh85\n70Zw98TgcA929T7eXmt99tzLwN0SgwOttT7T1fv4T+feBQ4hBtfHe8mN5hcYqMQA2MQAqMQA2MQA\nqMQA2MQAqMQA2MQAqMQA2MQAqMQA2MQAqMQA2MQAqMQA2MQAqMQA2MQAqMQA2MQAqMQA2MTgQDPz\nqv30VTPz3LMuAwcQgwPssxb/dL98Q/VLZ1wHDiIGB9hnLX6wulM9vp/DjSQGh/utaqoPr7X+49zL\nwN0SgwPtANxXCQE3mhgAlRgAmxgAlRgAmxgAlRgAmxgAlRgAmxgAlRgAmxgAlRgAmxgAlRgAmxgA\nlRgAmxgAlRgAmxgAlRgAmxgAlRgAmxgAlRgcbGbeuJ/+1My88KzLwAHE4AD7rMXf3y9fUb3pjOvA\nQcTgAPusxfdUT1aPVR841qyZeXBmPjUzrznWjG+Z976Z+ZOZefmJ5t2emT+YmR870bw/n5nfm5kH\nTjDrmTPz8My8a2aed+x5d2vWWufe4Ubbx7B/obp1opGPV5+rTvJHUz1RfaZ66QlmPVV9vfps9eMn\nmHenWtXnqx8+wbwn9tefX2t95ATzviv3nXuBm26t9cjM/Ez1jq4OYD2Wn6y+0dUv799VXz3irP+b\nd2c//rarCB173pPV16q/qR49wbw7Xb2Pf1U9csRZz6xetuf9d1cxf9rxyeCGmJmfrV5Z/fZa679O\nMO+t1f3Vu9ZaXz7BvN+svlw9tNY6dniamXdXf199aF/uHXPWfdVD1SeqP1xrPXXMeXdLDIDKDURg\nEwOgEgNgEwOgEgNgEwOgEgNgEwOgEgNgEwOgEgNgEwOgEgNgEwOgEgNgEwOgEgNgEwOgEgNgEwOg\nEgNgEwOgEgNgEwOgEgNgEwOgEgNgEwOgEgNgEwOgEgNgEwOgEgNgEwOgEgNgEwOgEgNgEwOgEgNg\nEwOgEgNgEwOgEgNgEwOgEgNgEwOgqv8F9Hl5y6i1C9AAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_trace(trace_tour(mistakes[0]))" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(260, 64, 'RLFFFLRRFFLFFFFLLRRFLLRRLFRFLFLFFFFFRFFFFFLFRLLFFFRFLFFRFFLLRFFF')" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "lc = trace_tour(square_tour(a=10))\n", "rw = guided_walk(lc, wander_limit=4, locus_limit=2)\n", "rw_trimmed = trim_all_loops(rw)\n", "plot_trace(trace_tour(rw_trimmed))\n", "len(rw), len(rw_trimmed), rw_trimmed" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['FRFRFFRFRF',\n", " 'LLRFLLRLFFLFLR',\n", " 'FFRFRFFFFFRFFRFFFR',\n", " 'LLRLLLRL',\n", " 'RLLLRFFFLFLLRFFL',\n", " 'LLFFFLLFFF',\n", " 'FLLRLFRFLFLFFFLLRFFR',\n", " 'LLRFLRLFLLFRFFLF',\n", " 'FFRFFFRFRFFF',\n", " 'LRRLRFRFFFFRFRLRRL',\n", " 'RFFRFFFRFFFFFRFRLFRF',\n", " 'LFLLRLLF',\n", " 'RFFRRFFRFFFLFFRRRFLRFL',\n", " 'FFFRLLFFFLFLRFFFLFFFLFLF',\n", " 'FFRFRRFFRLFFLLFRFFRRRFLR',\n", " 'RRFRFFFRFFRFRL',\n", " 'LFRFLLFFFFLLFRFL',\n", " 'FLFRRRRLLF',\n", " 'FRFFRRFFLLLL',\n", " 'RFRRFFRLFRRFFR']" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mistakes = []\n", "while len(mistakes) < 20:\n", " lc = trace_tour(square_tour(a=8))\n", " rw = guided_walk(lc, wander_limit=4, locus_limit=2)\n", " rw_trimmed = trim_some_mistakes(rw, 2)\n", " if len(rw_trimmed) > 6 and len(rw_trimmed) < 25:\n", " mistakes += [rw_trimmed]\n", "mistakes" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "# open('mistakes.txt', 'w').write('\\n'.join(mistakes))" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [], "source": [ "# open('samples.txt', 'w').write('\\n'.join(samples))" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "('LLRFLFFLFFFFLFFFFLFL', 20)" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "samples[4], len(samples[4])" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "('FRFFRRFFLLLL', 12)" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mistakes[18], len(mistakes[18])" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'RLLFRFFFFFFFRFLF'" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nrkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "t = trim_all_loops(random_walk(20))\n", "plot_trace(trace_tour(t))\n", "t" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": true }, "outputs": [], "source": [ "t2 = 'FFRFLLFFFRLRRFFFLFLRRFLLFFFFFRFLFFFFFRLLFRFRLLFFFFFFLRFFRLLFRFFFLFFLFFRFRRLLFFRLFFFFFLLFFRFRFL'\n", "t2a = t2[:51]\n", "t2b = t2[51:]" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'FFRFLLFFFRLRRFFFLFLRRFLLFFFFFRFLFFFFFRLLFRFRLLFFFFF'" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_trace(trace_tour(t2a))\n", "t2a" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'FLRFFRLLFRFFFLFFLFFRFRRLLFFRLFFFFFLLFFRFRFL'" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_trace(trace_tour(t2b))\n", "t2b" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(94,\n", " 'FFRFLLFFFRLRRFFFLFLRRFLLFFFFFRFLFFFFFRLLFRFRLLFFFFFFLRFFRLLFRFFFLFFLFFRFRRLLFFRLFFFFFLLFFRFRFL')" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\ngg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_trace(trace_tour(t2a + t2b))\n", "len(t2a + t2b), t2a + t2b" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2+" } }, "nbformat": 4, "nbformat_minor": 2 }