Add files via upload

This commit is contained in:
Peter Norvig authored and GitHub committed 2021-08-09 13:50:59 -07:00
1 parent 219acabf36
commit c3dada7699
1 file changed
+154 -106
+154 -106
View File
@@ -12,9 +12,9 @@
"\n",
"> The game of [RaceTrack](https://link.springer.com/chapter/10.1007/978-3-642-13122-6_26) was published by recreational mathematician [Martin Gardner](http://www.martin-gardner.org/) in [1973](https://www.scientificamerican.com/article/mathematical-games-1973-01/). There have been some neat [digital versions](https://harmmade.com/vectorracer/#) since then, and it’s high time we had a race here: the Riddler-opolis 500!\n",
">\n",
"> You begin at the blue point on the starting line below the circle (diagram shown below) with a velocity vector of zero, and your goal is to circumnavigate the track in a counterclockwise loop. You’ll be moving from point to point on the grid, without ever crashing into the outer wall or the central circle. (Moving tangent to the circle is allowed, as is being on a grid point along a wall.)\n",
"> You begin at the blue point on the starting line below the circle (diagram shown below) with a velocity vector of zero, and your goal is to circumnavigate the track in a counterclockwise loop. You’ll be moving in straight line segments from point to point on the grid, without ever crashing into the outer wall or the central circle. (Moving tangent to the circle is allowed, as is being on a grid point along a wall.)\n",
">\n",
"> For each move you have a choice of nine possible destinations, corresponding to the 3x3 grid that surrounds the point formed by adding your current velocity vector to your current position. That is, you can maintain your current velocity, or you can alter your velocity (and hence your destination) by accelerating one grid point in any direction (horizontally, vertically or diagonally). For example, if your first move was up and to the right, then your nine possible second moves are shown below, although two of them will cause you to crash into the central circle.\n",
"> For each move you have a choice of nine possible destinations, corresponding to the 3x3 grid that surrounds the point formed by adding your current velocity vector to your current position. That is, you can maintain your current velocity, or you can alter your velocity (and hence your destination) by accelerating one grid point in any direction (horizontally, vertically or diagonally). For example, if your first move was up and to the right, then your nine possible second moves are shown below, although two of them will cause you to crash into the central circle and one of them is standing still.\n",
">\n",
"> ![](https://fivethirtyeight.com/wp-content/uploads/2021/08/Screen-Shot-2021-08-04-at-10.44.11-PM.png?w=400)\n",
">\n",
@@ -31,9 +31,8 @@
"- `start`: the single starting point.\n",
"- `zero`: a zero vector (your starting velocity vector).\n",
"- `radius`: the radius of the central circle (whose center is defined as the origin).\n",
"- `accelerations`: the nine possible acceleration vectors, to changes the car's velocity.\n",
"- `X(point)`, `Y(point)`: the x- and y-coordinates of a point, respectively.\n",
"- `velocity(path)`: the car's current velocity when it has just made the last move in a path."
"- `accelerations`: the nine possible acceleration vectors (to change the car's velocity), mapped to the digit number that The Riddler uses to identify them.\n"
]
},
{
@@ -43,22 +42,22 @@
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"from typing import List, Tuple\n",
"from typing import List, Tuple, Dict, Set\n",
"\n",
"Point = Vector = complex\n",
"Path = List[Point]\n",
"track = {Point(x, y) for x in range(-7, 8) for y in range(-7, 8) if abs(Point(x, y)) >= 3}\n",
"track = {Point(x, y) for x in range(-7, 8) for y in range(-7, 8) \n",
" if abs(Point(x, y)) >= 3}\n",
"start = Point(0, -5)\n",
"zero = Vector(0, 0)\n",
"radius = 3\n",
"accelerations = [Vector(x, y) for y in (1, 0, -1) for x in (-1, 0, 1)]\n",
"\n",
"def X(point) -> float: return point.real\n",
"def Y(point) -> float: return point.imag\n",
"def X(point) -> float: \"x-coordinate\"; return point.real\n",
"def Y(point) -> float: \"y-coordinate\"; return point.imag\n",
"\n",
"def velocity(path) -> Vector:\n",
" \"\"\"Velocity of the car at the end of the path.\"\"\"\n",
" return zero if len(path) == 1 else path[-1] - path[-2] "
"accelerations = {Vector(-1, 1): 1, Vector(0, 1): 2, Vector(1, 1): 3, \n",
" Vector(-1, 0): 4, Vector(0, 0): 5, Vector(1, 0): 6, \n",
" Vector(-1, -1):7, Vector(0, -1):8, Vector(1, -1):9}"
]
},
{
@@ -67,7 +66,7 @@
"source": [
"# Visualization\n",
"\n",
"I think it will be helpful now to introduce a way to visualize the racetrack and the path(s) on it:"
"I think it will be helpful to be able to visualize paths on the racetrack, so I'll define a function to do that now, even before attempting to find solutions:"
]
},
{
@@ -81,7 +80,7 @@
" fig, ax = plt.subplots()\n",
" plt.xticks([]); plt.yticks([])\n",
" ax.set_aspect('equal');\n",
" ax.add_artist(plt.Circle((0, 0), 3, alpha=0.1, color='k', ec='w'))\n",
" ax.add_artist(plt.Circle((0, 0), 3, alpha=1/3, color='k', ec='w'))\n",
" ax.plot(*XY(track), 'k,' ) # grid points\n",
" ax.plot(*XY([start]), 'ks', ms=10) # start point\n",
" ax.plot(*XY(finish), 'k:') # finish line\n",
@@ -98,7 +97,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Below is my replication of The Riddler's diagram above: the first move goes up and to the right, and there are nine paths for the second move (two of which crash into the central circle)."
"Below is my recreation of The Riddler's diagram of the first two moves. Here and throughout I'll use the convention:\n",
"- `p` is a point indicating a move\n",
" - In this example, `p` is up and right from the start to `Point(1, -4)`, so the velocity is `Vector(1, 1)`.\n",
"- `p1` is where the next point would be if the velocity remains constant.\n",
"- `p2` is where the next point actually is with acceleration applied to change the velocity."
]
},
{
@@ -108,7 +111,7 @@
"outputs": [
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -118,10 +121,11 @@
}
],
"source": [
"path1 = [start, Point(1, -4)]\n",
"paths = [path1 + [Point(path1[-1] + velocity(path1) + a)] \n",
" for a in accelerations]\n",
"plot(paths)"
"p = Point(1, -4)\n",
"p1 = p + Vector(1, 1)\n",
"p2s = [p1 + a for a in accelerations]\n",
"\n",
"plot([[start, p, p2] for p2 in p2s])"
]
},
{
@@ -130,9 +134,12 @@
"source": [
"# Circumnavigating the Track\n",
"\n",
"The goal of the race is to circumnavigate the center circle. I can test for that by seeing if the path goes from the fourth [quadrant](https://mathworld.wolfram.com/Quadrant.html) to the first, second, third, and back to the fourth. The function `is_complete(path)` does that.\n",
"The goal of the race is to circumnavigate the center circle. I can test for that by checking if the path goes from the fourth [quadrant](https://mathworld.wolfram.com/Quadrant.html) to the first, second, third, and back to the fourth. The predicate `is_complete(path)` does that.\n",
"\n",
"If you want to generalize this to other race tracks, you can change the definition of `quadrant` (there could be more than 4 quadrants/regions, and they could have any shape), and change the `regions` in the parameter list of `is_complete`."
"<center><div><img src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/e/e3/Cartesian-coordinate-system-with-quadrant.svg/242px-Cartesian-coordinate-system-with-quadrant.svg.png\" width=120></div></center>\n",
"\n",
"\n",
"If you wanted to generalize this to other race tracks, you could change the definition of `quadrant` (there could be more than 4 \"quadrants,\" and they could have any shape), and change the `goals` in `is_complete`."
]
},
{
@@ -141,13 +148,13 @@
"metadata": {},
"outputs": [],
"source": [
"def is_complete(path, regions=(4, 1, 2, 3, 4)) -> bool:\n",
" \"\"\"Does the path go through all the regions in the prescribed order?\"\"\"\n",
" i = 0\n",
"def is_complete(path, goals=(4, 1, 2, 3, 4)) -> bool:\n",
" \"\"\"Does the path go through all the goal quadrants in the prescribed order?\"\"\"\n",
" i = 0 # Index of next goal to be achieved\n",
" for p in path:\n",
" if quadrant(p) == regions[i]:\n",
" i += 1\n",
" if i == len(regions):\n",
" if quadrant(p) == goals[i]:\n",
" i += 1 # Start looking for the next goal\n",
" if i == len(goals):\n",
" return True\n",
" return False\n",
"\n",
@@ -167,12 +174,10 @@
"\n",
"I'm considering how to solve for our specific central-circle-track, and also make the code general enough that it can handle other tracks. I'll do that by splitting up responsibility for determining legal moves:\n",
"- `all_moves(path)` is general; it considers points with all 9 accelerations and returns the points that are on the track.\n",
"- `circle_track_moves(path)` is specific; it limits moves in the following ways:\n",
" - It won't let a move intersect the center circle (even if the start and end points of a move are outside the circle).\n",
"- `circular_track_moves(path)` is specific; it limits moves in the following ways:\n",
" - It won't make moves that stay in one place (they are legal, but wasteful and not needed on this track).\n",
" - It won't pass from the fourth quadrant backwards into the third (such moves are legal, but wasteful).\n",
" \n",
"In the code below `p` is the previous point on a path, `p1` is where the next point would be if the velocity remained constant, and `p2` is the point we arrive at when acceleration is applied."
" - It won't pass from the fourth quadrant backwards over the finish line into the third (legal, but wasteful).\n",
" - It won't let a move intersect the central circle (even if the start and end points of the move are outside the circle).\n"
]
},
{
@@ -181,56 +186,69 @@
"metadata": {},
"outputs": [],
"source": [
"def all_moves(path) -> List[Point]:\n",
"def all_moves(path, track=track) -> Set[Point]:\n",
" \"\"\"Moves with any allowable acceleration that end up on the track.\"\"\"\n",
" p1: Point = path[-1] + velocity(path)\n",
" p1 = path[-1] + velocity(path)\n",
" return {(p1 + a) for a in accelerations} & track\n",
" \n",
"def circle_track_moves(path) -> List[Point]:\n",
" \"\"\"Reasonable moves on the circle track.\"\"\"\n",
"def circular_track_moves(path) -> Set[Point]:\n",
" \"\"\"Reasonable moves on the circular track.\"\"\"\n",
" p = path[-1]\n",
" return [p2 for p2 in all_moves(path)\n",
" return {p2 for p2 in all_moves(path)\n",
" if p2 != p\n",
" and not (quadrant(p) == 4 and quadrant(p2) == 3) # Don't go backwards over finish line\n",
" and not intersects_circle(p, p2)]\n",
" and not (quadrant(p) == 4 and quadrant(p2) == 3) # Don't go backwards\n",
" and not intersects_circle(p, p2)}\n",
"\n",
"def intersects_circle(p: Point, p2: Point, center=zero, radius=radius, N=20) -> bool:\n",
" \"\"\"Does a line from p to p2 intersect a circle with given center and radius?\"\"\"\n",
" return any(abs(q - center) < radius for q in waypoints(p, p2, N))\n",
"def velocity(path) -> Vector:\n",
" \"\"\"Velocity of the car at the end of the path.\"\"\"\n",
" return zero if len(path) == 1 else path[-1] - path[-2] "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The math for solving for the intersection of a line segment and a circle looks [complicated](https://stackoverflow.com/questions/6091728/line-segment-circle-intersection), so instead I just define N+1 points along the line from point *p* to point *p2* and check if any of those points is within the radius of the circle (which by definition is centered on the origin). If N is too small this could miss an intersection, but that shouldn't be a problem for our uses."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"def intersects_circle(p: Point, p2: Point, radius=radius) -> bool:\n",
" \"\"\"Does any point w on the line from p to p2 fall within radius of center?\"\"\"\n",
" return any(abs(w) < radius for w in waypoints(p, p2))\n",
"\n",
"def waypoints(p, p2, N) -> List[Point]:\n",
"def waypoints(p, p2, N=20) -> List[Point]:\n",
" \"\"\"All the points that are i/N of the way from p to p2\"\"\"\n",
" return [p + (i / N) * (p2 - p)\n",
" for i in range(N + 1)]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The math for solving for the intersection of a line segment and a circle looked [complicated](https://stackoverflow.com/questions/6091728/line-segment-circle-intersection), so instead I just define N+1 points along the line from point *p* to point *p2* and ask if any of those points is within the radius of the circle. If N is too small this could miss an intersection, but on the small grid for this race track, it shouldn't be a problem."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# A Frontier of Possible Paths\n",
"\n",
"Now I want to expand paths by adding legal moves to the end until I find complete path(s). I could keep all my paths in a `list`, but there will be an exponential number of them (up to 9<sup><i>n<i/></sup> paths of length *n* and it looks like *n* will be around 10 to 13).\n",
"Now I want to expand paths by adding legal moves to the end until I find complete path(s). I could keep all my paths in a `list`, but there will be an exponential number of them (up to 9<sup><i>n<i/></sup> paths of length *n* and I estimate *n* will be around 10 to 13).\n",
"\n",
"Instead I will keep track of a `frontier`, which I define as a mapping of `{(endpoint, velocity): path}`. The idea is that there may be many paths that arrive at the some endpoint with the same velocity in the same number of moves, but if so, the best continuation of all of them will be the same, so I only need to keep one of them. \n",
"Instead I will keep track of a *frontier*, which I define as a mapping of `{(endpoint, velocity): path}`. The idea is that there may be many paths that arrive at the some endpoint with the same velocity in the same number of moves. I only need to keep one of them, because they can all be continued in exactly the same ways.\n",
" \n",
"*Note:* Before I added the limitation that moves can't pass backwards from the fourth quadrant to the third, I had a bug: sometimes the frontier would capture a `(endpoint, velocity)` pair for a path that was in the third quadrant but hadn't circumnavigated and was replacing a path to the same point that had circumnavigated. This meant that I was discarding some valid paths."
"*Note:* Before I added the limitation that moves can't pass backwards from the fourth quadrant to the third, I had **a bug**: sometimes the frontier would capture a `(endpoint, velocity)` pair for a path that was in the third quadrant but hadn't circumnavigated, and was replacing a path to the same point that had circumnavigated. That meant I was discarding some valid paths."
]
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"def expand(frontier, legal_moves=circle_track_moves) -> dict:\n",
"Frontier = Dict[Tuple[Point, Vector], Path]\n",
"\n",
"def expand(frontier, legal_moves=circular_track_moves) -> Frontier:\n",
" \"\"\"The {(endpoint, velocity): path} frontier extended one move in all legal ways.\"\"\"\n",
" return {(p, velocity([path[-1], p])): path + [p] \n",
" for path in frontier.values() \n",
@@ -243,16 +261,16 @@
"source": [
"# Searching for Fastest Complete Paths\n",
"\n",
"Now all I have to do to solve the problem is repeatedly expand the frontier until some path(s) are complete. The first completed paths found are guaranteed to be the fastest (i.e., have the fewest moves), because we are expanding one move at a time. In the end, I return a list of all the completed paths in the frontier, but there may be many other paths that are not returned, because the frontier only keeps one path for each `(endpoint, velocity)` pair along the way. "
"Now all I have to do to solve the problem is repeatedly expand the frontier until some path(s) are complete. The first completed paths found are guaranteed to be the fastest (i.e., have the fewest moves), because we are expanding one move at a time. In the end, I return a list of all the completed paths in the frontier, but there may be many other paths that are not returned, because the frontier only keeps one path for each `(endpoint, velocity)` pair, and there are only so many ways to cross the finish line. "
]
},
{
"cell_type": "code",
"execution_count": 7,
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"def search(path=[start], legal_moves=circle_track_moves) -> List[Path]:\n",
"def search(path=[start], legal_moves=circular_track_moves) -> List[Path]:\n",
" \"\"\"Find the shortest possible complete path(s).\"\"\"\n",
" frontier = {(path[-1], velocity(path)): path}\n",
" complete_paths = []\n",
@@ -266,17 +284,19 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"# Solutions"
"# Solutions\n",
"\n",
"We are ready to solve the problem:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -295,11 +315,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"We see that the fastest path takes 12 moves, and there are 7 ways to get there (with other ways discarded).\n",
"We see that the fastest solution is 12 moves, and there are at least 7 ways to get there (with other ways discarded).\n",
"\n",
"# Submitting your Answer\n",
"\n",
"I'll need a bit of work to put my answers into the form requested by The Riddler:\n",
"I'll need a bit of \"tricky work\" to put my answers into the form requested by The Riddler:\n",
"\n",
"> Finally, submitting your answer can be tricky work. Please be sure to submit both your total time, as well as your sequence of moves. Each move should be assigned a digit from 1 through 9, corresponding to the nine possible destinations of the move:\n",
">\n",
@@ -312,7 +332,7 @@
},
{
"cell_type": "code",
"execution_count": 9,
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
@@ -320,22 +340,22 @@
"\n",
"def digits_from_path(path) -> Digits:\n",
" \"\"\"The digits that the path represents.\"\"\"\n",
" return [1 + accelerations.index(velocity(path[:i + 1]) - velocity(path[:i]))\n",
" return [accelerations[velocity(path[:i + 1]) - velocity(path[:i])]\n",
" for i in range(1, len(path))]\n",
"\n",
"def path_from_digits(digits, start=start) -> Path:\n",
" \"\"\"The path that the digits represent.\"\"\"\n",
" v = zero # Velocity\n",
" v = zero # Starting velocity\n",
" path = [start]\n",
" for d in digits:\n",
" v += accelerations[d - 1]\n",
" v += next(a for a in accelerations if accelerations[a] == d)\n",
" path.append(v + path[-1])\n",
" return path"
]
},
{
"cell_type": "code",
"execution_count": 10,
"execution_count": 11,
"metadata": {},
"outputs": [
{
@@ -350,7 +370,7 @@
" [3, 3, 1, 7, 7, 5, 7, 8, 9, 9, 3, 3]]"
]
},
"execution_count": 10,
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
@@ -365,17 +385,17 @@
"source": [
"# Alternative Solutions\n",
"\n",
"We can search from five different two-move opening sequences and one five-move sequence, and get different solution paths. Every solution is 12 moves. I don't understand why every plot has exactly 7 solution paths; I suppose it is because the finish line is crowded and there are only so many ways to get there."
"I have identified six different opening sequences of moves that each lead to solutions with the fastest possible time of 12 moves. I don't understand why every plot has exactly 7 solution paths; I suppose it is just because the finish line is crowded and there are only so many ways to get there."
]
},
{
"cell_type": "code",
"execution_count": 11,
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -385,7 +405,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -395,7 +415,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -405,7 +425,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -415,7 +435,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -425,7 +445,7 @@
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAOsAAAD7CAYAAACL3GNOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3deZxT9f3v8dc3yySz78PiBaaMQkEHBYH+cClW2QRcfnbBX6VIb6nUPiq9baGAbZW2eouX/nrVWqttrUp71draWqmoYBEtVWQpCggOixQRHGD2JZOZLN/7RxaSTDKTySQkZ/g8Hw8ezCTne873JHnn883J+c5RWmuEEJnPlO4OCCHiI2EVwiAkrEIYhIRVCIOQsAphEBJWIQxCwpokSqlVSqnfn4Xt3KOUqlNK1fay3B1KqRNKqXeTuO13lVIfK6W+lax1ivgNqLAqpdoi/nmUUj9PwXauUkp9lOz1xrHdYcB3gLFa68G9LL4K+LrW+uKQ9hcppV7xhz3sC3allE0p9ZhS6qhSqlUptUspdW3oMv51fRW4Oyk7JPpkQIVVa50X+AcMAjqAP6a5W8k0AqjXWp+KY9kSYG/EbS7gWeArUZa3AMeAqUAh8APgWaVUZcRye4FCpZQ5/m6LpNBaD8h/wK3AB4CKcf9C4J/Az4Fm4H3gmpD7vwzsB1r961nsvz0X35uAF2jz/xuKr5I9C6z1t3kPmBiyvuXAcf99NaHbiuhXoX8dp4GjwPfxvalOi9juEz3suxnQwMgY95/ve+p7fQx3A5+NuG24f922Xto+ATwMvOTv7z+BwcD9QKP/8R4fsvwYYDPQ5H/srvff/h9ALWAOWfY/gd3+n03ACuAwUO9/Dkr899mB3/tvbwK2A4PS/dpM+DWd7g6kbMdgE7Cqh/sXAm7gW4AVmOcPbeCJngNUAQpftXEAE/z3XQV8FLG+VYATmO0Py0+Arf77RuOrWkP9v1cCVTH6tRb4K5DvX+4A8JVY242xjln+vuTGuL/XsOIbmTiBT0bcnu2/fW4v7Z8A6oBL/aHZBBwBFvgfn3uA1/zLWoFDwJ1AFnA1vje10f77DwPTQ9b9R2CF/+f/BWwF/gdgAx4FnvbftxhYB+T4t3kpUJDu12bCr+l0dyAlO+V79/cAn+hhmYXACUIqL7AN+FKM5Z8Hvun/OVZYXw35fSzQ4f/5fOAUvupo7aFPZqAT32fSwG2Lgc2xthtlHTvwVb4lPSzTY1j94XkVeDTG/Xfgq/Dv9LCOJ4BfR7TZH/J7NdDk//lKfNXTFHL/0/jfbP3B/q3/53ygHRjh/30/4SOiIfiG+xbgfwJvAuPS/ZpMxr8B9Zk1xAJgi9b6SC/LHdf+Z9jvKL4hLUqpa5VSW5VSDUqpJnwVs6yX9YUeoXUAdqWURWt9CF8FWAWcUko9o5QaGqV9Gb7KcjSiT+f1st1Qk4CbgVVKKWsf2gGglDIBvwO6gG9Eud8C/BD4EjC+l9WdDPm5I8rvef6fhwLHtNbekPtD9/sp4CallA24CfiX1jrwGI0A/qKUavI/T/vxvVEP8u/HK8Az/iPj/yeRxyRTDOSwPhnHcucppVTI78OBE/4XxXPAT/F9xikC1uMbEoOvcvWJ1voprfUV+F5cGrgvymJ1+KrCiIg+He/DdjS+UUAxvioTN/9j8Ri+F/pntdauKIsN8q/7+Yg3uv44AQzzv1EEBPdba70PX3ivBb6IL7wBx4BrtdZFIf/sWuvjWmuX1vqHWuuxwGXAXHyvDUMacGFVSl2G7x05nqPAFcASpZRVKfV5fAc51uOrbjZ8B3nc/q8wZoS0OwmUKqUK4+zTaKXU1f43ASe+quKJXE5r7cF3gORepVS+UmoE8G18B0niprXu9P+YFdEPpZSyB25XStn9fQr4Jb7H4DqtdUeM1QcqU2eM+xPxNr6h7Xf9z8VVwHXAMyHLPAUsAT5N+HP7CL7HawSAUqpcKXWD/+fPKKWq/UeuW/C9EXZ73I1iwIUV31HgP2utW+NY9m3gAnwV7V7gc1rren/bJfiC04jv3fyFQCOt9fv4PlN94B9+RRvShrIBq/3bqcX3JnFnjGXvwPfC/QDYgu9F+ts49iWSpvvzOwLfG8V7/t878B2Zxv9iXwxcAtSGfFd9S8Q6Al/ZeEkSrXUXcD2+ylmH7yjyAv/jHPA0vs/sm7TWdSG3P4DvudmglGrFd7DpU/77BgN/whfU/cDr9PGNL5Oo5I1kjEUptRBY5B+aDjhKqRPAd7XWSX1xKqW+ADykta5I5npF7wZiZRU+K4C7lVI7k7VC/7r+N77vjMVZZkl3B0RqaK3X4vvONpnrvDSZ6xN9c84Og4UwGhkGC2EQElYhDKJPn1nLysp0ZWVliroihNi5c2ed1ro82n19CmtlZSU7duxITq+EEN0opY7Guk+GwUIYhIRVCIOQsAphEBJWIQxCwiqEQUhYhTAICasQBpGSsIb/8QVpZ7R26dimtOtdSsKa6OQAaZcZ7dKxTWnXOxkGC2EQElYhDELCKoRBSFiFMAgJqxAGIWEVwiAkrEIYhIRVCIOQsAphEBJWIQxCwiqEQUhYhTAImXUj7TJim9KudzLrRtplxDalXe9kGCyEQUhYhTAICasQBiFhFcIgJKxCGISEVQiDkLAKYRASViEMQsIqhEFIWIUwCAmrEAYhYRXCIGTWjbTLiG1Ku97JrBtplxHblHa9k2GwEAYhYRXCICSsQhiEhFUIg5CwCmEQElYhDELCKoRBSFiFMAgJqxAGIWEVwiAs6e6ASL51S1YzKquaHHM+Dk8rB7r2cN2DK1LeVqSWVNYBZt2S1VTbJ5NrKUApRa6lgGr7ZNYtWZ3StiL1UlJZlVIJnbgs7frfblRWNRaTNew2i8lKtX0Sb93xRI9tq7MnRW07Kqs6JX2Vdn2TkrAaZUbDQGvX1dlJjjk/6n1mZaUoq7TH9mZljXp7rHVGk6mPjVHbhZLPrANAV2cnr9x1P8M7qyi1D4q6jMPTypj/vq7H9dQsfZFcS0HUtiL95DOrgXV1drJu+X3sX76O8eoy7JZsjrTU4Pa6wpZze10c6NrT6/oOdO3p1lZrzWHH/qT2WyRGwmpA0UK6u20rZd+ewJUPL2KPcxvt7ha01rS7W9jj3BbXEd3rHlwR1rbD3Y5bu6jKGcM/1j59FvZM9ET1ZSw9ceJEvWPHjhR2R/Qkcrjb7m7hsHMfn7pzPqVDh6Rkmy+tfpBR9WNw6y5OjWvhygX/lZLtCB+l1E6t9cSo90lYM186QhpKAnv2SFgNKt0hDSWBPTskrAaTSSENJYFNPQmrQWRqSENJYFNLwprhjBDSUBLY1JGwZiijhTSUBDY1JKxpFjmTpca5G5VrMmRIQ4UG9rBjP1U5Y2S2Tj9JWNMoMJMl9AR5rb0oZTJsSEO9tPpBPtlwIRZlDbtEhNvrivtkDHFGT2GVa92kuF20WTBKmej0dFD27QnMfmhZr0HN5GvdXLtiCW6vq9vyiczWScRAbxdKZt2kuF2sGStZJnvc1TTW9rTWuN1u3G43Xq8Xj8eD1+vF6/Witaauro76+nqUUphMJsxmMyaTCZPJhNVqxWKJ/fT3ZR/t5pyot8tsnf63CyWzblLM4WlN2kwWrTVOp5Ouri5cLlcwpIkKhNZqtZKVlYXNZkuoAiRzH0VsciJ/itU4d6N1eKDinQUD4PV6cTgcNDQ0cPLkSRobG2lvb6erq6tfQQ2su7Ozk7a2trD1OxyOPlWCaLN1+rKPIj4S1hRTdlPwM2pfZsF0dXXR1NTEqVOnaGpqwul09jucvfF6vXR0dAS329LSgtvt7rVd5GwdrTX7W3fJwaUkk2FwCnV1djLCcwFtupnByz9FUUU5AKOZE7ON0+mkra2Nrq6us9XNqDweD21tbbS3t2Oz2cjLyyMrKyvm8oFg/uulVyh5zUqBueRsdfWcIZU1hV753v2U2Mo53LUvGNRYurq6qK+vp6GhIe1BDRX4nFxXV0djY2OvlXbCtTM50l7DsNyRvPbob89SL88NUllTJLSqXv6DL8dczuv10tLSgsPhOIu9S0xHRwdOp5Pc3Fzy8/NjHowqnDsS72sesvb0/+sKcYZU1hSJp6p2dHRw+vRpQwQ1QGtNW1sbdXV1MUcAUl1TQ8KaAsGq6opeVb1eL01NTTQ2NuLxeNLQw/5zuVzU19fT2hr965nCuSPxaqmuySRhTYGeqqrb7aa+vt5Q1TQWrTWtra00NDR0O1It1TX5JKxJ1lNV7ezspL6+HpfLFaO1MQUOQEXul1TX5JKwJlmsqho4scGow97eBEYMnZ2dwdukuiaXhDWJYlVVh8NBU1NTUs4PzWRer5fGxsawwEp1TR6ZdZPEdtGqaiCo54rIwMZbXTPlOcy0dqFSElajzGhIZrtoVdXpdNLc3JzQNowsENjAZ9h4qmsmPIeZ2C6UDIOTJLKqut3uc2LoG0sgsF6vVz67JomENQkiq2roC/VcFnjDAvnsmgwS1iSIrKpNTU0D7uuZRDmdTlpbW6W6JoGEtZ8iq6rD4cDpdKa7WxklMItIqmv/SFj7KbSq5peW0NLSku4uZRytNc3NzYyfNUOqaz9IWPshsqo2Nzef859TY3G5XLS2tkp17QcJaz+EVlV7Qb4Mf3vR3t7OuOnXSHVNkIQ1QZFVNdbsE3FG4MR/qa6JkbAmKLSqZuXlytHfOHV0dHDRNZ+R6poACWsCIqtqW1tburtkKG1tbVJdEyB/1qUPQq9ZU2Ir54OW96ksyMfR0JDurhlKZ2cn46Zfwz/+9muq8sZyYOlLZJtz5Ro5vZDKGqfANWtyLQXBk7KH51WxYen/TXPPjEdrjcPhwKFbUShyLHkopci1FFBtn8y6JavT3cWMJLNu4hTtmjUWk5XR9nEJbftc19HRwfk5F8o1cvpAZt3EKdZ1W/pyPRdxhsfjScpjmsmvmWS0CyXD4DjFum6LXM8Line truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -436,6 +456,7 @@
],
"source": [
"openings = [3, 3], [3, 5], [3, 6], [6, 2], [6, 3], [3, 5, 2, 4, 4]\n",
"\n",
"for digits in openings:\n",
" plot(search(path_from_digits(digits)))"
]
@@ -446,19 +467,17 @@
"source": [
"# Tests and Visualizations\n",
"\n",
"Below are a few unit tests; there should be more.\n",
"\n",
"Here are three tests/visualizations for `intersects_circle`:"
"To gain more confidence in the code, here are some unit tests and visualizations:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"def test_intersects(expected: bool, segments: List[Path]):\n",
" \"\"\"Test if segments do the expected thing with `intersects_circle`.\"\"\"\n",
" \"\"\"Test if [p, q] segments get the expected result from `intersects_circle`.\"\"\"\n",
" plot(segments, finish=[])\n",
" for p, q in segments:\n",
" assert intersects_circle(p, q) is expected"
@@ -466,12 +485,12 @@
},
{
"cell_type": "code",
"execution_count": 13,
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -485,18 +504,18 @@
" [Point(-2, 3), Point(5, 2)], \n",
" [Point(-1, 5), Point(4, 0)], \n",
" [Point(2, 4), Point(2, -4)],\n",
" [Point(-3, -1),Point(1, -4)],\n",
" [Point(-3, -1),Point(1, -3)],\n",
" [Point(-6, 0), Point(7, 7)]])"
]
},
{
"cell_type": "code",
"execution_count": 14,
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAOsAAAD7CAYAAACL3GNOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAZR0lEQVR4nO3dfZAcZZ0H8O9vXnZmX2Zn9i1sQjA5Q5ELhygxygVUXqJAGSOKgCd6CuV5WhwYvJM6fCEXEcTXwljeYakHvoAiR6kxxFOvBHLyFgxo4YkQILwkJJP3mexmZ2Zndp77o7s3s7vzPt3T/fR8P1Wp7Pb00/10T3+3n6e7nxlRSoGIvC/gdgWIqD4MK5EmGFYiTTCsRJpgWIk0wbASaYJhdYiIfE9EbnR4HSIit4vIYRF5rMa8N4vIPhHZ1MDyvykih0TkThHhseIyX78BIvKAiGRFZNz894xD67lcRB50Ytk1vAnA2wAsVEq9sdJMIhIDcB2A85RSa0qmnyMi94tIWkRenF1OKXUVgKUA3g3gVLsrT43xdVhNVyml+sx/S92ujM0WAXhRKXW0xnyD5v//N2v6UQC3Abi2UkGl1H4A+wAMNVtJskcnhLUuIrJeRO4RkZ+IyJiIPCEiry15/ToRed587SkRebc5fRmAbwFYaZ69UyWLHRCRzWaZrSKyxCwjInKL2SxNi8iTInJKhXotEJFfmM3R50TkI+b0DwP4bsl6P1dl80Lm/8XSiUqpx5RSPwSwo8buKZYsoyyzdfGQuV0pEdkhImeY03ea2/qhkvnjIvIDEdkvIi+JyGdFJCAiEbP8KSXzjohIRkTmmb+/Q0T+aM73sIicWjLvv4rIK+Y+f0ZEVtXYNn0opXz7D8ADAPYDOADgIQBnV5l3PYA8gIsBhAF8EsALAMLm65cAWADjD9x7YZyV5puvXQ7gwVnL+x6AQwDeCONAvxPAXeZr5wN4HEACgABYZi2rTL22APgPAFEArzO3Z1Wl9ZYpLwA+BmBXlXneCuMMXen1LQC+DCBYZZ7LARQAXAEgCOBGAC8D+HcAEQDnARgD0GfO/wMAGwHEACwGsB3Ah83XbgNwU8my/wnAr8yfl8M4059urudDAF4017EUwE4AC8x5FwNY4vZxaNvx7HYFHN044w2NmW/kh8yDpeybZ4b10ZLfAwD2AHhzhfn/CODCkgO1XFi/W/L72wE8bf58rnlw/i2AQJX6nwBgCkCsZNrNAL5Xab1llnEAxh+hi6rMUyusK819lwMwr8I8lwN4tuT31wBQAI4rmXbQ/IMTNJd1cslrHwXwQEl9dpS89hCAD5o/3wrg87PW/QyAswCcaAb5rTD/yPrpn6+bwUqprUqpMaVUTin1fRhv+turFNlZUrYIYBeMsylE5IMlTa8UgFMADNeoQrLk5wkAfeay7wPwTRhnnb0i8m0R6S9TfgGAQ0qpsZJpLwE4vsZ6S80D8BkANzRQZrZPwWgZ9Cql9lWZb2/JzxkAUErNntYHY791wdgWS+l23QegW0ROF5FFMAL+M/O1RQD+xXofzPfiBBhn0+cAXAPjD+8+EblLRBY0vLUe5euwlqFgNAsrOcH6wbxVsRDAbvOA+Q6AqwAMKaUSMC7WWMtqeOiSUuobSqnXA/gbACeh/EWe3QAGzau5llcBeKWB9RRhNDeXiUi1ba9mGYBNSqlCk+Vns872i0qmTW+XWee7AbwPwGUA7i35g7UTRhM5UfKvRyn1Y7Psj5RSbzKXrQB8yaY6u863YRWRhIicLyJREQmJyPsBvAXAr6sUe72IXCQiIRh/oXMAHgXQC+ON328u+woYZ1bLXgALRaSrzrq9wTxrhGH0fbMwmrszKKV2AngYwM3mdpwK4MMwznKNyMF4r4Oz6hEQkSiMPrqY6yi3DWFzGbZQSk3BCONNIhIz/xj+M4A7Smb7EYxrA+83f7Z8B8DHzP0nItIrIqvN5SwVkXNFJAJjn2ZQZr/qyrdhhXGA3YhjF5iuBvAupVS1e60bYRwghwH8PYx+Xl4p9RSArwF4BEYwXwOjSW25D8CfASRF5EAddeuHcdAdhtH8OwjgqxXmfR+MCyW7YTQF/00p9T91rKOUdRV49vv9FhgH9C9hnNkyAH5TpnwQs64k2+BqGH+odgB4EEYgb7NeVEptNV9fAOC/S6ZvA/ARGN2IwwCeg9FfBoxrE1+E8X4nYXQBPm1zvV0jZge944nIegAnKqU+4HZd7CYiPQCOwLga3tDDGyJyAoxAnGb+0SKX+PnMSial1ASMM8wdIvLzesuJyDdgdAO+zaC6j2dWk5/PrOQPDCuRJtgMJtIEw0qkiaoPZ882PDysFi9e7FBViOjxxx8/oJQaKfdaQ2FdvHgxtm3bZk+tiGgOEXmp0mtsBhNpgmEl0gTDSqQJhpVIEwwrkSYauhpMRI3ZvjWJRzY+j/FDOfQNRrDywiU46fTRppbFsBI5ZPvWJO6/82kUJo3RheOHcrj/zqcBoKnAOtIMbvYDCVjOG+XcWKcfyz2y8fnpoFoKk0U8svH5ptbtSFibHRzAct4o58Y6/VYuuSON8UPlP1yj0vRa2AwmslFyRxq/v/cFvPzUIeMTuspku28w0tSyGVYiG5SGNNoXxsqLliDaE8Lv7n52RlM41BXAyguXNLUOhpWoBeVCespbjkdX1IhWKBzk1WAiN9UKqeWk00ebDudsDCtRA+oNqRMYVqI6uBlSC8NKVIUXQmphWInK8FJILQwrUQkvhtTifg2IPMDLIbV4pyZELtAhpBbv1YioDXQKqcWRmolIUw9Ks5w3yrmxznaVazWkbrwXFkfC6tWRECzn3XW2YxSMHWdSN94Li3fP+UQ20LG5W4l+NSaqg59CatG35kRl+DGkFv23gAj+DqnFP1tCHakTQmrx3xZRR+ikkFr8u2XkS50YUov/t5B8oZNDaumcLSUtMaTHdN4WkxYY0rk6d8t18OTdwG9vANK7gPhCYNU64NRL3a6VoxjSyrgHvOrJu4FNHwfyGeP39E7jd8CXgWVIa+OoG6+W++0Nx4JqyWeM6XWGVYdRN7qNguGoG5abK72rsemtrs+msn4fBcNRNzRXfKHR9J0tGgeUAlr4hjg3sbnbPO4hr1q1bmafFQAkAGRTwMargNVfA8JR9+rXIIa0ddxTXmX1S0uvBp97PXDwOeB/vwzsewp47x1A/Hh361kDQ2of7jEvO/XS8heT5r8W+NlHgW+fBVz6A2DRGe2vWw0Mqf2453S07B3A8H3AXZcB318DXPBF4A3/4Il+LEPqHO5BXY0sBT5yH/DTfwR++Ulg9x9d7ccypM7jntRZNA783Y+BB252rR/LkLYP96juAgHg3M+0vR/LkLYf96xftKkfy5C6h3vYTxzsxzKk7uOe9hub+7FOh3Tzjs3Y8MQGJI8mMdo7irXL12L1q1fbsmy/YVj9yIZ+bDvOpJt3bMb6h9cjO5UFAOw5ugfrH14PAAxsGdLIA8YrVqxQ27Ztq71QTUY0dES5fU8b/djDL9bVj50d0tPOe5Vjo2DOu+c87Dm6Z870+b3z8ZuLf2P7+nQoJyKPK6VWlHuNo246oVwd/Vg3RsEkjyYbmt7q+nQsV4rN4E5QpR/r5oWj0d7RsmfW0d5Rx9etI4a1U8zqxya/cQV+3/VpvPxC0bWru2uXr53RZwWAaDCKtcvXtq0OOmFYO0wy8mb8vutuvPxcDtFACivfkMcpl70LXd3httfFuoi07qF1mCxOYn7vfF4NroJh7RBzmrvvPB6nHPxPdD1/L/DrB1x7rnj1q1fjnu33AABuv+D2tq9fJwyrz1XtkxZ/6OpzxdQYhtWn6rpw5NJzxdQchtVnmrq66+HxsXQMw+oTLd+C8dj4WJqLYdWcrfdJPTA+lipjWDXl2MMM7Md6FsPaBj//wyv4yq+fwe5UBgsS3bj2/KV412neHAUzzaf9WDvfi3ZjWB328z+8gk/99E/I5KcAAK+kMvjUT/8EAA0dJK48Fuizfqxd74VbOOrG4XJnfvE+vJLKzJneFQzgtFclapaPHZ1C7Kl9ODGUwGQI2DUvhN3DIRSDtc9wW7ZswVlnnVVXPauVFVXExeN34OLxH+G58En42sD1OBQcsW2dL3Z9FalUCq/rubGletbyh5dTmJwqzpl+fKIbD113bl3L4KgbH5fbXSaoAMoeNKViR6ewaE8Bg2NFTEYT2FEhpEopsz4KSpXWTeHMM89AoZAHYJQREbMVK+bPlQNfGgAlAfxX7IN4IXwirkp9BTcfuBq3DHwWT3edUrVcIxKJBDDZeLlG1ldpn1d6j8rhqBsfW5DoLntmPT7RjZ98dOWc6dPN3e3meNKL/mq6uauUQjabxeTkJPL5PAqFAorF6qGvJhAIIBwOIxwOo6urC5FIpGqAgZXA/neg+67L8LnD19nWj73iV/0AgNsvmLs/7FSplbMg0e3oeu3CsDrs2vOXzugnAUB3OIhrz186Y75KfdJQVwDZbBbjh45gcnKypXDOViwWkcvlkMvlABjhjUQiiEQi6O7uLh9cjfux9b4XXsWwOsy6cFHpCmSlkCJQxMTEOLKprK0BraZYLCKTySCTyWBsbAzd3d3o6elBKDTrMNH0fmyt98LrHLnARLVV+viUIgoYHx/H5GQTHTgHiAgikQj6+vrQ1dU1d4a/3Gvcjw13N30/9opfXQGAo24AFy4wUWXVzqRjY+npJqlXWP3kbDaL7u5uxGKxmWdan96P9SKGtU2q9UmPHDmCiYkJt6tYUyaTQTabRW9vL2Kx2LE+rcb9WJ0wrA6r9jBDJpPB4f1HMDU1VXtBHqGUwvj4OHK5HOLx+LGmsab9WJ0wrA6pFtJisYhUKqXF2bSSfD6PgwcPoq+vD7FYzJjI54odxbDarNZjgYVCAYcPH0Y+n3e5pq1TSmFsbAz5fB6JRAKBQMB4gf1YRzCsNqnn2d1cLodUKqVVs7cLine truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -516,12 +535,12 @@
},
{
"cell_type": "code",
"execution_count": 15,
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -531,9 +550,9 @@
}
],
"source": [
"# The waypoints that are checked to see if they are outside the circle\n",
"p, q = Point(-7, 0), Point(5, -6)\n",
"plot([waypoints(p, q, 20)], finish=[])\n",
"# Waypoints on a line segment that are checked to see if they are outside the circle\n",
"p, q = Point(-7, 7), Point(7, 0)\n",
"plot([waypoints(p, q)], finish=[])\n",
"assert not intersects_circle(p, q)"
]
},
@@ -541,18 +560,18 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Here's a visualization for `expand(frontier)` showing the first few expansions.\n",
"Note that the growth in number of paths is much slower then 9<sup><i>n</i></sup>."
"Here's a visualization for `expand(frontier)` showing the first six expansions.\n",
"Note that the growth in number of paths is much slower then O(9<sup><i>n</i></sup>). After 6 moves there are only 1,107 paths, or just 0.2% of 9<sup>6</sup> = 531,441."
]
},
{
"cell_type": "code",
"execution_count": 16,
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -562,7 +581,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -572,7 +591,7 @@
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAOsAAAD7CAYAAACL3GNOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOydd3hUVd6A33OnZiZtElIglBAIvVcBBRULCCpiQ8XGp2sva1nXsi7rLurau2vvHQEREFQUpUjvLdSEJJCQ3qbP3O+PSYZJZiZADJCB8z4PD5l753fvnTv3nXPO755zj1BVFYlE0vJRTvQBSCSSI0PKKpFECFJWiSRCkLJKJBGClFUiiRCkrBJJhCBlPQEIIW4QQiw5Dvu5TQhRKISoFkIkNvK+y4UQe4UQZUex7SuFEBVCiGVCiDbNc8SSxohoWYUQdwohVgshHEKIDxus0wshpgshsoUQqhDizDDb0Ashtgsh8o7RMabX7l97LLbfyH51wAvAeaqqRquqWtLI2/8OvKyqqiUg/iwhxCYhRLkQokQIMVMIkVa3XlXVr4BWtS+vOBafQVKfiJYV2A/8B3g/zPolwGSgoJFtPAgcbObjagmkAEZgyxG8NwHY3GDZVuB8VVXjgTbATuDNwDeoquoCdgBhS21J8xHRsqqqOkNV1VlAUKmhqqpTVdWXVFVdAnhCxQshOuKT+anG9iOEOFMIkSeEeEQIUVxbWl8TsH6cEGKdEKJSCJErhJgaEP577f/ltdXRYQFxzwkhymqroGMDlt8ghNgjhKiqXXcNIRBCGIQQLwkh9tf+e6l2WRcgK2C/vzT2+QAt4A1coKpqoaqq+wMWeYDOIWK9tfFhCahd3Fh7fsqEELcKIQYLITbWlt6vBbxfEUI8JoTIEUIcFEJ8LISIq103XwhxZ4PtbxBCTKz9u5sQ4ichRKkQIksIcUXA+y4QQmytPa/5QogHDnNeWhaqqkb8P3yl64eNrM8DzgyxfA5wCXAmkNdI/JmAG1+10gCMAmqArgHre+P78esDFAITatelAyqgDdjeDYALuBnQALfhqyUIwAxUBmy7NdAzzHE9ASwHkoEkYBnw73D7DbON3rXH0jnEuvZAOT4hXcANId7zL+A3wNzIPuqO5X/4SvvzADswq/bY0/DVbkbVvn8KsAvIAKKBGcAnteuuA5YGbLtH7TEaas9dLnAjvh+QAUBx3fkDDgBn1P5tAQac6Gv3qK7zE30AzfIhmiBrraTza/8+UlnNAcu+Bv4R5v0vAS82uFAbyror4LWp9j2ptRdcOXApEHWYz70buCDg9flAdrj9hoifXvue5w+znwTgIeC0EOss+KrCHmBimPi6Y0kLWFYCXBnw+lvg3tq/FwK3B6zrWvtjoQVi8P1QdqhdNw14v/bvK4HFDfb9FvDP2r/3AbcAsSf6mm3Kv4iuBjcVIYQZeAa46yjCylRVrQl4nYOvLYcQYqgQ4lchRJEQogK4lUPJl3D429Gqqlpr/4yu3ceVtds4IISYK4ToFmYbbWqPI+iYjgRVVS8DRgB3CSFSG3lfKfAR8F2IRNmN+GoCCaqqzjjMLgsD/raFeB1d+3eoz6UFUlRVrQLmApNq100CPqv9uwMwtLZaXS6EKAeuwfcjCL4fwAuAHCHEb4FNkkjglJQVyMT3a79YCFGAr5rVWghRIIRIDxNjqZW8jvb4qq4AnwOzgXaqqsbhq+6J2nVHPaxJVdUFqqqei68KvB14J8xb9+O7QEMd05Huaxm+Uq7LYd6qxVdljW2wvDvwq6qqFUez38MQ6nO5OST3F8BVtbJFAb/WLs8FflNVNT7gX7SqqrcBqKq6SlXVi2s/xyx8taOIIaJlFUJohRBGfO0+jRDCGPjLX5tsMda+1NeuF/gyn+2AfrX/bsJ3IfTD94WH41+1t3rOAMYD39QujwFKVVW1CyGGAFcHxBTha/NlHOFnShFCXFT7w+AAqgmTIMN30T4mhEgSQrQCHgc+PZL9NMAB6Bscx0QhRNfaZE8Svvb6utpSNhBdbXxz8gXwVyFERyFENPAk8JWqqu7a9fPwyfxE7fK65NgcoIsQ4lohhK7232AhRPfa7+0aIUSc6stiVxL+vLZIIlpW4DF81ae/48vq2mqX1ZFVuywNWFD7dwdVVd2qqhbU/QNKAW/t63BfYAFQhu9X/zPgVlVVt9euux14QghRhU8Y/y92bRV3GrC0tmp22mE+kwLcX7ufUnzJrNvDvPc/wGpgI7AJWFu77GjxEnwtpAHzgarabXvxtfMboqFBJrkZeB/4BF8mfS++ZJS/yaKqqgNfbegcfLWauuVV+JJXk/CdvwLgv/iSTwDXAtlCiEp8zYzJzXzcxxRR2/CWNILwdaj4VFXVtif6WI4FQohl+NqBT6pHcUEIIaLw3ct+T1XVN47V8Ul8RHrJKmkensBXGhUe7o111N6/zKmNiai2X6QiS9Yj4GQvWSWRgZRVIokQZDVYIokQpKwSSYRwVMO2WrVqpaanpx+jQ5FIJGvWrClWVTUp1LqjkjU9PZ3Vq1c3z1FJJJIghBA54dbJarBEEiFIWSWSCEHKKpFECFJWiSRCkLJKJBGClFUiiRCkrBJJhHBMZPWN75ZxkRp3IvYp4w7PMZG1qYMDZFzLiDsR+5Rxh0dWgyWSCEHKKpFECFJWiSRCkLJKJBGClFUiiRCkrBJJhCBllUgiBCmrRBIhSFklkghByiqRRAhSVokkQpCySiQRghx1I+NaxD5l3OGRo25kXIvYp4w7PLIaLJFECFJWiSRCkLJKJBGClFUiiRCkrBJJhCBllUgiBCmrRBIhSFklkghByiqRRAhSVokkQpCySiQRgpRVIokQ5KgbGdci9injDo8cdSPjWsQ+ZdzhkdVgiSRCkLJKJBGClFUiiRCkrBJJhCBllUgiBCmrRBIhSFklkghByiqRRAhSVokkQpCySiQRgpRVIokQpKwSSYQgR93IuBaxTxl3eOSoGxnXIvYp4w6PrAZLJBGClFUiiRCkrBJJhCBllUgiBCmrRBIhSFklkghByiqRRAhSVokkQpCySiQRgpRVIokQpKwSSYQgZZVIIgQ56kbGtYh9yrjDo/3TWwhBpIxoiPQ4VVVxu9243W68Xi8ejwev14vX60VVVYqLiykpKUEIgaIoaDQaFEVBURR0Oh1abfivv6V8xlM9LpBjIqvk2KCqKna7HafTicvl8kvaVOqk1el06PV6DAZDs5QAkmODlLWF4/V6sdvtfkn/jJyhtu1wOHA4HIBPXoPBgMFgICoqSorbwpCytlCcTidWqxW73d6sgjaG1+vFZrNhs9moqqoiKioKk8nUaHVZcvyQ30ILw263U11djdPpPKHH4fF4qK6upqamBoPBQHR0NHq9/oQe06mOlLWF4HQ6qaqq8ldJWwp17WS73U5UVBQxMTGypD1ByLN+gvF6vVRWVmK1Wk/0oRwWm82G3W7HbDYTExMj27THGSnrCcRms1FZWYnH4znRh3LEqKpKdXU1DoeDuLg4WTU+jsgeTCcAr9dLeXk5ZWVlESVqIC6Xi5KSEqqqqk70oZwyyJL1OON2uykrK8Plcp3oQ/nTqKpKVVUVLpeL+Ph4FEX+9h9L5Nk9jjgcDkpKSk4KUQOx2+0UFxefdJ+rpSFlPU5YrVZKS0sjttp7ONxuNyUlJS0um30yIWU9DlitVsrLy5ulf2hLxuv1UlZWJoU9RshRN8c4rk7UU4WmCtuSv8MTGReInOvmGMbZ7XYqKiqatI9Ipk7Yo2nDttTv8ETHBSKrwccIt9t9SlR9w1En7PHq13wqIGU9BsgL1UfdD5akeZCyHgPKy8vlbYxa7Ha77DjRTEhZm5m6YW2SQ7SEUUQnA1LWZsTj8VBZWXmiD6PFoaoqFRUVp2z7vbmQsjYjFRUVp3w7NRwul0tWh/8kUtZmom7MpyQ8NTU1uN3uE30YEYuUtZmQpcbhqev4L2kaUtZmwGq1yuzvEWKz2WSyqYlIWZuB6urqE30IEYU8X01Djmf9k9jtdtkOO0ocDgdut/tPPcvp24JSntpzgHyHizSDjoczWnNpasJh42aty+fZBVnsL7fRJj6KB8/vyoT+aYff4cavYeETUJEHcW1h9OPQ54omH39TkLL+SSLh2UktDVVVsVqtxMbGNin+24JSHsjKxeb13QrKc7h4ICsXoFFhZ63L5+EZm7C5fMMU88ttPDxjE0Djwm78Gr6/G1w23+uKXN9rOK7CylE3fyLO7XbL4WBNxGaz1bvvejTfxVN7DvhF9W/Pq/LUngONxj27IMsvqj/O5eHZBVmN73DhE4dErcNl8y0/QuSomxMc1/CCkxw5Ho8Hm+2QAEdzHvMdoZN54ZbXsb/cdlTL/VTkHd3yEMhRNycYeV/1z9HUWkmaQXdUy+toEx91VMv9xKSGXh7XtvG4ZkbK2kTqZm+TNB2Hw9GkEufhjNZoGtQqoxTBwxmtG427uH+boGVROg0Pnt81fFBFPnhClNi6KF+S6TgiZW0iTb3QJIfwer1Nuuc6IcWCSRFEKQIBtDXoeK5ru0aTSzUON7PX76eVWUebOCMCSIuP4qmJvcMnlyry4cNx4HHCqIchrh0gfP9f+IrMBkcKMrHUPDgcDgwGw1HFrKyoocqj8r8eHZiQYjmimKd/2E5+uY2vbxnG4PTD3+Lxi2otgckzoN1gOOvvR3WczY0sWZuI7LHUPDTlPM4+WI5REZybeGS3fpbtLuaT5TncOLxj00VtAUhZm0DdDOOSP8/RyupRVeYWlTM6MRazVnPY99c43Pxt+kbSE02Nt03raKGigpS1STidTtlebSa8Xu9RJepWVtRw0OnmwqT4I3p/XfX32cv7EqU/jNwtWFSQsjaJk/VB3SeKoyldj6YKfFTV3xYuKkhZm4SUtXk50ibF0VSBj6r6GwGigswGNwnZXm1ejvR8Hk0VODD722j1N0JEBVmyNglLine truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -582,7 +601,27 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -594,7 +633,7 @@
"source": [
"frontier = {(start, zero): [start]}\n",
"\n",
"for i in range(4):\n",
"for i in range(6):\n",
" frontier = expand(frontier)\n",
" plot(frontier.values())"
]
@@ -608,7 +647,7 @@
},
{
"cell_type": "code",
"execution_count": 17,
"execution_count": 18,
"metadata": {},
"outputs": [
{
@@ -617,15 +656,15 @@
"'tests pass'"
]
},
"execution_count": 17,
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"assert start == Point(0, -5) == 0-5j\n",
"assert path1 == [start, Point(1, -4)] == [0-5j, 1-4j]\n",
"path1 = [start, Point(1, -4)] # First move\n",
"\n",
"assert start == Point(0, -5) == 0-5j\n",
"assert X(start) == 0 and Y(start) == -5 \n",
"assert velocity([start]) == 0\n",
"assert velocity(path1) == Vector(1, 1)\n",
@@ -646,7 +685,7 @@
" 1-4j, 1-5j, 1-6j}\n",
"\n",
"# But 3 moves are backwards and 1 stays in the same place; those are disallowed\n",
"assert circle_track_moves([start]) == [0-6j, 1-6j, 1-5j, 0-4j, 1-4j]\n",
"assert circular_track_moves([start]) == {0-6j, 1-6j, 1-5j, 0-4j, 1-4j}\n",
"assert expand({(start, zero): [start]}) == {\n",
" (0-6j, 0-1j): [0-5j, 0-6j],\n",
" (1-6j, 1-1j): [0-5j, 1-6j],\n",
@@ -654,7 +693,16 @@
" (0-4j, 0+1j): [0-5j, 0-4j],\n",
" (1-4j, 1+1j): [0-5j, 1-4j]}\n",
"\n",
"def is_valid_path(path, legal_moves=circular_track_moves) -> bool:\n",
" \"\"\"A valid path is complete, starts at start, stays on track, and has all legal moves.\"\"\"\n",
" return (is_complete(path) \n",
" and path[0] == start\n",
" and set(path) <= track\n",
" and all(path[i] in legal_moves(path[:i]) \n",
" for i in range(1, len(path))))\n",
"\n",
"for path in solutions:\n",
" assert is_valid_path(path)\n",
" digits = digits_from_path(path)\n",
" assert path == path_from_digits(digits_from_path(path)) # Inverses\n",
" assert digits == digits_from_path(path_from_digits(digits)) # Inverses\n",