Add files via upload

This commit is contained in:
Peter Norvig authored and GitHub committed 2021-07-25 17:52:47 -07:00
1 parent d42c13eacb
commit d63869df67
1 file changed
+520
+520
View File
@@ -0,0 +1,520 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div align=\"right\" style=\"text-align: right\"><i>Peter Norvig<br>July 2021</i></div>\n",
"\n",
"# Climbing Wall\n",
"\n",
"From the 538 Riddler's [23 July 2021 issue](https://fivethirtyeight.com/features/can-you-hop-across-the-chessboard/):\n",
"\n",
">Today marks the beginning of the Summer Olympics! One of the brand-new events this year is sport climbing, in which competitors try their hands (and feet) at lead climbing, speed climbing and bouldering.\n",
">\n",
">Suppose the event’s organizers accidentally forgot to place all the climbing holds on and had to do it last-minute for their 10-meter wall (the regulation height for the purposes of this riddle). Climbers won’t have any trouble moving horizontally along the wall. However, climbers can’t move between holds that are more than 1 meter apart vertically.\n",
">\n",
">In a rush, the organizers place climbing holds randomly until there are no vertical gaps between climbing holds (including the bottom and top of the wall). Once they are done placing the holds, how many will there be on average (not including the bottom and top of the wall)?\n",
"\n",
"I'll define `place_holds` as a Monte Carlo simulation that selects uniform random hold locations until no gap is more than 1:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import random\n",
"from typing import List\n",
"from statistics import mean\n",
"\n",
"def place_holds(top=10) -> List[float]:\n",
" \"\"\"Place holds on wall until no gap is more than 1.\"\"\"\n",
" holds = [0, top]\n",
" while max(gaps(holds)) > 1:\n",
" holds.append(random.uniform(0, top))\n",
" holds.sort()\n",
" return holds[1:-1] # (not including the bottom and top of the wall)\n",
" \n",
"def gaps(numbers) -> List[float]:\n",
" \"\"\"The differences between adjacent pairs of sorted numbers.\"\"\"\n",
" return [numbers[i] - numbers[i - 1] for i in range(1, len(numbers))]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For example:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[0.2174318085529534,\n",
" 0.3246749454836446,\n",
" 0.6326268620662914,\n",
" 0.6381873992245448,\n",
" 0.6579032162296619,\n",
" 0.7250061911052263,\n",
" 1.0515460945502828,\n",
" 1.5119309951687048,\n",
" 2.15396033960555,\n",
" 2.7599575760459114,\n",
" 3.2936277160533924,\n",
" 3.2997054391317278,\n",
" 3.7149308611754135,\n",
" 3.803685937586361]"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"place_holds(4)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[0.10724313693069121,\n",
" 0.30795191658264676,\n",
" 0.005560537158253442,\n",
" 0.019715817005117042,\n",
" 0.06710297487556449,\n",
" 0.32653990344505646,\n",
" 0.46038490061842197,\n",
" 0.6420293444368452,\n",
" 0.6059972364403614,\n",
" 0.533670140007481,\n",
" 0.0060777230783353176,\n",
" 0.41522542204368573,\n",
" 0.08875507641094771]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gaps(_)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now the Monte Carlo algorithm computes the mean number of holds over repeated simulations:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"def monte_carlo(fn, *args, repeat=10_000, key=len) -> float:\n",
" \"\"\"Mean value of key(fn(*args)), repeated `repeat` times.\"\"\"\n",
" return mean(key(fn(*args)) for _ in range(repeat))"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"43.014"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"monte_carlo(place_holds)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Answer:** The expected number of holds is about **43** (which I found surprisingly large).\n",
"\n",
"# Extra Credit\n",
"\n",
"> Now suppose climbers find it just as difficult to move horizontally as vertically, meaning they can’t move between any two holds that are more than 1 meter apart in any direction. Suppose also that the climbing wall is a 10-by-10 meter square. If the organizers again place the holds randomly, how many have to be placed on average until it’s possible to climb the wall?\n",
"\n",
"I'll again do a Monte Carlo simulation, placing holds at uniform random locations on a 10-by-10 meter wall, until there is a path from the bottom to top. To help determine if there is a path, I'll keep track, for every hold, of the highest hold that can be reached from that hold. The data structure `Wall` will be a mapping of `{hold: highest_reachable_hold}`. When a new hold is added to the wall, we update highest reachable holds as follows: \n",
"- Find all holds `hold2` that are within 1 meter of the new `hold`.\n",
"- We can now `merge` the holds reachable (transitively) from `hold` and those reachable from `hold2`.\n",
"- Let `new_max_hold` be the highest hold reachable by `hold` or `hold2`\n",
"- Update all the holds that are reachable from either `hold` or `hold2` to now reach `new_max_hold`.\n",
"- If we find a hold `h` that is within 1 meter of the bottom and can reach a hold within one meter of the top, add `h` to the `starts` set.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"# A 2-D point is an (X, Y) tuple:\n",
"def X_(point): return point[0]\n",
"def Y_(point): return point[1]\n",
"\n",
"class Wall(dict):\n",
" \"\"\"A Wall is a mapping of {hold: highest_reachable_hold}.\n",
" Also keep track of `starts`: a set of holds that are within 1 \n",
" of the bottom, and can reach to a hold within 1 of the top.\"\"\"\n",
" def __init__(self, top=10): \n",
" self.top = top\n",
" self.starts = set()\n",
" \n",
" def add(self, hold):\n",
" \"\"\"Add hold to this `Wall`, and merge groups if needed.\"\"\"\n",
" self[hold] = hold\n",
" for hold2 in self:\n",
" if hold is not hold2 and distance(hold, hold2) <= 1:\n",
" self.merge(hold, hold2)\n",
"\n",
" def merge(self, hold1, hold2):\n",
" \"\"\"Update the highest reachable hold for hold1, hold2, and all they can reach.\"\"\"\n",
" old_max_holds = self[hold1], self[hold2]\n",
" new_max_hold = max(old_max_holds, key=Y_)\n",
" for h in self:\n",
" if self[h] in old_max_holds:\n",
" self[h] = new_max_hold\n",
" if self.top - Y_(new_max_hold) <= 1 and Y_(h) < 1:\n",
" self.starts.add(h)\n",
" \n",
"def distance(A, B): return abs(complex(*A) - complex(*B))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Note*: This could be made more efficient with a [kd-tree](https://en.wikipedia.org/wiki/K-d_tree) to see what holds are near each other, and a [union-find forest](https://en.wikipedia.org/wiki/Disjoint-set_data_structure) to merge groups. But since the number of hold points is small, I opted for simplicity, not efficiency.\n",
"\n",
"Now, we just need to keep adding random holds to the wall until there are one or more `wall.starts` holds: holds that are within 1 meter of the bottom and can attain a hold within 1 meter of the top. Then we can do a Monte Carlo simulation and find the mean number of holds."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"def place_holds_2d(top=10) -> Wall:\n",
" \"\"\"Randomly place holds on wall until there is a path from bottom to top.\"\"\"\n",
" wall = Wall(top)\n",
" while not wall.starts:\n",
" wall.add((random.uniform(0, top), random.uniform(0, top)))\n",
" return wall"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"143.004"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"monte_carlo(place_holds_2d, repeat=1000)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Answer:** The expected number of holds is about **143** (which I found surprisingly small).\n",
"\n",
"# Visualization\n",
"\n",
"To get an idea what random walls look like, and to gain confidence in this program, I'll plot some walls, with red dots indicating the random holds, and dotted lines indicating possible paths from bottom to top."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"def plot_wall(wall):\n",
" \"\"\"Plot the holds on the wall, and the paths from bottom to top.\"\"\"\n",
" plt.gca().set_aspect('equal', adjustable='box')\n",
" ends = {wall[h] for h in wall.starts}\n",
" for h in wall:\n",
" if wall[h] in ends:\n",
" if Y_(h) <= 1:\n",
" plot_points([h, (X_(h), 0)], 'k:')\n",
" if wall.top - Y_(h) <= 1:\n",
" plot_points([h, (X_(h), wall.top)], 'k:')\n",
" for h2 in wall:\n",
" if distance(h, h2) <= 1:\n",
" plot_points([h, h2], 'k:')\n",
" plot_points(wall, 'r.')\n",
" plt.title(f'holds: {len(wall)}; start points: {len(wall.starts)}')\n",
"\n",
"def plot_points(points, fmt):\n",
" \"\"\"Plot (X, Y) points with given format.\"\"\"\n",
" plt.plot([X_(p) for p in points], [Y_(p) for p in points], fmt)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAPkAAAEICAYAAACd9lKYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOydd3hURdfAf7ObbAoBKaEjoUeqlAgEXkkIoAgIIhj4RJovINgAQQQsYAEsCIiKiPBSRURRBATpAZKNiDQp0nuRHkraZnfP98duYggJhGQ3u5vc3/PcJ9l75945t5wpZ86cUSKChoZG/kXnagE0NDSci6bkGhr5HE3JNTTyOZqSa2jkczQl19DI52hKrqGRz8m3Sq6UOqGUap3Dc0UpVS2LY32UUtG5k04jpyil9imlwl0thyeRb5Xc3VFKRSqljEqpBKVUVIZjNZRSvyilLimlriqlViulgtMd762U2q6UuqGUOqOU+lgp5eUAmeYopT7I5TWcWgiKSG0RicqmLDku6DO51stKqT+VUslKqTmZHPdXSk1TSl1WSl1XSm12RL6OQFNy13EVmAJ8mMmxosAyIBgoDfwB/JLuuD8wBAgEmgCtgOHOFDY7OKKgcWPOAR8A/8vi+AygOFDT/ndoHsl1b0QkX27ACWwf/l/AdeB7wDfd8f7AEWzKtgwol+6YANXs/5ewH7+BTdneB6LtxxQwGbhoz+MvoM59ytkPiLpHmuJ2mUpkcfw1YHm639OAaVmkzVRmYACQApiAW6nXA0YCR4GbwH6gc7pr9QFi7Ne7CiwBkgCL/RpxWcgQBUywP8/r2Aqw4umOdwT2AXH2tDUzvNfW9v/HAouBeXb59gEh9mPzASuQaJdlBOALLACu2K+9DSh9n+/rA2BOhn3B9u+jiKu/+0xldrUATrsx28fwB1DOriR/AwPtxyKAy0BDwAf4HNic7tz0Sr7I/iEVsivD2XRK/jiwHVvNq7CV4mXtx54F/sqGnNlR8qeA83c5vhT4MJvP5W4yzwE+yJD+Gfsz1AHdgPh06fsAZuAVwAvws++LvocMUfbnWMf+XJcAC+zHatjzaAN425XzCGBI917TK3kS0A7QYys4fs/wDbRO9/sFYDm2lpAeaJSqmNgKsxXZeH6ZKXkvYA+2wu6y/f8urtaB1C2/N9enisg5EbmK7eXWt+/vAfxPRHaISDIwCghVSlVKf7JSSg90Ad4RkXgR2QvMTZckBSgMPAQoEflbRM4DiMhCEamX2xtQSlUAvsRWW2d2vC8QAkzM5iWzlDkzROQH+zO0isj3wGGgcbok50TkcxExi0hiNmUAmC8ie0UkHngbiLQ/727AryKyVkRS7PflBzTL4jrRIrJSRCzYau+H75JnCraWWTURsYjIdhG5Yb/PD0Wkw33In54K2Aqs69gKxJeBuUqpmjm8nkPJ70r+T7r/E4AA+//lgJOpB0TkFrYmXPkM55fEVkOdTrcv/XkbgC+wKeEFpdQMpVQRRwmvlCoJrMHW9P4uk+NPYevTPyEil7NzzfuVWSnVSym1SykVp5SKw/YxB6ZLcjqLU+9Fxmfqbb9uxndjtafN+G5SyfiOfe9iG5gPrAYWKaXO2Q2W3jmUPz2J2AqQD0TEJCKbgI3AYw64dq7J70qeFeeAoNQfSqlC2Er4sxnSXcLWHH0w3b6K6ROIyFQRaQTUxtbUfN0RAiqlimFT8GUiMi6T422Bb4AnRWTP/Vz7LjLfNiVRKRVkz+NlbPaAosBebM18Mjsnk99ZkfGZpmBr6mZ8N8qeNuO7yQ63ySIiKSLyrojUwtYy6ICtqZ1b/nLANZxGQVXyhUBfpVR9pZQPMB7YKiIn0ieyNwF/Asbah0hqAb1TjyulHlFKNbHXBvH8a3S6J0opvVLKF1tLQaeU8k2tVew162ogRkRGZnJuBPAttn7fH5kcn5PZME82ZL4AVEmXvBA2RblkP7cvtpr8blwAKiilDPdI95xSqpZSyh94D/jR/rwXA+2VUq3sMg4DkgHjPa6XlSxp96OUaqmUqmvvFtzAVrBk93152d+XHtDb31dqi2EzcAoYZU/XHAjH9g5dj6uNAs7auNPoMha7ccf+eyA2q/FVYAVQId2x9Ia3kvbjmVnXW2ErxW9hq4W+BQLsx3oA++4iXx97Pum3OfZjve2/4+3XTt0q2o9vxNbCSH9sVbprrwf6Z5Hv3WSuDuzCZnleat83zv6MLgOTgE1Av3T3EJ3h+gbg19RzspAhin+t6zew2UsC0x3vjM2Sf92eX+3M3msm77SS/bl52X93wqZ8cdhGWv4POGh/rheAqenSjk7/DDOReWwm72tsuuO1gVj7tW8bhXD1puwCauQT7DXobqCe2AxXbofd+WeBiMx0tSwFgfzsvFAgERETtmExDQ2g4PbJNTQKDFpzXUMjn6PV5Boa+Zw87ZMHBgZKpUqV8jJLDY0Cw/bt2y+LSMmM+/NUyStVqsSff/6Zl1lqaBQYlFInM9uvNdc1NPI5mpJraORzNCXX0MjnaEquoZHP0ZRcQyOfc08lV0r9Tyl1USm1N92+4kqptUqpw/a/xZwrpoaGRk7JTk0+B2ibYd9IYL2IVMc24+mO6ZAa+YTYWJgwwfZXwyO55zi5iGzOGBYJ2xS+cPv/c7FNHXzDgXJpuAOxsVhatkRvNoPBAOvXQ2ioq6XSuE9y2icvLf/GMjsPlMoqoVJqgD1e9Z+XLl3KYXaeT0JCAgkJCTk+/6effuKnn37K8fnh4eGEh4dnez/AtwMGIMnJYLGAyQRRUTnO363J562VbE1QsdfkK0Skjv13nNhCAaUevyYi9+yXh4SESH71ePv1rbcoc+AAjYYNc0ptl6qIUXZFS1X4p59+OlvnpxYw/v7+t+1PSbFNOV++fDkAjRs35sMPP6R9+/aUOX6c4Jdewkcp9L6++bMmj42FVq1shZiHt1aUUttFJCTj/py6tV5QSpUVkfNKqbLYYni7lthYW00THp73Lyk2llYTJuBltZKybBnemzbdIcOCBQsAeO6553KUxS+//HLb76lTpwLZV/KMyp2Kt7d32vVEhJiYGCwWCxcvXqRVq1aUWLSICkePQsuWHvvx35WoKJuCp2+t5LP7zKmSL8MWouhD+99f7p7cybi6NI6KwgdbdEOL2ZzphzJzpi0ISk6V/IEHHrjtd0alvxdZFTLLR4/m6s8/075mTXpPn07//v3x8/Nj7NixNGjQgLOvv857772XI5k9gvBw2zeT+u1k0XXxaLIRK+074Dy2oHdngP9ii2y6HlsM7vWkW/3iblujRo3EKYwfL6LXi4Dt7/jxzsknK4xGET8/ser1In5+IkajDBs2TCZMmJCWxGQyiclkynEWixYtkkWLFuX4/LCwMAkLC7tt35kffpB4kBSQeJBtU6emHXvppZekbNmycu7cuRzn6TEYjbZvxmh0tSS5AvhTMtPhzHY6a3OaktuVTNIpWZ6T7kOxWCwSEBAgRYoUEYvF4pDLZ1TS+1X69IWMxWKR559/Xr4KCpIUEAExKyW7u3dPS79582b5/PPPHSK7Rg7IQcGTv5VcxO1K4ytXrsiuXbtEROTMmTPyTps28meXLjmWLz4+XuLj49N+Z1YzZ4ft27fLU089JXq9XloXKiRJer2YQBJ1OhlUv76IiEycOFG6dOkiSUlJOZLVbXGzbyRLclhp5X8ld2MG1K2b1ixO8fZ2yEeWUenvxYKXXpKJgYHSo0oVqVy5sgwdOlTi4uLk2sqVEv/WW5K4YYPEx8eLyWSSDh06yJNPPplrGd0Kd2jtZZccdj+zUnItWmseMKljR3z27EHPv4a542XKsGbNGvr3749Od293hYyGs6ys5emxWCzo9XpeCQnho+3bMQDmq1cxrVxJkccfB8Dcpg07AwMpWbIklfz92bBhAytWrGDFihU5vl+3JLdW9LwcvXG0MTAzzXfWVlBr8vSGOau9FunWrZsA8uOPP4qI3LNpnLF5Pn/+fJk/f36maffs2SOhoaFSokQJiYuLk68rV07re6fAbTVDQkKCABIaGirz5s2TXbt2yd9//+0wW4LbkJua3BWtAK1P7oFkeGmnT5+WYcOGidVqFRGRRo0aSeHChSU5OTnT0zNa59MrfWJiokydOlWeeOIJ2bt3r8yZM0cACQoKkjNnzohp0yaxphYyvr4iRqMcOHAg7VplypSRwMBAqV+/vgCyePFiJz0EF5PTPrmrR2+yiabkbk7fvn3lkUceSfvdqlUrGTVqVJbpz507J59++qkYjUa5fPmyKKXE399fli1bJgkJCVKuXDl5//33/z0h3Qe+e/du0el0Eh4eLlarVa5duybJyckSGRkpjz322H319QsEOanJXWDk05Tcg0hISBBvb29p2LChiIhYrVZ5p00b2fzEE3Jk/nyxWq0SFBQkBoNBBg4cKCIiVatWFaWUXLly5Z7XN5lM8p///EdGjx4tIjbr/8KFC6Vv374yduxY592YJ3M/SusiI19WSq4Z3twQPz8/EhISuHr1KgAbx4/njbVrMQApq1Zxq1QpBtWvT6CXFx2feAKAl156ia1bt+Lr63vP63t7e7NlyxZEBKvVyhNPPEGhPXt4uU4devTv78xb81xCQ7NvcHMzV1lNyd0ULy8vSpWyTe5rZjLhxb8v66+RI3ll506btfypp3ivbVuOly7NoUOHWL16NT/88AP+/v7s2LGD9957jzlz5lCiRAm2bdvGhAkTmDZtGuXKlWPr1q0MHz6cQnv2sB4w7N1rcw9250karpyjkF3czFVWC//kAfi2bYtZp8MMePn5UahQIQzYlN6gFCE3b1KyZEkqVKhAoUKFKFWqFCVKlKBChQr4+/tTunTptN9+fn6UKVOG4sWLU6FCBSpXrsyLtWrho5StEHHnKaWpcxTeftv2112nhoaG2grK9993jwIzsza8szatT55ztnz8sWzv2lXEaJTJkZELine truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAPUAAAEICAYAAACHyrIWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOydd3zN1//HX+fem5ttJaF21ChCjFixGiFFa9XerVaVtkbRn10U0aLVKkqNWrX52islUxCa2kKqYjVCjJCbcdfr98e9uU0iiYzPzXKfj8fnkdzPOZ/zfn/G++zzPoIkLFiwUHyQFbQCFixYkBaLUVuwUMywGLUFC8UMi1FbsFDMsBi1BQvFDItRW7BQzCh2Ri2EiBJCdMjltRRC1Mgk7EMhREjetLOQW4QQV4QQXgWtR1Gg2Bl1YUcI0VcIESqESBBCBGQQLhdCzBVC/CuEeCGE+EsIUcoY9oEQ4k8hxHMhxD0hxAIhhEICndYJIebmMQ2zZnok3UgGZFOXXGfsGaT1hRDinBAiWQixLoNwOyHEciFErBAiTggRJIXcvJDnD8JCjnkC4EcAtQF4ZxA+G0BLAJ4A7gBwA5BkDLMDMA7AGQAuAPYBmAjgW/OqnDVSZCyFmH8BzAXQEYBtBuG/wmBHdWB4tw3zT7VMIFmsDgBRMHzoFwHEAdgGwCZV+CcA/obhBewDUCFVGAHUMP7vZAx/DiAMwBwAIcYwAWAxgIdGGRcB1MuhnsMBBKQ7VxpAPIDq2UxjPID9qX4vB7A8k7gZ6gxgBAANALVR9n5j/MkAbgJ4AeAqgPdTpfUhgJPG9J4A2AVDxqMzpvEsEx0CAMw3Ps84AHsBlEkV3g3AFQDPjHHrpHuvHYz/zwKwHcAGo35XADQxhm0EoAeQaNTl/wDYANgE4LEx7bMAyuXwfc0FsC7dubeM30eJgv7u0+hV0ApIfkOGlx8GoAKAMgCuARhpDPMGEAugMQBrAD8DCEp1bWqj3mr8cOyNH//9VEbdEcCfAEoZjaUOgPLGsIEALmZDz4yMuq3xo5sE4AGAGwA+zyKNPQC+zeZzyUrndQDmpovfx/gMZQD6AVCliv8hAC2A0TCUUrbGcyGv0CHA+BzrGZ/rLgCbjGG1jDJ8AFgZjfFvAMpU7zW1UScBeBeAHIaM4nS6b6BDqt+fAtgPQ01HDsAjxRBhyLwOZOP5ZWTUQwFcgiFzizX+36ugbaC4tqmXkPyX5BMYXmZKlWgQgLUkw0kmA5gCwFMI4Zr6YiGEHEAvAF+TVJG8DGB9qigaAI4wVKEFyWskowGA5GaS7rnUuxKAkjB84NUA9AYwSwjhkz6iEGIYgCYAFmUz7Ux1zgiSO4zPUE9yG4BIAM1SRfmX5M8ktSQTs6kDAGwkeZmkCsAMAH2Nz7sfgIMk/UhqjPdlC0NTJCNCSB4iqYOhdG6QhUwNDDWvGiR1JP8k+dx4n9+S7JID/VNTCYYMKg6GDPALAOuFEHVymZ4kFFejfpDq/wQADsb/KwC4nRJAMh6GKlnFdNe7wFAC3U11LvV1JwAsBbAMQIwQ4lchRAkJ9E4xjm9IJpK8CEON4d3UkYQQPWBoR3cmGZudhHOqsxBiqBDivBDimRDiGQwfr3OqKHczufRVpH+mVsZ0078bvTFu+neTQvp3bJNF234jgKMAtho7IBcIIaxyqX9qEmHIMOaSVJMMBOAP4B0J0s41xdWoM+NfAFVTfggh7GHIwe+ni/cIhupl5VTnqqSOQHIJSQ8YOrJqAfhKAv0upiSfWQQhRCcAqwB0JXkpJ4lnoXMaeUKIqkYZXwBwIlkKwGUYqu3I6JqsdE5H+meqgaHqmv7dCGPc9O8mO6TRhaSG5GySdWEo+bvAUHXOKxdfHSX/ed2MejOAYUKIhkIIawC+AM6QjEodyVil2w1D1ddOCFEXwAcp4UKIpkKI5sbcXoX/OoleiXHIygaGmoBMCGGTUmqQvAkgGMA0IYS1sRrXD8AB47XeAH6Hod0WlkHa6zIadsmGzjEA3kwV3R4Gw3hkvHYYDCV1VsQAqCSEUL4i3mAhRF0hhB2AbwDsND7v7QDeE0K0N+o4AUAygNBXpJeZLqb7EUK0E0LUN1bzn8OQkWT3fSmM70sOQG58Xyk1giAYRiimGOO1AuAFQ62g4CjoRr3UB17uJJkFY2eM8fdIGHp1n8BgLJVShaXuKHMxhmfU+90ehlw6HoZS5ncADsawQQCuZKHfh0Y5qY91qcIrAjhiTPsfAJ+mCvOHoQYRn+o4nCr8OIBPMpGblc41AZyHoZNuj/HcPOMzigXwA4BAAMNT3UNIuvSVAA6mXJOJDgH4r/f7OQz9Hc6pwt+Hoac9zijPLaP3msE7dTU+R4Xxd3cYjO0ZDCMhAwBchyEziwGwJFXcqamfYQY6z8rgfc1KFe4G4JQx7TSjBAV1CKNiFoo4xhLyAgB3GjqaCh3GyTabSK4uaF2KM8V50sBrBUk1DMNUFl5zXrc2tQULxR5L9duChWKGpaS2YKGYka9tamdnZ7q6uuanSAsWiiV//vlnLEmXjMLy1ahdXV1x7ty5/BRpwUKxRAhxO7MwS/XbgoVihsWoLVgoZliM2oKFYobFqC1YKGZYjNqChWLGK41aCLFWCPFQCHE51bkyQgg/IUSk8W9p86ppwYKF7JKdknodgE7pzk0GcJxkTRhWBk2WWC8LFizkklcaNckgGJbTpaY7/nPvsx5AD4n1smDBQi7JbZu6HP/zyRUNoGxmEYUQI4x+k889evQol+KkZf/+/di/f7/pd2xsLHaMH4+TXbog3s8P2ZkPf3D6dPzZuzdw6pSkum3atAmbNm3KVty4uLg0h1TyHjx4gAcPHmQY38vLC15eXrmSVWw4dQqYP1/ydy8V2VrQYXTMd4BkPePvZzS4uEkJf0ryle3qJk2asDDMKEv5KAMCAgwnTp1CYsuWsAKgk8mw8cMPMW7bNnh4eMDd3R1ubm7Ys2cPqlevjnr16qHeixdoMnkyrEgobG2B48cBT89syd62bRsAoF+/ftnTzczkVJ5GY1iqbWUlhYuvIsipU0D79oBaDSiVOXr3UiKE+JNkk4zCcjtNNEYIUZ5ktBCiPAy+pIsMO3fuTPP78tKlqA2jfyEAb5MYM2YM9Ho9XF1dodfrAQBXr15FyZIlYbVtGzxJKADok5MhCwjI9ov95ZdfAGRu1H5+ftm+j5QMIoXM0syKjOSl1GK6du36UliRM+ZTp4CAAMDLSxrjCwgwGLROZ/ibg3efb2TTRZArgMupfi8EMNn4/2QAC7KTjoeHBwsjoxo2pAqgBiBtbcnQ0Ezjnjx5kq3lcibKZNQKQb2tLXUhIVy3bh01Gs0rZalUKqpUKkn0fvvtt9McUpFVegemTeO5Xr2yfEaFhtBQw/uUy1/5Xgs0zVwA4Bwzs9fMAvifAW8BEA2Ds7Z7AD6GwQPncRh8QR9Hql0WsjoKi1Hv2rWLu3btMv1+9uwZXxw7Rvr6ZvmS/vnnHyYlJXHatGmM9/Mzxd+9ezcBsEWLFnnWLSdGk5JB5CWj2Dt5Mv07duTjAwd44cIFRkREcMeOHTx9+jT379/PoKAgrlq1iuHh4dwxfjwThKA2G5lfocDX12B8gOGvr6/hfGjoK991luT1egnIk1FLeRQWo05dEul0OtasWZPdunWjv79/ptccOnSI9vb2XLBgwUthOp2Oo0eP5rZt20iSFy5c4JMnTzJMZ+PGjdy4cWOGYUdnzTLVGPRmNpqEhAT2rVzZJC9ZoWC/KlXYr18/CiE4Y8YMVqtWjQMHDiQAzpkzh9/Y2hpqM+mNpLCSUalaSEravGIx6nQ8e/aMz549I0lGRERQJpNRCMFOnTplGP/58+d0cXGhu7s77927l2XaiYmJLF26NO3s7BgVFfVSeGZVW51OR98SJUxGowEY9O67WZbAKRlEVhlFaoKCgtiuXTv27duXHTt25CJnZ5M8nUzGfz75hOfPn+e8efO4cuVK3rhxg/fv3+edO3f44sULHps9mwkAtUIUHYNIX6pmVnoXMSxG/QratGlDhULBadOmvRR28+ZNxsTE8H//+x9v3ryZrfQWL17MTp06UavVMiEhgdHR0aYwtVpNtVpt+h0eHs5jx44ZZG3aRJ2NDXUyGZPkcv46bBjlcjmbNGnCw4cPU6fTpZGTnTZ1VFQUIyMjuWPHDnp7exMA3d3dOWnSJGqCgqizsaEaoNrKyvThZ5ReSEgIfX19eXDGDH5tZcVH+/Zl61kUOiwldfE06q1bt3Lr1q0kSb1en2mb9Pbt26xWrRpbtWpFvV6fK1mTJk2iXC7nqlWrXgq7e/curaysWKJECSYlJRlOpipZ/Pz8aG1tzWbNmhEAN27cyKVLlzIuLo7kfxlE+owihbVr1xIAK1SoQADctGkTV6xYwfj4+P8ihYbSz9ubfy5dajqVuiaTwtChQ1m2bFmeP3+eX3zxBa9du5ar51EoKARt4rxiMep0pJREgYGBVCgUnDt3LufPn8/r16+nidelSxc6OzszJCQk17ICAwNZvXp1BgUFkSR3TpjAU926MfHECer1eo4ZM4aHDx/O9PqUTGfnzp2sWrUqAbBnz578/PPPXzLk6OhoNm/enE2bNuWQIUO4YMECVqlSha1bt+axY8cyzZhu3LjBHj168PLlyxmGX7p0iQDoa6yqdurUiR07dszN47AgEVkZ9Wvp9/vQoUMAgMOHD6NkyZI4d+4c9uzZg5IlS6JWrVqIi4vD2bNn8euvv+L27dto0aJFrmW1bdsWkZGREEIgevdudP7+eygBaPfvx4YRIzBq3DhERERg69at0Ol08PLywu3bt6HT6SCTyeDm5oYnT56gUaNGGDJkCPbs2YPKlSvj4sWLGNmgAd6Kjoa+TBm0c3eHY5cuCA8Ph0ajgVqtRqNGjXDr1i3IZFlPHCxRogTOnj2Lo0ePws3N7aUJMtWqVcPOnTvLine truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAPkAAAEICAYAAACd9lKYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOydd1hUR9vG79kGCIogGgtiQVTs7VWxAGo0aFSiqBiNhVi/mNiNLRpLxNcSe49dE4nttTc0YgErWNHYG0XEgkrfcn9/7LoBKYLsApL9Xde5YM/MmXnOnPOcmXlm5hlBEiZMmCi4SPJaABMmTBgXk5KbMFHAMSm5CRMFHJOSmzBRwDEpuQkTBRyTkpswUcApsEouhHgohPj8I6+lEKJSBmF9hRCncyadiY9FCBEqhHDPazk+JQqskud3hBDdhBBBQoh4IURAOuEthRAhQog3Qoj7QoiB74X3EEI8EkLECSF2CSFsDSDTeiHELzlMw6gfQZLVSQZkUZaP/tCnk9b3QoiLQogkIcT6dML7CyHuCiFihRCHhBClDZGvITAped7xEsACAP99P0AIIQfwPwArAVgD8AYwTwhRWxdeXRfWC8BnAOIBLMsdsTNGCCHLaxmMSASAXwCsfT9ACOEGwBeAJwBbAA8AbMlV6TKDZIE8ADwEMBrAVQCvAfwJwDxF+AAAd6FVtj0ASqcII4BKuv+L6cLfADgPYDqA07owAWA+gGe6PK4CqJFNOfsDCHjv3Gc6GQqlOHcBwNe6/30B/JEizBFAMoDCut/LACzLIL90ZQYwEIBSl04sgL26+OMA3APwFsANAJ1SpNUXQKAuvZcAdgBIBKDWpRGTgQwBAGbqyvM1gN0AbFOEdwQQCiBGF9f5vef6ue7/KQC2Atioky8UQANd2CYAGgAJOll+BGAOYDOAF7q0LwD4LJvP6xcA6987NxfA0hS/S+uen2Ne6wHJAq/k53UFbgvgJoDBurCWAJ4DqAfADMBiACdTXJtSyf10L5KlThnC8Y+SfwEgGEBRnfI4AyilC+sB4GoW5Eyj5LrzfwAYAkAKwEWnlGV1YbsBjH0vfiyA+lnILzOZ1wP45b34XXVlKIG2RRGXIn5fACoAPwCQAbDQnTv9ARkCdOVYQ1euOwBs1oVV1uXRGoBcp5x3AShSPNeUSp4IoJ2unGYCOPveO/B5it+DAOwFUEgXvz6AIrqwcQD2ZaH80lPyX5HiowqgjO4d8sxrPSBZ4Jvri0hGkHwJ7cOtozvfE8BakiEkkwCMB+AihCif8mIhhBSAF4DJJONIXgewIUUUJYDCAKoCECRvkowEAJJ/kKyVA9m3AJgMIAnAKQATST7RhVlBWwOm5LVOlg+RoczpQXKbrgw1JP8EcAdAwxRRIkguJqkimZClO9OyieR1knEAJgHopitvbwD7SfqTVEJbS1oAaJJBOqdJHiCphrb2rp1JnkpoW2aVSKpJBpN8o7vP/5Jsnw35U3JAJ38tIYQFtM+N0H5M8pyCruRPU/wfD61yANqa6dG7AJKx0Dbhyrx3fXFoa6gnKc6lvO4vAEsALAUQJYRYJYQoklOhhRBVoe1e9AagAFAdwI9CiC91UWIBvJ9PEWibrJmSXZmFEL2FEJeFEDFCiBhoa1+7FFGeZHDph3i/TOW6dN9/Nhpd3PefzTvef8bmmdgGNgE4DMBPCBEhhJits3/kCJLHAPwMbYvkEbQtiLcAwnKatiEo6EqeEREAyr37IYSwhPYLH/5evGhom6NlU5xzSBmB5CKS9aFVxMoAxhhAvhoAbpE8rKtBbwHYD6CtLjwUKWosIURFaLsdt7OSeCYyp1qSKIQoB+A3AN8DKEayKIDr0Dbzkd416fzOiPfLVAltF+r9ZyN0cd9/NlkhlSwklSSnkqwGbcugPbQf0hxDcilJJ5IloFV2GbRllef8W5X8DwA+Qog6QggzaA1Z50g+TBlJ1wTcCWCKEKKQEKIagD7vwoUQ/xFCNNLVBnH4x+j0QYQQUiGEObQvg0QIYZ6iVrkEwEk3jCaEEI7QvpBXdOG/A+gghGiu+0BNA7CT5Ftd2uvTG+bJgsxRACqmiG4JraJE6671gfYDlBlRAOyFEIoPxPtGCFFNCFFIJ/92XXlvBfClEKKVTsZR0HZZgj6QXkay6O9HCNFCCFFT1y14A+2HJavPS6Z7XlIAUt3zkunCzIUQNXTPygHAKgALSb76CJkNT14bBYx1IK3RZQp0xh3d78HQWo1fAtgHwD5FWErDW3FdeHrW9VbQWqdjoa2FfgdgpQvrCSA0E/n66vJJeaxPEd4N2prgXbNvFgBJivAeAB5Dq6jvW6ePARiQQb6ZyewE4DK0luddunMzdGX0HMA8ACcA9E9xD6ffS18BbavjJYDnGcgQgH+s62+gtZfYpQjvBK0l/7Uuv+rpPdd0nml5XTnKdL89dWUUA+1Iy9cAbunKLArAohRxJwA4mMnzmpLO85qiCyuqK9M4aLsPMwFI81oH3h1CJ6SJAoKuBr0CoBa1hqt8h27yz2aSq/Naln8DBXnywr8SksnQDouZMAHg39snN2HiX4OpuW7CRAHHVJObMFHAydU+uZ2dHcuXL5+bWZow8a8gODj4Ocni6YXlqpKXL18eFy9ezM0sTZj4VyCEeJRRmKm5bsJEAcek5CZMFHBMSm7CRAHHpOQmTBRwTEpuwkQB54NKLoRYK4R4JoS4nuKcrRDCXwhxR/fXxrhimjBh4mPJSk2+HoDHe+fGAThG0gnaFU/jDCyXCRMmDMQHlZzkSWiXDabEE/+4QdoA4CsDy2UiP3LmDDS+vsCZM3ktSf7lzBlg5sz8VUZZXJtdHsD1FL9j3gt/lcm1AwFcBHDRwcGBBQE3NzdaW1vTzc3to9PYPW4cL3p5kUFBGcbx8/Ojn5/fR+eRE5KTk5mcnKz/vWXoUMYBVAJMlEozlTszNm3axE2bNmX7Ojc3t48qbz8/Pw4dOjRL5ZhReWcl72bNmrFLmTKpymiulxc1Gg23bt1KX19frlu3LtvyZxUAF5mRDmYUQAMpecqjfv36RrvJ3CQuLo4RERGMiYnJ9rVPnz5lbycn/cugNjfPUGE+9sXeN3Eiz331VZp09+zZwz179mR67Y4dO7hjx44052cVLUolQAJUCUH6+vLy5cu0tbXN1sv7sfcUHR3N6OjoLMVNqazZ+SBnJNv7H7yUXLx4kf7+/pRKpanKSAlweblyfPHiBQHQ0tKSFhYWfPXqFWvVqkUfHx/OnDmT8fHxPHDgAK9fv85dY8d+8MOfEcZQ8lv4xy1vKWj9kf1rlDy7vHjxgr6+voyJiWFCQgJnFC6sfxk0Uinp65vudXFxcYyLi8tWXmfnz09T454+fZpFihRhxYoV6ebmxsuXL9Pd3Z0HDx4kST558oTLli3jo0eP6ObmRldXV+4ZP55rnZy4ecgQajQafuvsrE9XKZGQK1dy3bp1VCgU3LZtG0ly8+bNbN68OW/fvp2hfJkpjKFIqaxxcXGMjo7OUjlmtbyVSiWXL1/OWbNmEQB79OjBOnXq8L+enowXgskA4wEyKIhKpZLXrl3jpk2buGHDBoaFhbF9+/Z0d3dn+/bteenSJQJgaysrffnSwiLbim4MJZ8DYJzu/3EAZmclnYKi5Js2beKQIUM+2ATUaDQkydq1axOAvsZTnz5NWlhoFdzCgoFz5/LMmTM5kuns2bP8/vvveaN371S1Sfj339Pf35/W1tacPn06o6OjuXLlSgLgzz//TJJcsGABAfCXX35hTEwMV/frp3/h4gCuGziQ9vb2nFulCpPeKbpCweu//cbAwECGhYUxNjaWXbt2JQA+fvyYJLls2TJOmzaNSqUyR/dGZtzCSI+P+Thmxr6JE3nBy4vP9+7lwIED+csvv9De3p5yuZzlypXj8OHD6efnx6lTp7JP5cpcVbEizy9cmKW0jxw5wrZt23L8OwUHyEw+/BmRIyWH1v93JLRO78IA9IPWs+kxaH1wH0MK/2KZHQVFyT/UBAwKCmLZsmU5duxYkuShQ4e4YsUKqtXqlJFIX18mBQTQzs6OCoWCf//9d6p0stJ/jY+PZ7du3ejt7c2SJUsyYscOqs3NqZFKGS8Ex7m5MSoqKs11CQkJTEhIIEnev3+fvr6++hp4j4tLqg/FbBsbli1bltMsLFKdX1e5MuvWrcuaNWuyY8eO9Pb2Zvv27Tlw4EAuXLiQNjY2lEgkPHLkCG/fvs1Vq1Zxw+DBH9Uk/dhm/qZNmzh48OAs2QHSK++ULaM4gANq1mTp0qUZEhLCbt268fr163r5HB0daW9vz3379nH69OmcP3++Pp33+/sRERH8+uuv2a9fP1paWrKZVMokmUyr4HlRkxvqKChKnpyczJiYmFS1xcOHD7lz506S5K5du2hhYcExY8ZkKb2jR4/ym2++YWJiYqrzmb3YsbGxHD16NLdv305PT0/OmjWLb9++1QbqPiBXVq7kiRMnaGlpyT/++IPbt2//YG24Zs0auikUTBCCaomEGgsL/tymDZtKJFwGMAHQnjc35/xu3Th79mxu27aN69evp5OTE1u3bk0PDw/279+fMpmMxYsXp42NDTt06MDGOkVRAtRk80WOiYnJsg0kpbJmt0/esGFDOjo6snLlyoyLi+NBNzf9hy0Z4GS5nNWqVeOtW7dSXRsXF0dvb28WKVKEAFi9enXWqVNH/468e5bx8fGcMmUKDx8+TCsrK9rb2/PGjRvaD7HuueVJn9xQR0FR8vd58uQJ5XI5JRIJnz9/TpVKlUZhs4JaraaPjw/nzZtHMuP+6+7du1mpUiXWqFGDP/30k75bkJKpU6cSAP39/fndd9+xVatWLFOmTKYv+8uXL1mvXj1WqlSJjQHe6tuX20eN4phmzf7p5wPk4MG8sWaN/mUmta0XIQQbN25MUmuQsrOzY8+ePXnx4kVt7WZp+Y/xDsh2kzSrpPw4JicLine truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"for i in range(8):\n",
" plot_wall(place_holds_2d())\n",
" plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Different Size Walls\n",
"\n",
"What if the wall had a size other than 10 meters? I would expect that the number of holds goes up roughly linearly on the 1-D wall, and roughly quadratically on the 2-D wall. I can plot expected number of holds for different wall heights, and fit a quadratic polynomial to the data: "
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"\n",
"def fit(X, fn, key=len, repeat=1_000, degree=2) -> np.array:\n",
" \"\"\"Fit key(fn(x)) to a polynomial; plot; return polynomial coefficients.\"\"\"\n",
" Y = [monte_carlo(fn, x, key=key, repeat=repeat) for x in X]\n",
" coefs = np.polyfit(X, Y, 2)\n",
" poly = np.poly1d(coefs)\n",
" plt.plot(X, Y, 'o-', label=fn.__name__);\n",
" plt.plot(X, [poly(x) for x in X], '.:', label=poly_name(coefs))\n",
" plt.legend()\n",
" return coefs\n",
"\n",
"def poly_name(parms) -> str:\n",
" \"\"\"A str representing a polynomial.\"\"\"\n",
" degree = len(parms) - 1\n",
" return ' + '.join(term(coef, degree - i) for i, coef in enumerate(parms))\n",
"\n",
"def term(coef, d) -> str: \n",
" \"\"\"A str representing a term in a polynomial.\"\"\"\n",
" return f'{coef:.2f}' + ('' if d == 0 else 'x' if d == 1 else f'x^{d}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First 1-D walls—we see the best-fit quadratic is almost a straight line with slope 4.5, but has a slight upward bend."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fit(range(1, 31), place_holds);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now 2-D walls—we see a prominent quadratic shape:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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lEw9+J9j9ZlXGmjrK8E6/5X6evA/P9LzUzIrfN/ABn2RXPWuM/cDv8EvHzh/usF1111HvXr1ytzu448/5s4776RRo0Zlbpubm0ubNm3IyHBOp3XPPffw2WefATB16lTS0tL4+uuvad++PYsWLeLRRx8tGiLghhtuoEYN59lAly5dyMzMvNxDK9HBgwfJy8uja9euKKV48MEHS7yDtlu3btStW/eCOpRS1KpVCwCr1YrVakUpVeoxX66FCxcyePBg/P39ad68Oa1ateK33y783OPi4oiIiLhg+fbt2+nZ09keenZIh0OHDl1RTcI3jf1+C0/zNWasmJQDE3biHNvcOmXe5ag+4T75Vkid7nxstzqfb/7G+dxyBj69FqbcAivehqm3O59vX+Rcf/qYc/sM59gvnHTf/8RZWVnMnz//giEAwNlMkZCQQJcuXYpCMigoiE8++YShQ4cyc+ZMTpw4waOPPgo4R3icOXMmJpPzUkjr1q1Zv349TZo0ueC9J02aRJ8+fdx2HGeP5ewolADh4eFlTtBxfh12u53Y2FgaNWrETTfdROfOnUs95iup9dz/LuWp9VwxMTHMmzcPgN9++419+/a5/Zel8A1NT6bSyZCBHSM2bcCKiXWOKLdOmXc5vOeCakEu2G2ABrvreSV45plneO+99zAajRes279/P6GhoezevZsbb7yR6OhoWrZsyU033cTs2bMZMWJEUXv1pfjqq6/YsGEDP/30U4nrO3fuTGFhIadOneL48ePExsYC8N5775Xap12X0L5e2giQK1euZNKkSfz6669Fy4xGI5s2bSInJ4cBAwaQlpZG+/bty3XMI0aMYPXq1QBkZ2cX1T1w4EBefvnlK6r1fKNGjWLkyJHExsYSHR1NXFxc0S9VIcrrcF4Bq4mlh+VDGnGCLoZ01jmiSNGRhLlxyrzLUa5vs1Lqb8AjgAa2Ag8BIcBMoB6QAjygtbYopfyBaUA8cAy4W2u994orfei7/z02mos/96sBd34OU/uC3QJGP+fzs4Pf16xffPvaja+4nLM2bNjA4MGDATh69ChLlizBZDLRv39/QkNDAWjRogU9evQgNTWVli1b4nA4SE9PJzAwkOPHjxc7Wy7Ljz/+yNtvv81PP/100RmQzt7dumrVKqZMmcKUKVNK3M5utxMfHw9A3759eeKJJ4qdvWZmZhYdw/m2bNnCI488wtKlS0scMjg4OJgePXrw/fff0759+3Id87hx44oeR0RElHpzV3h4eLERLUurtSR16tRh8uTJgPMXRfPmzS86rr4QJcld9xVv/HwapZpw2NCYTFtDUuzOeRbcNeT4lSizWUYpFQY8DSRordsDRmAw8B7woda6NXACGOZ6yTDghNa6FfCLine truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fit(range(1, 26), place_holds_2d, repeat=100);"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 4
}