diff --git a/ipynb/RaceTrack.ipynb b/ipynb/RaceTrack.ipynb index 3787b1f..8168cfa 100644 --- a/ipynb/RaceTrack.ipynb +++ b/ipynb/RaceTrack.ipynb @@ -42,7 +42,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now define a `Point` in the 2-D plane as a complex number, and a `Path` as a list of points. Then define some global variables: the points in the `track`; the `finish` line; the `start` point; the `zero` vector; and the allowable `deltas` (the nine possible changes on each move)." + "Now define a `Point` in the 2-D plane as a complex number (with functions to extract the `X` and `Y` components), and a `Path` as a list of points. Then define some global variables: the points in the `track`; the `finish` line; the `start` point; the `zero` vector; and the allowable `deltas` (the nine possible changes on each move)." ] }, { @@ -83,7 +83,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.2, color='k'))\n", + " ax.add_artist(plt.Circle((0, 0), 3, alpha=0.1, color='k', ec='w'))\n", " ax.plot(*XY(track), 'k,' ) # grid points\n", " for path in paths:\n", " ax.plot(*XY(path), 'o-') # paths\n", @@ -109,7 +109,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOsAAAD7CAYAAACL3GNOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAASQ0lEQVR4nO3dfZAk5V0H8O9vZnpnZ/ad24PLYeACwTORMoSSqFELiJfwohQWhYIGSygoKBQRC0EgUByJMSqWhUpSARXyViFiJJRW0EthXa5KIxZQCQkIV4YI4e44wu7tzu3svOzM9M8/uufoW3Zuenp6pvt55vupmpq9nf11P9Mz3+nn6e7nRlQVRJR+maQbQEThMKxEhmBYiQzBsBIZgmElMgTDSmQIhnUIRGSniHxpAMt9RUR2xL3cEOvdJiIqIrkYl/l7InJARJ7roeZWEVkSkV0iUoyrLWk1MmEVkRtE5BkRqYvI5wa4nnNEZN+glp+EIX0o7ATwO6r6vsB6T/eDuCAib7sgQFX/HMCPAfgJAB8ZcPsSNzJhBXAAwB8DeCjphtCGjgPw/LrfNQA8CuDqTkWqugrg/wBsGlzT0mFkwqqqj6nq4wAWu/2tiFwpIv8pIn8jIiUReUlEfinw+FUi8qKIrIjID0TkOv/3EwD+FcBWESn7t61+2ZiIfMGveUFEfjqwvD8Skf3+Y3uD6wpLRDIicpuIvCwiiyLyqIgc5z/W7rb+toj80N9TfSxQWxCRz/tdyhf97uU+/7EvAjgJwL/4z+fWwGo/2mF5H/B7MYdF5A0R+csubc/6P7rB36vqXlX9ewAvdHn6LoDYuuSppaojdYO3d/1cl7+5EkATwB8AcABcBqAE4Dj/8V8GcCoAAXA2gAqAM/3HzgGwb93ydgKoAbgQQBbApwA85T+2HcBrALb6/94G4NSQz+UVADv8n28C8BS8bmEewAMAHgksUwH8LYACgPcBqAN4j//4nwLYA2DOr/9u8DkE1xNyef8F4Lf8nycB/GyX53G+v30mOjz+bu+t2rH+8wC+DGAs6ffXIG8js2eN4EcA7lPVhqr+A4C98EIKVf26qr6snj0AvgHgF7ss7z9U9QlVbQH4Irw3OAC04IXrvSLiqOorqvpyhPZeB+BjqrpPVevwPiAuXXcQ6B5VrarqcwCeC7Th1wH8iaouqeo+AH8dcp2dltcA8G4RmVfVsqo+1WkBIvIMvN7Irep1aaP4OIAPAVgN9lhsw7B2tl/9j23fqwC2AoCIXCAiT4nIIRFZhrfHnO+yvIOBnysAxkUkp6rfh7dX3AngRyLylUDXuRcnA/iaiCz7bXoR3gfBCcdow6T/81Z4e/e24M/H0ml5VwP4cQAvicjTIvIrx1jGWQAuB7BTRJyQ613v9wE8DWBaVZ+JuIzUY1g7O1FEJPDvkwAcEJE8gH8C8BcATlDVWQBPwOsSA173sCeq+mVV/QV4gVMAfxahva8BuEBVZwO3cVXdH6L2dXjd37Z3rm9iLw1R1f9V1d8AcDy85/JVfzy/0d8qgMfhdcHf0ct6At4D4N9UtRqx3ggjE1YRyYnIOLwxY1ZExrucJzwewI0i4ojIr8F7QzwBYAxet/VNAE0RuQBHnzZ4A8AmEZkJ2a7tIvIh/0OgBqAKb4/YPg0UNiifBfBJETnZr90sIheHrH0UwO0iMiciJwK4Yd3jbwA4JeSyICJXiMhmVXUBLPu/bnX6e7/bDnjbNrgc8V+zMf/f4/52Ws+BN2a22siEFcCd8IJwG4Ar/J/vPMbf/zeA0wAsAPgkgEtVdVFVVwDcCO8NvgTgNwH8c7tIVV8C8AiAH/hd0m5d2jy8AzwL8LqVxwO4w3/snfAO1oTxV347viEiK/AONv1MyNqPA9gH7xTIkwC+iqPf/J8CcKf/fP4wxPLOB/CCiJT9dl2uqrUuNYq3vx9Phvc6tY8GV+EdO1gvi3VHkm0kRw/LCPBO3QC4xu+aJtmOvwPwj6q6a8jrvR5ewM4e4joPwDvI1NOVXiIyC+B/4L1eTwykcSkxSntW46jqNcMIqoi8Q0R+3j9Xux3AzQC+Nuj1rnMbgLtF5NmwBf5e/iV4p53+fVANSwvuWTeQlj3rsPjj3K8DeBe8MeZXANyuqmuJNoyOwrASGYLdYCJDMKxEhujp4uf5+Xndtm3bgJpCRM8+++yCqm7e6LGewrpt2zY884y1V3MRJU5EXu30GLvBRIZgWIkMwbASGYJhJTIEw0pkCIaVyBAMK5EhBhLWo/+DBdaZVpfEOlnX3UDCGnVyAOvSUZfEOlnXHbvBRIZgWIkMwbASGYJhJTIEw0pkCIaVyBAMK5EhGFYiQzCsRIZgWIkMwbASGYJhJTIEZ92wLhXrZF13nHXDulSsk3XdsRtMZAiGlcgQDCuRIRhWIkMwrESGYFiJDMGwEhmCYSUyBMNKZAiGlcgQDCuRIRhWIkNw1g3rUrFO1nXHWTesS8U6Wdcdu8FEhmBYiQzBsBIZgmElMgTDSmQIhpXIEAwrkSEYViJDMKxEhmBYiQzBsBIZgmElMgRn3bAuFetkXXecdcO6VKyTdd2xG0xkCIaVyBAMK5EhGFYiQzCsRIZgWIkMwbASGYJhJTIEw0pkCIaVyBAMK5EhGFYiQ3DWDetSsU7WdZfrewkbMGVGg+l1qopms4lmswnXddFqteC6LlzXhapiYWEBi4uLEBFkMhlks1lkMhlkMhk4joNcrvPLn5bnOOp1QQMJKw2GqqJWq2FtbQ2NRuNISKNqh9ZxHIyNjSGfz8eyB6DBYFhTznVd1Gq1IyHtJ5wbLbter6NerwPwwpvP55HP51EoFBjclGFYU2ptbQ2VSgW1Wi3WgB6L67qoVquoVqtYWVlBoVBAsVg8ZneZhoevQsrUajWUy2Wsra0l2o5Wq4VyuYzV1VXk83lMTk5ibGws0TaNOoY1JdbW1rCysnKkS5oW7XFyrVZDoVDA1NQU97QJ4VZPmOu6OHz4MCqVStJN6aparaJWq2FiYgJTU1Mc0w4Zw5qgarWKw4cPo9VqJd2U0FQV5XIZ9XodMzMz7BoPEa9gSoDrulheXsbS0pJRQQ1qNBpYXFzEyspK0k0ZGdyzDlmz2cTS0hIajUbSTembqmJlZQWNRgOzs7PIZPjZP0jcukNUr9exuLhoRVCDarUaFhYWrHteacOwDkmlUsGhQ4eM7fZ202w2sbi4mLqj2TZhWIegUqlgeXk5lutD08x1XSwtLTGwA8JZNwOuawd1VEQNbJpfwyTrgvhdNwOsq9VqKJVKkdZhsnZgexnDpvU1TLouiN3gAWk2myPR9e2kHdhhXdc8ChjWAeAb1dP+wKJ4MKwDsLy8zNMYvlqtxgsnYsKwxqw9rY3ekoZZRDZgWGPUarVw+PDhpJuROqqKUqk0suP3uDCsMSqVSiM/Tu2k0WiwO9wnhjUm7Tmf1Nnq6iqazWbSzTAWwxoT7jW6a1/4T9EwrDGoVCo8+htStVrlwaaIGNYYlMvlpJtgFG6vaBjWPtVqNY7DelSv17nNImBY+2TC/52UNqrK7RYBZ930UddsNjkdLKJqtXrUeVfTXvth1QVx1k0fdevfcBReq9VCtVo98m/TXvth1QWxG9wHnlftD3slvWFYI2p/extFV6/X2TPpAcMaEd9o/XNdl+dce8CwRsQuXDy4HcNjWCPiFUvx4HYMj2GNoP0N49Q/hjU8hjWCtbU1jldj4rouD9SFxLBGYOt/1J0U7l3DYVgjYFjjxSFFOAxrBHxzxYvbMxyGNQLuWePF7RkOwxoB9wTx4vYMh2GNgEeC48XtGQ6nyEWwZcuWSHXUmSmvPafIGVZ38ODBSHXUmSmvPafIGSaOT0l6C7dnOAxrBHxzxSuT4dswDG6lCLLZbNJNsArDGg63UgQMa7y4PcNhWCPgniBe3J7hcCtFkMvlkm6CVbg9w2FYI3AcJ+kmWCOTyTCsITGsEeRyOXbdYpLL5Xh0PSS+4yLi3jUeY2NjSTfBGAxrRPl8PukmWIEfeuExrBExrP3LZDIYHx9PuhnGYFgjchyHB0b6NDY2xvFqDzjrpo867hX6E9x+pr32w6oL4qybPuoY1ujWd4FNe+2HVRfEbnAfxsbGeDQzovHxcZ7+6hG3Vp+KxWLSTTASt1vvGNY+FQoFXojeI/ZIomFY+yQimJycTLoZRuH2ioZhjUGxWORpnJDy+TwPzEXEsMaAe9fwpqamkm6CsRjWmBSLRY7DuuA26g/DGqOZmRmejuggm81ieno66WYYje+sGDmOw+5wB9PT0/wg6xO3XswmJibY1VunWCyiUCgk3QzjMawxExHMzc3x3KvPcRzMzMwk3QwrMKwDkM1mMTs7O/IzSrLZLObm5kZ+O8SFs24GVJfP50d6jyIimJ2dDX3+OY2vYRrqgjjrZoB1xWJxZM8rzszM9DRBP62vYdJ1QewGD9jU1NTIBXZ2dpYX6g8Ar5EbgnZYV1ZWEm7JYIkIZmZmGNQBYViHZGpqCtlsFqVSycovD85kMpidneV1vwPEsA5RsVhENpvF8vIyWq1W0s2JjeM4mJub42SGAeOYdcjy+Tzm5+etuXBifHwcmzZtYlCHgFs4AdlsFps2bcLq6irK5TJc1026ST3LZDKYnp7m+HSIGNaEtKfV5fN5lEolrK2tJd2k0MbHxzEzM8OrtIaMYU2Y4ziYn59HpVJBuVxGs9lMukkdOY6DqakpHkRKCMOaEu2L3duhTdMBqFwuh8nJSXZ5E8awpoiIYGJiAsViEdVqFZVKJbHusYggn8+jWCxyT5oSDGsKiQiKxSKKxSIajQaq1SpqtdrAu8giglwuh/HxcRQKBR7hTRm+GinnOA4cx8H09DQajQbq9Trq9ToajUbfR5FFBJlMBo7jIJ/PI5/PM6ApNpBXRkQiXaXDumPXtYPb/t8oms0mGo0Gms0mXNdFq9WC67pwXReqii1btuDgwYNHQpnNZo/c53I5OI7T8YiuadvG1rqggYTVlBkNptflcrmOe8JzzgHOPltxwgmRVpma5zjqdUHs81jqyiuTbgHFjWG1FMNqH14bbKlGw7uRPbhntdSHP+zdf/ObiTaDYsSwWuqaa5JuAcWNYbXUFVck3QKKG8eslqpUvBvZg3tWS114oXfPMas9GFZLXX990i2guDGslrrssqRbQHFjWC1VKnn3vX4pwOPf3o97d+3FgeUqts4WcMt52/Gr7z8x/gZSzxhWS118sXffy5j18W/vx+2PfQ/Vhjfxff9yFbc/9j0AYGBTgN91Y2ndjTcCe/Zc0lPNvbv2HglqW7XRwr279oZehgnbxqS6IH7XjaV1l1wCqD7WU82B5WpPv9+ICdvGpLognme11MKCdwvr9VIVmczGn/5bZ/lFyGnAMaulLr3Uuw8zZn29VMXlDz6FnAC5XAb15lv/A0XByeKW87YPppHUE4bVUjffHO7v2kFdLK/hket+Dj9crPBocEoxrJa66KLufxMM6heu/gDOPGkOZ540x3CmFMesljp40Lt1slFQKd24Z7XU5Zd79xuNWRlUMzGslrrtto1/z6Cai2G11Pnnv/13DKrZOGa11Guvebc2BtV8DKulLroIOO00YPduBtUW7AZb6BMPvonvPn8ctJXFjvNaOPWjz2PsJAbVdNyzWuYTD76Ju3/XCyoAuI0svv+l9+PsqfcyqIbjrBuL6nbvBnbecBy0efT312gzh8/esRW7d8e/TtYNti6Is24sqrvqKm9PuhG3kcVVV8W/TtYNti6I3WCLPPwwkHE2/sb0jNPCww8PuUEUK4bVIueeC+y8/xAkd3RgJdfCzvsP4dxzE2oYxYJhtcxd127GPZ9+K7AZp4V7Pn0Id127OeGWUb8YVgvdde1m/NRPZpHPA0/uyjKoluB5Vkt95jPe/Qc/mGw7KD4Mq6UYUvuwG2yp55/3bmQP7lktdcMN3j2/68YeDKul7r036RZQ3BhWS511VtItoLhxzGqp73zHu5E9uGe11E03efccs9qDs24srbvvPmDPnjMirS/qOlkXf10QZ91YWnfGGYBq9H6wCc9xFOqCOGa11NNPezeyB8eslrrlFu+eY1Z7MKyWuv/+pFtAcWNYLXX66Um3gOLGMaulvvUt70b24J7VUnfc4d1zzGoPhtVSDzyQdAsobgyrpbbzy8qtwzGrpfbs8W5kD+5ZLXX33d49x6z2YFgt9dBDSbeA4sawWuqUU5JuAcWNs24srXvySUBkR6T1RV0n6+KvC+KsG0vrduwAVJ+MtL6o62Rd/HVBPBpMZAiGlcgQDCuRIRhWIkMwrESGYFiJDMGwEhmCYSUyBMNKZAjp5coKEXkTwKuDaw7RyDtZVTf8qvqewkpEyWE3mMgQDCuRIRhWIkMwrESGYFiJDMGwEhmCYSUyBMNKZAiGlcgQ/w/XLucbMa7xmAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] @@ -148,7 +148,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -193,7 +193,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now I'll define the `legal_moves` that can be made. Given a path, `legal_moves(path)` yields `(Point, Vector)` tuples giving every possible new point position and velocity. Each point must be a point on the track (not inside the circle), the velocity vector can differ from the previous velocity vector only by an allowable delta, and the line from the previous final point on the path to the new point must not intersect the circle. \n", + "Now I'll define the `legal_moves` that can be made. Given a path, `legal_moves(path)` yields all points that can follow on to the end of the path. Each point must be a point on the track (not inside the circle), the velocity vector can differ from the previous velocity vector only by an allowable delta, and the line from the previous final point on the path to the new point must not intersect the circle. \n", "\n", "I have inserted a hack here: to make sure that paths start off going counterclockwise, for the first two steps I insist that the deltas be either up or to the right or zero.\n", "\n", @@ -206,16 +206,15 @@ "metadata": {}, "outputs": [], "source": [ - "def legal_moves(path, track=track, deltas=deltas) -> Iterator[Tuple[Point, Vector]]:\n", - " \"\"\"What (point, velocity) pairs can be reached in one step from this path?\"\"\"\n", + "def legal_moves(path, track=track, deltas=deltas) -> Iterator[Point]:\n", + " \"\"\"What points can be reached in one step from this path?\"\"\"\n", " if len(path) <= 2: # Make sure we start counterclockwwise\n", " deltas = [Point(x, y) for y in (0, 1) for x in (0, 1)]\n", " p, v = path[-1], velocity(path)\n", " for d in deltas:\n", " new_p = p + v + d\n", - " new_v = v + d\n", " if new_p in track and not intersects_circle(p, new_p, 3, zero):\n", - " yield new_p, new_v\n", + " yield new_p\n", " \n", "def intersects_circle(p, q, r, c):\n", " \"\"\"Does a line from p to q intersect a circle of radius r at center c?\"\"\"\n", @@ -248,11 +247,15 @@ " frontier = {(path[-1], velocity(path)): path}\n", " completed = []\n", " while not completed:\n", - " frontier = {(p, v): path + [p] \n", - " for path in frontier.values() \n", - " for p, v in legal_moves(path)}\n", + " frontier = expand(frontier)\n", " completed = [path for path in frontier.values() if is_complete(path)]\n", - " return completed" + " return completed\n", + "\n", + "def expand(frontier) -> dict:\n", + " \"\"\"The {(point, velocity): path} mapping extended one step in all legal ways.\"\"\"\n", + " return {(p, velocity(path + [p])): path + [p] \n", + " for path in frontier.values() \n", + " for p in legal_moves(path)}" ] }, { @@ -262,7 +265,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -275,34 +278,6 @@ "plot(search([start]))" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To give you an idea of some of the paths that were not shown, here are completions of a path called `tight`:" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "tight = [start, Point(1, -4), Point(2, -3), Point(3, -1), Point(3, 1), Point(2, 3)]\n", - "plot(search(tight))" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -320,14 +295,53 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ - "def decode_path(path) -> List[int]:\n", + "def encode_path(path) -> List[int]:\n", " \"\"\"The digits representing the moves (as coded changes in acceleration).\"\"\"\n", " return [deltas.index(velocity(path[:i + 1]) - velocity(path[:i])) + 1\n", - " for i in range(1, len(path))]" + " for i in range(1, len(path))]\n", + "\n", + "def decode_path(digits, start=start) -> Path:\n", + " \"\"\"The points that the digits represent.\"\"\"\n", + " velocity = zero\n", + " path = [start]\n", + " for d in digits:\n", + " velocity += deltas[d - 1]\n", + " path.append(velocity + path[-1])\n", + " return path" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[3, 3, 1, 7, 7, 5, 7, 8, 9, 9, 3, 6]\n", + "[3, 3, 1, 7, 7, 5, 7, 8, 9, 9, 3, 9]\n", + "[3, 3, 1, 7, 7, 5, 7, 8, 9, 9, 3, 3]\n", + "[3, 3, 1, 7, 7, 5, 7, 8, 9, 9, 6, 3]\n", + "[3, 3, 1, 7, 7, 5, 7, 8, 9, 9, 6, 6]\n" + ] + } + ], + "source": [ + "for path in search():\n", + " print(encode_path(path))\n", + " assert path == decode_path(encode_path(path)) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To get an idea of some of the paths that were discarded by the `frontier`, here we start with a path that is tighter around the circle, and search for completions:" ] }, { @@ -337,28 +351,17 @@ "outputs": [ { "data": { + "image/png": "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\n", "text/plain": [ - "[[3, 3, 1, 7, 7, 5, 7, 8, 9, 9, 3, 6],\n", - " [3, 3, 1, 7, 7, 5, 7, 8, 9, 9, 3, 9],\n", - " [3, 3, 1, 7, 7, 5, 7, 8, 9, 9, 3, 3],\n", - " [3, 3, 1, 7, 7, 5, 7, 8, 9, 9, 6, 3],\n", - " [3, 3, 1, 7, 7, 5, 7, 8, 9, 9, 6, 6],\n", - " [3, 5, 2, 4, 4, 8, 8, 7, 9, 6, 6, 3],\n", - " [3, 5, 2, 4, 4, 8, 8, 7, 9, 6, 6, 6],\n", - " [3, 5, 2, 4, 4, 8, 8, 7, 9, 6, 6, 9],\n", - " [3, 5, 2, 4, 4, 8, 8, 7, 9, 9, 3, 6],\n", - " [3, 5, 2, 4, 4, 8, 8, 7, 9, 9, 3, 9],\n", - " [3, 5, 2, 4, 4, 8, 8, 7, 9, 9, 3, 3],\n", - " [3, 5, 2, 4, 4, 8, 8, 7, 9, 9, 6, 3]]" + "
" ] }, - "execution_count": 13, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ - "[decode_path(path) for path in search() + search(tight)]" + "plot(search(decode_path([3, 5, 2, 4, 4])))" ] } ],