Add files via upload

This commit is contained in:
Peter Norvig authored and GitHub committed 2021-08-10 14:00:04 -07:00
1 parent 0ce53637fd
commit 09dc047c37
1 file changed
+193 -139
+193 -139
View File
@@ -16,21 +16,20 @@
">\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",
"> How quickly can you navigate the track? \n",
">\n",
"> ![](https://fivethirtyeight.com/wp-content/uploads/2021/08/Screen-Shot-2021-08-04-at-10.44.11-PM.png?w=200)\n",
"\n",
"\n",
"# Defining Points and Vectors\n",
"# Defining Points, Vectors, and Paths\n",
"\n",
"We will need to represent 2-D points on a grid, as well as 2-D vectors for velocity and acceleration. I will use the following choices:\n",
"- `Point(x, y)`: a point in the 2-D plane, implemented as a complex number.\n",
"- `Vector(x, y)`: a vector in the 2-D plane, also implemented as a complex number.\n",
"- `Path`: a list of points (representing the car's positions as it moves).\n",
"- `Vector(x, y)`: a 2-D vector, also implemented as a complex number.\n",
"- `Path`: the car's history of position points as it moves, implemented as a list of Points.\n",
"- `X(point)`, `Y(point)`: the x- and y-coordinates of a point, respectively.\n",
"- `zero`: a zero vector (the car's starting velocity vector).\n",
"- `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"
"- `zero`, `up`, `right`: vectors that stay still, move one unit up, and move one to the right, respectively.\n",
"- `accelerations`: the nine possible acceleration vectors (to change the car's velocity)."
]
},
{
@@ -42,31 +41,25 @@
"import matplotlib.pyplot as plt\n",
"from typing import List, Tuple, Dict, Set\n",
"\n",
"Point = Vector = complex\n",
"Path = List[Point]\n",
"Point = complex\n",
"Vector = complex\n",
"Path = List[Point]\n",
"\n",
"def X(point) -> float: \"x-coordinate\"; return point.real\n",
"def Y(point) -> float: \"y-coordinate\"; return point.imag\n",
"\n",
"zero = Vector(0, 0)\n",
"zero, up, right = Vector(0, 0), Vector(0, 1), Vector(1, 0)\n",
"\n",
"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}"
"accelerations = [up-right, up, up+right, \n",
" -right, zero, right, \n",
" -up-right, -up, -up+right]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Defining the Track\n",
"\n",
"I want to solve the particular problem posed by The Riddler, but I also want some flexibility to race on differently-shaped race tracks. I'll define the class `Track` as a subclass of a `set` (of `Point`s), with some additional attributes:\n",
"- `track.start`: the single starting point.\n",
"- `track.finish`: the two endpoints of the finish line.\n",
"- `track.radius`: the radius of the central circle (whose center is defined as the origin).\n",
"\n",
"The points in the track are all those points on a 15x15 square except the ones that fall inside the circle's radius.\n"
"*Note:* I debated whether the elements of a `Path` should be just points, or (point, velocity) pairs, because that's what uniquely identifies the state of a car. I decided it was simpler to just use points. Given a path, the velocity can be easily computed:"
]
},
{
@@ -74,18 +67,54 @@
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def velocity(path) -> Vector:\n",
" \"\"\"Velocity of the car when it is at the end of the path.\"\"\"\n",
" return zero if len(path) == 1 else path[-1] - path[-2] "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Defining the Track\n",
"\n",
"I want to solve RaceTrack games both on the particular track posed by The Riddler, and on differently-shaped race tracks. I'll define the class `Track` to be a set of points, but annotated with \n",
"attribute/value pairs (which can vary for different tracks)."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"class Track(Set):\n",
" \"\"\"The set of legal points on the track, with any attributes.\"\"\"\n",
" def __init__(self, items, **kwds):\n",
" self.update(items)\n",
" self.__dict__.update(kwds)\n",
"\n",
"radius = 3\n",
"track = Track({Point(x, y) for x in range(-7, 8) for y in range(-7, 8) \n",
" if abs(Point(x, y)) >= radius}, \n",
" start=Point(0, -5), \n",
" finish=[Point(0, -3), Point(0, -7)], \n",
" radius=radius)"
" self.__dict__.update(kwds)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For The Riddler's track, the track points are all those points on a 15x15 square except the ones that fall inside the circle's radius. The track also has three attributes:\n",
"- `track.start`: the single starting point.\n",
"- `track.finish`: the two endpoints of the finish line.\n",
"- `track.radius`: the radius of the central circle (whose center, without loss of generality, is the origin)."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"side = range(-7, 8)\n",
"points = {Point(x, y) for x in side for y in side if abs(Point(x, y)) >= 3}\n",
"track = Track(points, start=Point(0, -5), finish=[Point(0, -3), Point(0, -7)], radius=3)"
]
},
{
@@ -94,12 +123,12 @@
"source": [
"# Visualization\n",
"\n",
"I think it will be helpful to be able to visualize paths on the track, so I'll define a function to do that now, even before attempting to find solutions:"
"It will be really helpful to be able to visualize paths on the track:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
@@ -109,15 +138,16 @@
" plt.xticks([]); plt.yticks([])\n",
" ax.set_aspect('equal')\n",
" ax.add_artist(plt.Circle((0, 0), track.radius, alpha=1/3, color='k', ec='w'))\n",
" ax.plot(*XY(track), 'k,' ) # grid points\n",
" ax.plot(*XY(track), 'k,' ) # grid points\n",
" ax.plot(*XY([track.start]), 'ks', ms=10) # start point\n",
" ax.plot(*XY(track.finish), 'k:') # finish line\n",
" for path in paths: # paths\n",
" ax.plot(*XY(track.finish), 'k-') # finish line\n",
" for path in paths: # paths\n",
" ax.plot(*XY(path), 'o-') \n",
" plt.title(f'{len(paths)} paths of {set(len(path) - 1 for path in paths)} moves')\n",
" \n",
"def XY(points) -> Tuple[List[float], List[float]]: \n",
" \"\"\"A tuple of: (the x-coordinates of points, the y-coordinates of points).\"\"\"\n",
" # This converts points into the format that plt.plot expects \n",
" return [X(p) for p in points], [Y(p) for p in points]"
]
},
@@ -126,21 +156,22 @@
"metadata": {},
"source": [
"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",
"- `p` is a point indicating a move.\n",
"- `v` is the velocity of the move.\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.\n",
"\n",
"In this example, `p` is up and right from the start to `Point(1, -4)`, so the velocity is `Vector(1, 1)`."
"In this example, `p` is up and right from the start, and from there there are 9 possible values for `p2`."
]
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": 6,
"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>"
]
@@ -150,8 +181,9 @@
}
],
"source": [
"p = Point(1, -4)\n",
"p1 = p + Vector(1, 1)\n",
"v = up + right\n",
"p = track.start + v\n",
"p1 = p + v\n",
"p2s = [p1 + a for a in accelerations]\n",
"\n",
"plot([[track.start, p, p2] for p2 in p2s])"
@@ -163,17 +195,14 @@
"source": [
"# Circumnavigating the Track\n",
"\n",
"The goal of the race is to circumnavigate the center circle. I can test if a 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_solution(path)` does that.\n",
"What exactly does it mean to mean to \"circumnavigate the track in a counterclockwise loop\"? I'll define a circumnavigation (and thus, a *solution*) as a path goes from the plane's fourth [**quadrant**](https://mathworld.wolfram.com/Quadrant.html) to the first, second, third, and back to the fourth. (Points with an x-coordinate of exactly 0 are considered to be in the first or fourth quadrant.) \n",
"\n",
"<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_solution`."
"<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"
]
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
@@ -189,26 +218,31 @@
"\n",
"def quadrant(p: Point) -> int: \n",
" \"\"\"What quadrant of the 2-D plane is this point in?\"\"\"\n",
" return (1 if Y(p) >= 0 else 4) if X(p) >= 0 else (2 if Y(p) >= 0 else 3)"
" if X(p) >= 0:\n",
" return 1 if Y(p) > 0 else 4\n",
" else: \n",
" return 2 if Y(p) > 0 else 3"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"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_solution`.\n",
"\n",
"# Legal Moves\n",
"\n",
"As stated earlier, I want to solve the specific circular 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 returns the points on the track that can be reached by applying the 9 accelerations.\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",
"As stated earlier, I want to solve the specific Riddler 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, track)` is general; it returns track points that can be reached with any acceleration.\n",
"- `riddler_track_moves(path, track)` 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 on this track).\n",
" - 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's line segment intersect the central circle (even if the start and end points of the move are on valid grid points outside of the circle).\n"
" - It won't let a move's line segment intersect the central circle (even if the start and end points of the move are on valid track points outside of the circle).\n"
]
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
@@ -217,29 +251,25 @@
" p1 = path[-1] + velocity(path)\n",
" return {(p1 + a) for a in accelerations} & track\n",
" \n",
"def circular_track_moves(path, track=track) -> Set[Point]:\n",
" \"\"\"Reasonable moves on the circular track.\"\"\"\n",
"def riddler_track_moves(path, track=track) -> Set[Point]:\n",
" \"\"\"Reasonable moves on The Riddler's track.\"\"\"\n",
" p = path[-1]\n",
" return {p2 for p2 in all_moves(path, track)\n",
" if p2 != p\n",
" and not (quadrant(p) == 4 and quadrant(p2) == 3) # Don't go backwards\n",
" and not intersects_circle(p, p2, track)}\n",
"\n",
"def velocity(path) -> Vector:\n",
" \"\"\"Velocity of the car when it is at the end of the path.\"\"\"\n",
" return zero if len(path) == 1 else path[-1] - path[-2] "
" and not intersects_circle(p, p2, track)}"
]
},
{
"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."
"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. I chose N to be big enough that I believe this approach won't miss any intersection points on our small track."
]
},
{
"cell_type": "code",
"execution_count": 7,
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
@@ -259,51 +289,62 @@
"source": [
"# A Frontier of Possible Paths\n",
"\n",
"Now I want to expand paths by adding legal moves to the end until I find solution(s)–paths that circumnavigate the circle. 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",
"Now I want to expand paths by adding legal moves to the end until I find solution(s). I could keep *all* my paths in a `list`, but there will be an exponential number of them: O(9<sup><i>n<i/></sup>) paths of length *n*. \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. I only need to keep one of them, because they can all be continued in exactly the same ways.\n",
"I am not looking for all solutions, just one fastest solution (or possibly a small sampling of them). So I am willing to discard some partial paths if I can prove that they can never lead to a faster solution than another partial path.\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. That meant I was discarding some valid paths."
"The key idea is that there may be many partial 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",
"I will define a data structure that I call a `Frontier`, which is a dict of `{(endpoint, velocity): path}`. By the nature of dicts, this keeps only one path for each `(endpoint, velocity)` pair. \n",
" \n",
"Here's how I expand a frontier, adding one more move in all possible ways, and discarding duplicates:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"Frontier = Dict[Tuple[Point, Vector], Path]\n",
"\n",
"def expand(frontier, legal_moves=circular_track_moves, track=track) -> Frontier:\n",
"def expand(frontier, legal_moves=riddler_track_moves, track=track) -> 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",
" for p in legal_moves(path, track)}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Note:* Before I added the limitation that moves can't pass backwards from the fourth quadrant to the third, it was possible that two different paths would arrive at the same point in the third quadrant with the same velocity. If the path that was discarded had circumnavigated and the path that was kept had not, that was **a bug** that discarded some valid solutions."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Searching for the Fastest Solutions\n",
"\n",
"Now all I have to do to solve the problem is repeatedly expand the frontier until one or more solutions are found. The first solutions found are guaranteed to be the fastest (i.e., they are the paths with the fewest possible moves), because we are expanding paths one move at a time, and the previous time did not find any solutions. In the end, I return a list of all the solutions 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. "
"Now all I have to do to solve the problem is repeatedly expand the frontier until one or more solutions are found. The first solutions found are guaranteed to be the fastest (i.e., they are the paths with the fewest possible moves), because we are expanding paths one move at a time. In the end, `search` returns a list of all the solutions 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": 9,
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"def search(track=track, path=None, legal_moves=circular_track_moves) -> List[Path]:\n",
"def search(track=track, path=None, legal_moves=riddler_track_moves) -> List[Path]:\n",
" \"\"\"Find the shortest possible solution paths.\"\"\"\n",
" if path is None: path = [track.start]\n",
" frontier = {(path[-1], velocity(path)): path}\n",
" solutions = []\n",
" while not solutions:\n",
" frontier = expand(frontier, legal_moves, track)\n",
" solutions = list(filter(is_solution, frontier.values()))\n",
" solutions = [path for path in frontier.values() if is_solution(path)]\n",
" return solutions"
]
},
@@ -318,12 +359,12 @@
},
{
"cell_type": "code",
"execution_count": 10,
"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>"
]
@@ -342,7 +383,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"We see that the fastest solution is 12 moves, and there are at least 7 ways to get there (with perhaps other ways discarded).\n",
"We see that the fastest solution is 12 moves, and there are at least 7 ways to get there (with perhaps others discarded).\n",
"\n",
"# Submitting your Answer\n",
"\n",
@@ -354,12 +395,12 @@
"> 4 5 6\n",
"> 7 8 9\n",
"\n",
"I will define two functions to translate back and forth between my `Path` and The Riddler's list of `Digits`: "
"I already started the tricky work by defining the nine `accelerations` to be in this order. I finish the tricky work by defining two functions to translate back and forth between my `Path` and The Riddler's `Digits`: "
]
},
{
"cell_type": "code",
"execution_count": 11,
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
@@ -367,7 +408,7 @@
"\n",
"def digits_from_path(path) -> Digits:\n",
" \"\"\"The digits that the path represents.\"\"\"\n",
" return [accelerations[velocity(path[:i + 1]) - velocity(path[:i])]\n",
" return [1 + accelerations.index(velocity(path[:i + 1]) - velocity(path[:i])) \n",
" for i in range(1, len(path))]\n",
"\n",
"def path_from_digits(digits, start=track.start) -> Path:\n",
@@ -375,14 +416,14 @@
" v = zero # Starting velocity\n",
" path = [start]\n",
" for d in digits:\n",
" v += next(a for a in accelerations if accelerations[a] == d)\n",
" v += accelerations[d - 1]\n",
" path.append(v + path[-1])\n",
" return path"
]
},
{
"cell_type": "code",
"execution_count": 12,
"execution_count": 14,
"metadata": {},
"outputs": [
{
@@ -397,7 +438,7 @@
" [3, 3, 1, 7, 7, 5, 7, 8, 9, 9, 3, 3]]"
]
},
"execution_count": 12,
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
@@ -412,17 +453,17 @@
"source": [
"# Alternative Solutions\n",
"\n",
"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."
"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 exactly why in each case there exactly 7 solution paths are reported; 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": 13,
"execution_count": 15,
"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>"
]
@@ -432,7 +473,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -442,7 +483,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAOsAAAD7CAYAAACL3GNOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO2deXxU5b3/388syWTfIYAkgbCJICBBBbRQRVFwq1301hbprVt7r3ht9Vrb+1Ns7W292taiVuy9VsVea+21Wq1UQRCUqkAillV2wmYgMNlnksxyfn/Mwkwyk0wmM5k5k+/79crrlTnnfM/znOVzvt/zPM/3PErTNARBSH4Mia6AIAiRIWIVBJ0gYhUEnSBiFQSdIGIVBJ0gYhUEnSBijRFKqaVKqd8PQDkPK6VOKaXqetnuTqXUcaXUP2JY9j+UUp8rpe6O1T6FyEkpsSqlWrv8uZRST8ShnLlKqaOx3m8E5Y4Evg9M1DSttJfNlwLf1TRtSoD9JKXUO16xB3WwK6XSlVLPKqVqlVItSqktSqkrA7fx7utW4MGYHJDQJ1JKrJqmZfv+gKGAHfhTgqsVS8qB05qmnYxg20Jge5dlDuAV4NshtjcBR4A5QB7w/4BXlFIVXbbbDuQppYyRV1uICZqmpeQfcDNwAFBh1i8G/g48ATQBnwGXBqz/FrALaPHu53bv8iw8DwE30Or9G47Hk70CrPDa7ACqAvZ3H3DMu253YFld6pXn3Uc9UAv8B56H6rwu5T7fw7EbAQ0YHWb9GM+l7/UcbgW+3GVZmXff6b3YPg/8Bvibt75/B0qBx4EG7/meFrD92cA6oNF77q7xLr8QqAOMAdt+Cdjq/d8A/ADYD5z2XoNC7zoL8Hvv8kZgMzA00fdm1Pd0oisQtwODtcDSHtYvBpzA3YAZuMErWt+FXghUAgqPt7EB53nXzQWOdtnfUqAdWOAVy8+Aj73rxuPxWsO9vyuAyjD1WgH8BcjxbrcH+Ha4csPs4wpvXbLCrO9VrHgik3ZgQpflGd7lV/Vi/zxwCpjuFc1a4CCwyHt+Hgbe825rBvYBPwTSgEvwPNTGe9fvBy4L2PefgB94//834GPgLCAdeAb4g3fd7cCbQKa3zOlAbqLvzajv6URXIC4H5Xn6u4BRPWyzGDhOgOcFNgHfDLP968Bd3v/DifXdgN8TAbv3/zHASTze0dxDnYxAB553Ut+y24F14coNsY9qPJ5vSQ/b9ChWr3jeBZ4Js/5OPB7+0x728Tzw311sdgX8ngw0ev+/GI/3NASs/wPeh61X2L/z/p8DtAHl3t+7CI6IhuEJ903APwMfAucm+p6MxV9KvbMGsAjYoGnawV62O6Z5r7CXWjwhLUqpK5VSHyulrEqpRjwes7iX/QW20NoAi1LKpGnaPjweYClwUin1slJqeAj7YjyepbZLnUb0Um4gM4AbgaVKKXMf7ABQShmAF4FO4F9DrDcBDwHfBKb1srsTAf/bQ/zO9v4/HDiiaZo7YH3gcb8EXK+USgeuBz7RNM13jsqB15RSjd7rtAvPg3qo9zjeAV72toz/VzTnJFlIZbG+EMF2I5RSKuB3GXDce1O8CjyG5x0nH1iJJyQGj+fqE5qmvaRp2kV4bi4NeCTEZqfweIXyLnU61odyNDxRQAEeLxMx3nPxLJ4b/cuapjlCbDbUu+/Xuzzo+sNxYKT3QeHDf9yapu3EI94rga/jEa+PI8CVmqblB/xZNE07pmmaQ9O0hzRNmwjMAq7Cc2/okpQTq1JqFp4nciStwEOAJUops1Lqq3gaOVbi8W7peBp5nN4ujMsD7E4ARUqpvAjrNF4pdYn3IdCOx6u4um6naZoLTwPJT5VSOUqpcuB7eBpJIkbTtA7vv2ld6qGUUhbfcqWUxVsnH0/jOQdXa5pmD7N7n2fqCLM+GjbiCW3/3Xst5gJXAy8HbPMSsAT4AsHXdjme81UOoJQqUUpd6/3/i0qpyd6W62Y8D8Ju510vpJxY8bQC/1nTtJYItt0IjMXj0X4KfEXTtNNe2yV4hNOA52n+hs9I07TP8LxTHfCGX6FC2kDSgZ97y6nD85D4YZht78Rz4x4ANuC5SX8XwbF0RaP79S3H86DY4f1tx9Myjfdmvx2YCtQF9FXf1GUfvi4bNzFC07RO4Bo8nvMUnlbkRd7z7OMPeN7Z12qadipg+a/xXJtVSqkWPI1NF3jXlQL/h0eou4D19PHBl0yo2EUy+kIptRi4xRuaphxKqePAv2uaFtObUyn1NeBJTdOGxHK/Qu+komcVPPwAeFApVROrHXr39Z94+oyFAcaU6AoI8UHTtBV4+mxjuc/psdyf0DcGbRgsCHpDwmBB0AkiVkHQCX16Zy0uLtYqKiriVBVBEGpqak5pmlYSal2fxFpRUUF1dXVsaiUIQjeUUrXh1kkYLAg6QcQqCDpBxCoIOkHEKgg6QcQqCDpBxCoIOkHEKgg6IS5iDf74gtjpzS4RZYpd78RFrNEmB4hdctglokyx6x0JgwVBJ4hYBUEniFgFQSeIWAVBJ4hYBUEniFgFQSeIWAVBJ4hYBUEniFgFQSeIWAVBJ4hYBUEniFgFQSdI1o3YJUWZYtc7knUjdklRptj1joTBgqATRKyCoBNErIKgE0SsgqATRKyCoBNErIKgE0SsgqATRKyCoBNErIKgE0SsgqAT+jTzuaAPVj64jMq2SjKNOdhcLezP2s+Ch5akXJmDDfGsKcbKB5cx0T6JLFMuSimyTLlMtE9i5YPLUqrMwUhcPKtSKqqBy2LXf7vKtkpMJnPQMpPBzDn2yWy5+08Rl6kBkeaJnGOejNEQfCuZDGYq2yojLi+Zz2ki7QKJi1j1ktGQanat1tNkGnNCrjMoIy5cUZXfGwZlDLk8XF1CkaznNNF2gcg7awrQaj3N+794icqO0WSZckNuY3O1UPWrG+NS/u573gpZrs3VEpfyBivyzqpjWq2nWfmjJzj2nx9zrmsqdrednR07cLodQds53Q72Z+2PWz32Z+3vVqamadS6D8etzMGIiFWHhBRp8XYmPXItl//qDnZmbKfN2YymabQ5m9mZsT2uLbMLHlrSpcwW2lwtjDONZ/Uvlset3MGG6kssXVVVpVVXV8exOkJPdA13T3We4OTwei656xZMZnPvOxhADn5aQ+uKw+SY8tg7dA+Xff+ORFdJFyilajRNqwq1Tt5ZdUCgSM81TeWU+wS1xYeTUqQ+Rk2dzkGgZcVhxp4Yx+pfLBfB9hMRaxKjR5EGIoKNLSLWJCSkSEsOc8kSfYg0EBFs7BCxJhGpJNJARLCxQcSaBKSqSAMRwfYfEWsCGQwiDUQE2z9ErANA14yUfRn7UG5D3ES65okVpD2/nMK2BqxZBXQuvoNL71wUgyPpf5ldBbvqe09TbiiTbJ0IkH7WOOPLSDEZzohQ0zSUUp5+0hH1MfWka55YQeHyx7C4zowoajeasd5xT9wEG02ZBz+toeP3dWQZc4KmlnC6HXEfxJHMDHg/q14yGhKVBaOUot1pY9Ij10Yk0r6Ul/b88iDRAFhcDgqXP8Yb69dHtA+AQ7WHqCiviGjbkbs2hywz7fnlEEaso6ZOZ/fvV3abA0aydcIjWTdxtguXeZJuzIjYm0ZantvtpqitIXR5Lge5h/dFtB+AcxUQ4fbpXYTqozBMXXxkGrPDLJdsnVDIO2ucsbla4p6R4na72fjK32he/hvKwmxzOquAuZsi96x94YPpsygOIUxrVkGPdgNxblIJGcgfZ/Zl7O/2VI1VFozb7eajl99i9SVXk7/0HrJaGth93lzajcEeu91opnNx/FpdOxff0a1MDWi8dEGPdqGydeKdIaRnRKxxxmBUnndUly1mWTChRHp48V3M2LCW6156Gusd93AqqwA3cCqrIK6NSwCX3rkoqExrRh4t5kxK336N7es2hbXrmq0DsK9z76BtXOoNaQ2OI/aWFg4ufQ+X5mLCT6/EnGHp1/6Cwt26A5zOKqDtq4uYe9di0vu571hTu30vR26+mXRHBxnLnmbS3PN73N5zrtbh0pwxOVd6pafWYPGscWTdL54n11zAseLj/br5evKk839wR9IJFaB80lhGvvACHeZ07Eu+06OHBcjIyaE2+xAFacWs+dWzA1RLfSFijRP2lhbKW8pp6DzFpXd/O6p96FGkgfRVsHPvWUyzo5ERp4bjsLcPUC31g4g1TvTHq+pdpIH0RbDiXXtGxBoHovWqqSTSQPoiWPGu4RGxxoG+etVUFWkgkQpWvGt4RKwxpi9edTCINJBIBSveNTQyginGrPvF80w2T2V77lYme8XWNSOl4+bbyBpS4u+CcWUVcHjxXUnZBRNryieNhRde4MjNN8OS7/DmFV8if83Kbtk6tdmHmNwxlTW/epYrfvgvia52UiD9rDEkVL9qqIwUNwoDWlL3k8ab2u17qfunG8lx2IKm6fBl68xa/KVB2e864P2sXTMpBotdqHfVUFkwBjRa0jIjDncH+vgGoszySWNxmszd5tPxZetE+u6aLNc+XnaBSNZNjOz876pa8LtquMyTrE5bxN40XD3dbjdtbW3YbDacTiednZ20t7fT2dmJ2+2mpqaGLVu2YDQaSUtLw2KxkJaWhtlsJjMzk8zMzLA30UCc03x7U8jlvnM2957FHFy6zv/uGsq7JsO1j6ddIPLOGiP876o5//C/q4In8ySajJRQOBwOGhsbaWpqorGxkYaGBtrb23E4HLhckU06pZTCaDRiNpvJyMigsLCQ/Px8cnNzKSgowGAYuDbH3s6Nz7vKu6sHEWsMCPKq37slaF3Hzbfh/s1/YeDMk7UvWTCdnZ2cPn2a+vp66urqsNlsOByh80cjQdM0nE4nTqcTu92O1WoFIC0tjezsbIYNG0ZRURFFRUWYTPG9PToX30F7iC9MBJ6bSLzrYEHEGgPCeVUAS36e/x01q9MW8TeRmpqaqKuro7a2lpaLine truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -452,7 +493,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -462,7 +503,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -472,7 +513,7 @@
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAOsAAAD7CAYAAACL3GNOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3de3xU5b3v8c8zk0kmF5KQCwSQJBDuGhEIIKAbLygKXrrtBU+1lJ5NZbtflZ52S0Xbqm3tqR7dPdbaVrtrq7iPWrvbWq14wSpaSrkkxhIuBggQkBgICbmQSTK35/wxF2aSmWQymWFmhd/79crrlay1njXPTOY7v2fWrGeW0lojhEh+pkR3QAgRGQmrEAYhYRXCICSsQhiEhFUIg5CwCmEQEtYYUUo9qJT6r3NwOw8ppU4ppRoH2O4upVSDUuofMbztfyilPlVKfSNW+xSRG1ZhVUqd6fXjUkr9NA63c4VS6pNY7zeC2x0P/DswQ2tdNMDmDwL/prWeGdD+IqXUW96wB33ArpRKU0o9o5SqV0p1KKWqlVLXB27j3ddXgQdicofEoAyrsGqts3w/wGigC/hdgrsVSyVAs9b6ZATb5gG7ey1zAC8D/xJi+xTgGLAYyAG+C7yslCrttd1uIEcpZY682yImtNbD8gf4MnAIUGHWrwL+BvwUaAM+Bq4OWP8VYB/Q4d3PGu/yTDwvAm7gjPdnLJ5K9jKwwdtmD1ARsL97gOPedbWBt9WrXznefTQB9cB38LyoLul1u8/2c9/NgAYmhlk/yfOvH/Ax3AV8tteyYu++0wZo+yzwc+ANb3//BhQBjwOnvY/3rIDtpwObgVbvY3eTd/mlQCNgDtj2n4Fd3t9NwHqgDmj2/g/yvOuswH95l7cCO4HRiX5uRv2cTnQH4nbH4F3gwX7WrwKcwDcAC7DCG1rfP3o5UAYoPNXGBsz2rrsC+KTX/h4EuoFl3rD8CNjmXTcVT9Ua6/27FCgL068NwJ+AEd7t9gP/Eu52w+zjOm9fMsOsHzCseEYm3cC0XsvTvctvGKD9s8ApYI43NO8Ch4GV3sfnIeA977YW4CBwH5AKXIXnRW2qd30dcE3Avn8HrPf+/r+AbcAFQBrwNPCid90a4DUgw3ubc4DsRD83o35OJ7oDcblTnld/FzChn21WAQ0EVF5gB/ClMNu/Anzd+3u4sL4T8PcMoMv7+yTgJJ7qaOmnT2agB897Ut+yNcDmcLcbYh+VeCrf2n626Tes3vC8AzwdZv1deCr8R/3s41ngP3u12RfwdznQ6v39cjzV0xSw/kW8L7beYP/a+/sIoBMo8f69j+AR0Rg8w/0U4H8CW4GLE/2cjMXPsHrPGmAlsEVrfXiA7Y5r73/Yqx7PkBal1PVKqW1KqRalVCueilkwwP4Cj9DaAKtSKkVrfRBPBXgQOKmUekkpNTZE+wI8laW+V5/GDXC7geYCtwIPKqUsg2gHgFLKBDwP2IGvhVifAnwP+BIwa4DdnQj4vSvE31ne38cCx7TW7oD1gff7BeAWpVQacAvwodba9xiVAH9USrV6/0/78LxQj/bej7eAl7xHxv9PNI9JshjOYX0ugu3GKaVUwN/FQIP3SfF74DE873FygY14hsTgqVyDorV+QWt9GZ4nlwYeCbHZKTxVoaRXn44P4nY0nlHASDxVJmLex+IZPE/0z2qtHSE2G+3d9yu9XuiGogEY732h8PHfb631XjzhvR74Ip7w+hwDrtda5wb8WLXWx7XWDq3197TWM4CFwA14nhuGNOzCqpRaiOcVOZKjwKOAtUopi1Lq83gOcmzEU93S8BzkcXo/wrg2oN0JIF8plRNhn6Yqpa7yvgh046kqrt7baa1deA6Q/FApNUIpVQJ8E89BkohprXu8v6b26odSSll9y5VSVm+ffH6B5zG4UWvdFWb3vsrUE2Z9NLbjGdp+y/u/uAK4EXgpYJsXgLXAPxH8v30Kz+NVAqCUKlRK3ez9/UqlVLn3yHU7nhfCPo+7UQy7sOI5CvwHrXVHBNtuBybjqWg/BD6ntW72tl2LJzin8byav+prpLX+GM97qkPe4VeoIW2gNOBh7+004nmRuC/MtnfheeIeArbgeZL+OoL70pum7/+3BM8LxR7v3114jkzjfbKvAS4BGgM+q76t1z58H9m4iRGttR24CU/lPIXnKPJK7+Ps8yKe9+zvaq1PBSz/CZ7/zdtKqQ48B5vme9cVAf+NJ6j7gPcZ5AtfMlGxG8kYi1JqFbDaOzQddpRSDcC3tNYxfXIqpb4APKm1HhXL/YqBDcfKKjzWAw8opapitUPvvv43ns+MxTmWkugOiPjQWm/A85ltLPc5J5b7E4Nz3g6DhTAaGQYLYRASViEMYlDvWQsKCnRpaWmcuiKEqKqqOqW1Lgy1blBhLS0tpbKyMja9EkL0oZSqD7dOhsFCGISEVQiDkLAKYRASViEMQsIqhEFIWIUwCAmrEAYRl7AGf/mCtDNau0TcprQbWFzCGu3kAGmXHO0ScZvSbmAyDBbCICSsQhiEhFUIg5CwCmEQElYhDELCKoRBSFiFMAgJqxAGIWEVwiAkrEIYhIRVCIOQsAphEDLrRtolxW1Ku4HJrBtplxS3Ke0GJsNgIQxCwiqEQUhYhTAICasQBiFhFcIgJKxCGISEVQiDkLAKYRASViEMQsIqhEFIWIUwCAmrEAYhs26kXVLcprQbmMy6kXZJcZvSbmAyDBbCICSsQhiEhFUIg5CwCmEQElYhDELCKoRBSFiFMAgJqxAGIWEVwiAkrEIYREqiOyBi77W1DzMltZwM8whsrg7222u48Yn1cW8r4ksq6zDz2tqHKbfOIzMlG6UUmSnZlFvn8drah+PaVsRfXCqrUiqqE5el3dDbTUktJ8VkCVqWYrJQbp3L3+96tt+25elzQ7adkloel75Ku8GJS1iNMqNhuLWz9/SQYR4Rcp1ZWchNze+3vVlZQi4Pt89QkvWxMWq7QPKedRiw9/Tw1v2PU9xTRr51dMhtbK4Opv/Hjf3up/bu18lMyQ7ZViSevGc1MHtPD6/d8wj77nmNWWoh1pR0DrfX4nQ7grZzuh3st9cMuL/99po+bbXW1Nn2xbTfIjoSVgMKFdJdZ7ZR8M3ZXP7z1dR076DT2Y7Wmk5nOzXdOyI6onvjE+uD2nY5O3FqB2UZ0/nrhhfPwT0T/VGDGUtXVFToysrKOHZH9Kf3cLfT2U5d917m33c7+WPHxOU233j4CaY0T8ep7Zy8uJ3LV/6PuNyO8FBKVWmtK0Kuk7Amv0SENJAE9tyRsBpUokMaSAJ7bkhYDSaZQhpIAht/ElaDSNaQBpLAxpeENckZIaSBJLDxI2FNUkYLaSAJbHxIWBOs90yW2u5dqEyTIUMaKDCwdbZ9lGVMl9k6QyRhTSDfTJbAE+S1dqOUybAhDfTGw08wreVCUpQl6BIRTrcj4pMxxFn9hVWudRPndqFmwShlosfVRcE3Z7PsyXUDBjWZr3Vz/fq1ON2OPttHM1snGsO9XSCZdRPnduFmrKSarBFX03C353a76ezsxGaz4XQ6sdvtdHd3Y7fbcbvdVFVVUV1djdlsJjU1FavVSmpqKhaLhYyMDDIyMsI+iQZzH63mjJDLZbbO0NsFklk3cWZzdcRsJovD4aC1tZW2tjZaW1s5ffo03d3dOBwOXC5XRPtQSmE2m7FYLKSnp5OXl0dubi7Z2dmMHDkSk2nwg61Y3kcRnoQ1zmq7dzErcyFKnQ2BbxbMVJYP2N5ut9Pc3ExTUxONjY3YbDYcDseA7cLRWuN0OnE6nXR1ddHS0gJAamoqWVlZjBkzhvz8fPLz80lJiezpsd9eQ7kp+H35YO6jiIyENc6U1eR/j5pqskZ8pLStrY3Gxkbq6+vp6OjA7XbHtZ92u52WlhZaWlpISUkhJyeH0tJSioqKyMgIPcz1ufGJ9UFHvAH2dVRz4y/k4FIsSVjjyN7TQ4lrMmd0G0X3zCd3VCFAv9WmpaWFw4cP09DQQHd397nqahCn00lzczPNzc1kZGRQXFxMSUkJ2dl9h7o+vhefD994i7z3LGSb885Vd88bMp81jt769uPkpRVSZ9/rD2o4bW1tfPTRR2zZsoVDhw4lLKi92Ww2Pv74Yz744AP27t2LzWbrd/vZ1y/lcGct4zMn8t7Tvz5HvTw/SGWNk8Cquui7Xwm/nd1OXV0ddXV1dHV1ncMeDk5XVxd79uyhvr6eqVOnUlJSgtlsDrltzg0Tcb/nIrVm6B9XiLOkssZJJFW1qamJrVu3smfPnqQOaqAzZ85QXV3Nzp07aWtrC7mNVNf4kMoaBwNVVYfDwcGDBzlw4AA9PT0J6OHQuN1ujh07RnNzMzNmzKC0tLTP57VSXWNPKmsc9FdVbTYbH374IXv27DFkUAPZbDaqq6vZtWtXn4+TpLrGnoQ1xvxV1dG3qp4+fZrt27dz9OjRmJzRkgxcLhcHDhygsrKSM2fOBK3LuWEibi3VNVYkrDEWrqqeOHGCbdu2cerUqQT2Lj601nzyySds376d1tZW/3KprrElYY2hcFW1sbGRnTt39qk8w01LSws7d+7k9OnT/mVSXWNHZt3EsF2oqnrixAkqKysNc7R3qFpbW6msrPRX2Eira7L8D5OtXaC4hNUoMxpi2S5UVW1paaGqquq8CapPa2srVVVV/pFEJNU1Gf6HydgukAyDY6R3Ve3s7KS6uprOzs5Edy0hWlpaqKmpweFwyHvXGJGwxkDvqupwOKipqfHPaDlfHT9+nL1796K1lveuMSBhjYHeVbW2tpZPPvkk0d1KOK01dXV1HDlyRKprDEhYh6h3VW1sbKSurm7YfI46VC6Xi71799LW1ibVdYgkrEMUWFWt2SPYs2cPdrs90d1KKjabjX379jHz2iVSXYdAwjoEvavqgQMHzvv3qeEcP36c+vp6qa5DIGEdgsCq6jKbOHz4cKK7lLTcbjeLine truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -494,12 +535,12 @@
"source": [
"# Visualizations and Tests\n",
"\n",
"To gain more confidence in the code, here are some visualizations and unit tests:"
"To gain more confidence in the code, here are some additional visualizations and unit tests:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
@@ -512,12 +553,12 @@
},
{
"cell_type": "code",
"execution_count": 15,
"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>"
]
@@ -537,12 +578,12 @@
},
{
"cell_type": "code",
"execution_count": 16,
"execution_count": 18,
"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,12 +603,12 @@
},
{
"cell_type": "code",
"execution_count": 17,
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAOsAAAD7CAYAAACL3GNOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAYE0lEQVR4nO3dfXRbZ30H8O/Pivwev0RWrNhu6tfFSWjiNt7KWiBdKQuUMuCwHboCh3IYY+MA463QdrB1nHHarYz1sLPBac86TnhdR9u0vLRlQNNQCKN2nTRJk5DYwantyLFly44t2ZbtZ3/ca1exJUu6vtLVI30/5+RElu5z9ejlq/vcn557JUopEFH2K3C6A0SUHIaVSBMMK5EmGFYiTTCsRJpgWIk0wbDaRETuEZFvZeB+/lFERkXEn2C5j4nIkIgctfG+x0WkX0RutWudlLycCquIfFREukRkVkS+kcb7uUFEBtK1/jXu9woAnwawQynlS7D4PQA+opTaHdX+/SLSLSKTIjIgIv8sIhuibt8kIo+LyLQZytuiV6iUqgZwP4A7bXtQlLScCiuAIQD/COBhpzuSJlcCCCilLiax7CYAx1dcVwrgEwBqAFwL4I0APhN1+78DmANQC+A9AL4mIjtXrOM4AE/qXaf1yqmwKqUeU0odABBItKyI3C4ivxSRfxORCRE5JSJvjLr9AyJyUkQuiUifiHzYvL4MwFMA6kRkyvxXZzYrFJH9ZpsTItIZtb7Picigedvp6Pta0a9Kcx0j5tbt8yJSICI3AfjfqPv9xhqPzWVeXFzx/HxNKfULpdScUmoQwLcBXB/1uN4F4AtKqSml1PMAngTwvhWrXwSwAQmIyEFzyP4rs78/EBGPiHzb3LK/ICKNUctfZ143Yf5/nXn9rSLStWLdnxSRJ83LRSLyZRE5LyLDIvJ1ESkxb6sRkR+KSFBExkTkFyKi73teKZVz/2BsXb+RYJnbAcwD+CQAN4B3A5gAsMm8/a0AWgAIgL0AQgCuMW+7AcDAivXdA2AGwM0AXADuBfBr87ZtAF4BUGf+3QigJU6/9gN4AsBGc7nfAvhgvPuNs443m30pS7DcAQD3mZevBhBecftnAPxgxXXN5vPWkWDdBwGcNZ/DSgAvm4/lJhhh3w/gv8xlNwEYh/HBsAHAn5t/e2CMBi4BaIta9wsAbjUvPwDjQ2WT+Zz9AMC95m33Avi6+fq6AbwegDj9/rT8vna6A2l5UMmHdSj6xQPwGwDvi7P8AQB/Y16OF9afRv29Y+nND6AVwEXzjepeo08uALMw9kmXrvswgIPx7jfGOroAKAAfT7DcBwAMAKgx/349AP+KZT60dN8rrv+yeR8H1lj/QQB/G/X3vwB4KurvtwE4Yl5+H4DfrGh/GMDt5uVvAfg783KbGd5SGB+k04j64APwhwDOmZe/COODr9Xp96Qd//QdEthjUJmvqqkfQB0AiMhbROTX5vApCGOLWZNgfdEV2hCAYhHZoJQ6C2Nf8R4AF0Xke1FD52g1AArNfkT3qT6Fx/T7AG4FcI+IuGMtICLvAHAfgLcopUbNq6cAVKxYtAJGMKLbbgbwcQBvUEq9I0FfhqMuh2P8XW5ersPljxm4/HF/B8bWFgBug/EhEQLghRHabnOoGwTwtHk9YBTDzgL4ibkro3VhLN/DWi8iEvX3VgBDIlIE4FEYW5BapVQVgB/D+CQHjK1KSpRS31FKvQ5GkUgB+KcYi40CiJjLRPdpMIX7UTBGAdUAtqy8XUTeDOAhAG9TSh2Luum3ADaISFvUdbsBnFixijYAE0qpXyTbpyQM4fLHDFz+uH8CoEZEOmCE9jvm9aMwQr9TKVVl/qtUSpUDgFLqklLq00qpZhhb8k/FqxXoIKfCKiIbRKQYxnDSJSLF0V9NxLAZwMdFxC0ifwZgO4xQFgIoAjACYF5E3gLgj6PaDQPwiEhlkv3aJiI3mh8CMzDeYAsrl1NKLQB4BMCXRGSjiFwJ4FMwhoFJU0rNmhcLV/TjRhhFpXcppX6zos00gMcAfFFEykTkegBvB/DNFat3wxiq2+nHAH5PRG4zX8N3w9iN+KHZt3kA34expdwEo9AGpdQijA+efzW3+BCRehHZZ16+RURazQ/kSRjP+arnXRc5FVYAn4cRhDsBvNe8/Pk1lv8/GFuKUQBfAvCnSqmAUuoSjKHeIzAKHbfBKGIAAJRSpwB8F0CfOfyKNaSNVgRj2DkKY6i8GcDdcZb9GIz9sD4Az8PYilj5Kkph9ev7BRjFnh9HVbKfirr9IwBKYOxffxfAXyulVm5ZXVhRZV4vpVQAwC0wvkMOAPgsgFuihuiA8TzcBOB/zPAu+RyMoe6vRWQSwE9hFPQA47X9KYwh/mEA/6GUOmhn3zNJLt9lyx8icjuAvzCHpjlHRIYAfFYpZeusKhH5LIwPtT+wc72UWK5tWelVdwL4exHptmuFIjIC4P0A/sGudVLyEn65TXpSSu2H8V2mnev0Jl6K0iVvh8FEuuEwmEgTDCuRJlLaZ62pqVGNjY1p6goRdXd3j8arDaQU1sbGRnR1dSVekIgsEZGV0y6XcRhMpAmGlUgTDCuRJhhWIk0wrESasHW64YGeQdz/zGkMBcOoqyrBHfu24R1Xp3LcNBHFY1tYD/QM4q7HjiEcMQ4XHAyGcddjxrHNDCzR+tk2DL7/mdPLQV0Sjizg/mdOJ72Oy0/akDy2s7edE/fJdonZFtahYDil62OxelAB29nbzon7ZLvEbAtrXVVJzOsVgE/+9xH0jkzZdVdEecm2fdY79m27bJ8VAIrdBbiu2YOnj/vxxJFB/MnuOmyvq8D+X/WzCEWUItvCuhS4WNXg0alZPHSoDw8/fw4Hjgwtt2ERiih5KR183tnZqdYzkf+19/4M/omZVdfXV5Xgl3feaHm9RLlCRLqVUp2xbsvopIjhGEEFjC0s92mJ1pbRsMYrQgmAN33lOXziez0MLVEcGT1hWqwiVInbhbvf2o6BsTD2H+7Hk0eH8PaOerRv2chCFFGUjIZ1rSIUAHzoDc3LhajHe17dl2YhiijDBaZksRBF+SprCkzJYiGKaLWsDGuiQhRnRFE+ysoz8q9ViHplLIxvHu7HE0cGWYiivJKWsIqIpYnLS+0SFaL+0qZC1Hr7mavtnLhPtktiHdlYYEoWC1GUa7QrMCWLhSjKJ1qHlYUoyidZWWBKVjIzoliIolyhdViTmRH14KE+PPx8Hx7vebUdZ0SRjrQuMCWLhSjSRc4WmJLFQhTlgrwIa7xCFLC6EHWgZxDX3/dzNN35I1x/389xoGcwU90kWpPW+6zJSjQjav/h3+GJI4O4ZmsVjg1OYnZ+EQD3bSm75EVYk5kR9eChPjx4qG9V26VzHzOs5LS8CCtgBDZe4GrKi3D3zdvx0KE+xCq3pXLuY6J0yYt91mTF27ctdrtYiCLHMaxR7ti3DSVu12XXbSgQzC8sshBFjsvKo26cahdv3/Z1bTV46FDf8oyo0PkTqGy6KuVClNOPL5vvk+2SWEc+TIqwy9LJyh+Ms2/LSRa0Xnk/KcIuNeVFuOvm7XFvZyGK0olhtYCFKHICw2pBokJU9MnKWYgiu+TN96x2SqYQ9eTRIVx9RRWOD3FGFNmDBaY0YCGKrGKBKcNYiKJ0YFjTiIUoshPDmkYsRJGdWGBKIxaiyE4sMDmIhShaiQWmLMVCFKWCYc0CLERRMtISVhFhuxTaJSpE1dzyaUuFKKv9XE9btrO3XbS0FJisHgqUr+0SFqI2uPCmrzyX8jmi1nNIVrY8N/neLhoLTBpgISp/sMCkORaiCGBYtcJCVH5jWDWS7DmiOBsqN3EGk0aSmRH1eM8gXCJYMGsRnA2VO1hgyiGjU7O44f6DmJqdX3Ubi1B6YIEpT9SUF2E6RlABFqFyAcOaY+IVoRTAX4LXHPdZc0ysH+EqdhfgumYPnj7uX/4l+I/e2IpjAxNxf/+Hsg/DmmPW+hGupckVLETpiQWmPMRCVPZigYkuw0KUnnjUTZ62S1SIcnsabL9PtlsfDoM1tri4iOnpaYRCIczPz2Nubg4zMzOYm5vD4uIilFIQEbhcLhQWFqK4uBiFhYVwu934ee8l3POj0whHFpfXt1SIOtw3htn5BRaiHLDWMJgFJo1EIhEEg0FMTEwgGAxifHwcMzMziEQiWFhYSLwCYDm8ZW433rPNjSf6BKOhBdRWFOJz+9rxzj1XsBCVpbhlzXJzc3MIBAIYGRmB3+9HKBRCJBKx/X4KCwtRXl6OLVu2wOPxwOPxIDizwEJUhnHLqqGJiQn4/X709/fj0qVLWFxcTNxoHebm5jA2NoaxsTFs2LABlZWVaGxsZCEqizCsWWZsbAznzp3D0NAQZmZmHOnD/Pw8AoEAAoEAqopKMT67epmlQtRHb2xFi7c8433MRwxrlpiYmMC5c+dw/vx5zM7GSIdD3rxlFt/vL0REvVrN5IwoZzCsDpubm0Nvby96e3sRDmff0PIazwKAOTw15EZwTrCpSPBX1/nwwZt2YTw8z0JUBrHA5KCRkRGcOHECo6OjtpxQK1MKCgpQX1+P7du3o7KykjOibMQCU5aJRCI4e/Yszpw5k1VD3mQtLi7ilVdeQSAQwI4dO1iIyhBON8ywUCiEF198ESdOnNAyqNFCoRB6enrw0ksvYUtlccxleGiefbhlzaDx8XEcOXIEo6OjTnfFNgsLCzhz5gze2VKD/zxWgJkYM6JYiLIHw5ohw8PDePHFFzE1lXtbGKUUGmUE791WgR+dd8M/OctD89KABaYM8Pv96Orqyspqr92qqqrQ2dmJ6urqVbexEJVYxg+R0+WIhky0Gx4ezpugAkAwGERXVxeCweCq29Y6NG9gPGTp/rL5tbejXbS0hFWX3xFJd7uxsTF0d3fnTVCXBINBdHd3xxzyxzs0T0QsFaKy9bW3q100VoPTZHp6Gj09PZienna6K44Line truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -577,7 +618,7 @@
}
],
"source": [
"# Waypoints on a line segment that are checked to see if they are outside the circle\n",
"# Waypoints on a line segment\n",
"p, q = Point(-7, 7), Point(7, 0)\n",
"plot([waypoints(p, q)])\n",
"assert not intersects_circle(p, q)"
@@ -588,17 +629,17 @@
"metadata": {},
"source": [
"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."
"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, which is 500 times fewer than 9<sup>6</sup> = 531,441."
]
},
{
"cell_type": "code",
"execution_count": 18,
"execution_count": 20,
"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>"
]
@@ -608,7 +649,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -618,7 +659,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -628,7 +669,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -671,29 +712,17 @@
"source": [
"# A Different Track\n",
"\n",
"Although the code here is not ready to handle large, arbitrary-shaped tracks, it can handle some small variations as is, and other variations with some tweaking. Here I define `track2` to be a track with a larger central circle, and a circular ring of valid points around the circle rather than a full rectangular grid:"
"Although the code here is not ready to handle large, arbitrary-shaped tracks, it can handle some minor track variations. Here I define `track2` to be a track with a larger central circle, and a circular ring of valid points rather than a full rectangular grid:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[[6, 6, 3, 1, 1, 2, 4, 7, 4, 7, 7, 8, 9, 9, 9, 9, 5, 3, 6, 3, 3],\n",
" [6, 6, 3, 1, 1, 2, 4, 7, 4, 7, 7, 8, 9, 9, 9, 9, 5, 3, 3, 6, 6],\n",
" [6, 6, 3, 1, 1, 2, 4, 7, 4, 7, 7, 8, 9, 9, 9, 9, 5, 3, 3, 6, 3]]"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -704,16 +733,40 @@
],
"source": [
"radius2 = 10\n",
"track2 = Track({Point(x, y) for x in range(-14, 15) for y in range(-14, 15) \n",
" if radius2 <= abs(Point(x, y)) < 13}, \n",
" start=Point(0, -12), \n",
" finish=[Point(0, -radius2), Point(0, -12)], \n",
" radius=radius2)\n",
"side2 = range(-14, 15)\n",
"start2 = Point(0, -radius2 - 2)\n",
"track2 = Track({Point(x, y) for x in side2 for y in side2 \n",
" if radius2 <= abs(Point(x, y)) <= radius2 + 3}, \n",
" radius=radius2, start=start2, \n",
" finish=[Point(0, -radius2), Point(0, -radius2 - 3)])\n",
"\n",
"solutions2 = search(track2)\n",
" \n",
"plot(solutions2, track=track2)\n",
"\n",
"plot(solutions2, track=track2)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[[6, 6, 3, 1, 1, 2, 4, 7, 4, 7, 7, 8, 9, 9, 9, 9, 5, 3, 3, 9, 3],\n",
" [6, 6, 3, 1, 1, 2, 4, 7, 4, 7, 7, 8, 9, 9, 9, 9, 5, 3, 6, 3, 3],\n",
" [6, 6, 3, 1, 1, 2, 4, 7, 4, 7, 7, 8, 9, 9, 9, 9, 5, 3, 3, 6, 9],\n",
" [6, 6, 3, 1, 1, 2, 4, 7, 4, 7, 7, 8, 9, 9, 9, 9, 5, 3, 3, 6, 6],\n",
" [6, 6, 3, 1, 1, 2, 4, 7, 4, 7, 7, 8, 9, 9, 9, 9, 5, 3, 3, 6, 3],\n",
" [6, 3, 3, 2, 1, 7, 4, 7, 1, 7, 8, 8, 7, 9, 9, 9, 9, 3, 3, 3, 3]]"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"[digits_from_path(path) for path in solutions2]"
]
},
@@ -721,12 +774,12 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"# Additional tests:"
"# Additional tests"
]
},
{
"cell_type": "code",
"execution_count": 20,
"execution_count": 23,
"metadata": {},
"outputs": [
{
@@ -735,38 +788,39 @@
"'tests pass'"
]
},
"execution_count": 20,
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"path1 = [track.start, Point(1, -4)] # First move\n",
"start = track.start\n",
"path1 = [start, Point(1, -4)] # First move\n",
"\n",
"assert track.start == Point(0, -5) == 0-5j\n",
"assert X(track.start) == 0 and Y(track.start) == -5 \n",
"assert velocity([track.start]) == 0\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",
"assert XY(path1) == ([0, 1], [-5, -4])\n",
"\n",
"assert quadrant(track.start) == 4\n",
"assert quadrant(Point(1, 2)) == 1\n",
"assert quadrant(Point(1, -4)) == 4 == quadrant(start)\n",
"assert quadrant(Point(1, 2)) == 1\n",
"assert quadrant(Point(-5, 4)) == 2\n",
"assert quadrant(Point(-1, -1)) == 3\n",
"assert quadrant(Point(-1, -1))== 3\n",
"\n",
"assert waypoints(0, 10, 10) == [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n",
"assert waypoints(0, 100, 10) == [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]\n",
"assert waypoints(zero, Point(10, 20), 10) == [\n",
" 0j,1+2j,2+4j,3+6j,4+8j,5+10j,6+12j,7+14j,8+16j,9+18j,10+20j]\n",
"\n",
"# There are 9 moves from the start point\n",
"assert all_moves([track.start]) == {\n",
"assert all_moves([start]) == {\n",
" -1-4j, -1-5j, -1-6j, \n",
" 0-4j, 0-5j, 0-6j, \n",
" 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 circular_track_moves([track.start]) == {0-6j, 1-6j, 1-5j, 0-4j, 1-4j}\n",
"assert expand({(track.start, zero): [track.start]}) == {\n",
"assert riddler_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",
" (1-5j, 1+0j): [0-5j, 1-5j],\n",