Add files via upload

This commit is contained in:
Peter Norvig authored and GitHub committed 2025-12-09 12:09:51 -08:00
1 parent d7ff868678
commit 2b4af2dff8
1 file changed
+4 -4
+4 -4
View File
@@ -1964,15 +1964,15 @@
},
{
"cell_type": "code",
"execution_count": 65,
"execution_count": 67,
"id": "80433df6-4c37-4ed8-86cb-234fb0f9c812",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABI8AAAMtCAYAAAAWhlFpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAACkFUlEQVR4nOz9f3hc9X3n/b80Y1vYMlacENsrHXDpLY09lDRJjUPAxZYdwC0YwpWlJBj8la9MsLYoJq6hSUn3uppkUyiEhezama7FzhUEIbeb+2Zp04RQuIuqYhIH1403OAJhdjH4CByzjSNHwkhGc75/fBidmdGZmTOj+T3Px3Wda86c+czMsS2PZt7zeb8+TY7jOAIAAAAAAAA8BCp9AgAAAAAAAKheFI8AAAAAAACQEcUjAAAAAAAAZETxCAAAAAAAABlRPAIAAAAAAEBGFI8AAAAAAACQEcUjAAAAAAAAZDSn0idQ7eLxuN544w2dffbZampqqvTpAAAAAAAAFIXjOPrNb36jtrY2BQKZ5xdRPMrhjTfe0Lnnnlvp0wAAAAAAACiJY8eOybKsjLdTPMrh7LPPlmT+IhctWlThswEAAAAAACiOU6dO6dxzz52ufWRC8SiHRKvaokWLKB4BAAAAAIC6kyumh8BsAAAAAAAAZETxCAAAAAAAABlRPAIAAAAAAEBGFI8AAAAAAACQEcUjAAAAAAAAZETxCAAAAAAAABlRPAIAAAAAAEBGFI8AAAAAAACQEcUjAAAAAAAAZETxCAAAAAAAABlRPAIAAAAAAEBGFI8AAAAAAACQEcUjAAAAAAAAZETxCAAAAAAAABlRPAIAAAAAAEBGFI8AAAAAAACQEcUjAAAAAAAAZJR38eif//mfdc0116itrU1NTU3627/925TbHcfRV77yFbW1tWn+/Pnq6urSL37xi5QxExMT2r59u8455xy1tLTo2muvlW3bKWNOnjypLVu2qLW1Va2trdqyZYt+/etfp4x5/fXXdc0116ilpUXnnHOObrvtNk1OTqaMeeGFF7Ru3TrNnz9f7e3t+trXvibHcfL9YwMAAAAAADSkvItH4+Pj+vCHP6zdu3d73n7vvffq/vvv1+7du3XgwAEtW7ZMV1xxhX7zm99Mj9mxY4cef/xx7d27V/v27dPY2Jg2bdqkqamp6TGbN2/WoUOH9OSTT+rJJ5/UoUOHtGXLlunbp6amdPXVV2t8fFz79u3T3r179dhjj+n222+fHnPq1CldccUVamtr04EDB7Rr1y7dd999uv/++/P9YwMAAAAAADSkJmcW03Campr0+OOP67rrrpNkZh21tbVpx44d+tKXviTJzDJaunSp7rnnHvX09Gh0dFQf/OAH9cgjj+jTn/60JOmNN97QueeeqyeeeEIbN27Uiy++qAsuuED79+/XxRdfLEnav3+/LrnkEr300ktasWKFfvSjH2nTpk06duyY2traJEl79+7V1q1bdeLECS1atEh//dd/rTvvvFO//OUv1dzcLEn6q7/6K+3atUu2baupqSnnn/HUqVNqbW3V6OioFi1aVOhfFQAAAAAAQFXxW/MoaubRq6++quPHj+vKK6+cPtbc3Kx169bpxz/+sSTp4MGDOnPmTMqYtrY2XXjhhdNjfvKTn6i1tXW6cCRJH//4x9Xa2poy5sILL5wuHEnSxo0bNTExoYMHD06PWbdu3XThKDHmjTfe0NGjRz3/DBMTEzp16lTKBgAAAAAA0KiKWjw6fvy4JGnp0qUpx5cuXTp92/HjxzVv3jwtXrw465glS5bMePwlS5akjEl/nsWLF2vevHlZxySuJ8aku/vuu6dzllpbW3Xuuefm/oMDAAAAAADUqZKstpbeDuY4Ts4WsfQxXuOLMSbRpZfpfO68806Njo5Ob8eOHct63gAAAAAAAPWsqMWjZcuWSZo5q+fEiRPTM36WLVumyclJnTx5MuuYX/7ylzMe/6233koZk/48J0+e1JkzZ7KOOXHihKSZs6MSmpubtWjRopQNAAAAAACgURW1eHT++edr2bJlevrpp6ePTU5OanBwUJdeeqkkadWqVZo7d27KmDfffFOHDx+eHnPJJZdodHRUzz///PSYn/70pxodHU0Zc/jwYb355pvTY5566ik1Nzdr1apV02P++Z//WZOTkylj2tra9Fu/9VvF/KMDAAAAAADUpbyLR2NjYzp06JAOHTokyYRkHzp0SK+//rqampq0Y8cO3XXXXXr88cd1+PBhbd26VQsWLNDmzZslSa2trYpEIrr99tv1j//4j/rZz36mm2++WR/60Id0+eWXS5LC4bD+4A/+QLfccov279+v/fv365ZbbtGmTZu0YsUKSdKVV16pCy64QFu2bNHPfvYz/eM//qPuuOMO3XLLLdOzhTZv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 truncated
"image/png": "iVBORw0KGgoAAAANSUhEUgAABI8AAARhCAYAAACru6XwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC8rUlEQVR4nOz9f3Tcd30n+r+k8Y/YMlbTpklqD3jZKylRGi60IcuPLLFjfriXBNrtZWk3IV/lVI19b9yELKSwdO+9pb1sWAIXeo+96lpZHSIge7Ps5qR3b/mxYYvWJdBANiUtwYlw9mKSUQjh3BoZKY7tSPP94400GmmkGUmjmdHM43HO58xnPvOW9FZsT2Ze834/X235fD4fAAAAAFBCe70nAAAAAEDjUjwCAAAAYFGKRwAAAAAsSvEIAAAAgEUpHgEAAACwKMUjAAAAABaleAQAAADAojbUewKNbnp6Op599tl42cteFm1tbfWeDgAAAEBV5PP5+OlPfxo7duyI9vbF1xcpHpXx7LPPxstf/vJ6TwMAAABgTTzzzDORzWYXfVzxqIyXvexlEZH+Q27fvr3OswEAAACojlOnTsXLX/7y2drHYhSPypjZqrZ9+3bFIwAAAKDplIvpEZgNAAAAwKIUjwAAAABYlOIRAAAAAItSPAIAAABgUYpHAAAAACxK8QgAAACARSkeAQAAALAoxSMAAAAAFqV4BAAAAMCiFI8AAAAAWJTiEQAAAACLUjwCAAAAYFGKRwAAAAAsSvEIAAAAgEUpHgEAAACwKMUjAAAAABaleAQAAADAohSPAAAAAFiU4hEAAAAAi1I8AgAAAGBRikcAAAAALErxCAAAAIBFKR4BAAAAsCjFIwAAAAAWpXgEAAAAwKIUjwAAAABY1LKLR3/5l38Z73jHO2LHjh3R1tYWf/Znf1b0eD6fjw9/+MOxY8eO2LJlS+zZsye++93vFo05c+ZM3HrrrXHBBRdER0dHvPOd74xcLlc05uTJk3HjjTdGZ2dndHZ2xo033hg/+clPisY8/fTT8Y53vCM6OjriggsuiNtuuy3Onj1bNOY73/lO7N69O7Zs2RI7d+6MP/7jP458Pr/cXxsAAACgJS27eDQ5ORmvfvWr4/DhwyUfv+uuu+KTn/xkHD58OB555JG4+OKL461vfWv89Kc/nR1z++23xwMPPBD33XdfPPTQQzExMRHXXXddTE1NzY65/vrr47HHHosvf/nL8eUvfzkee+yxuPHGG2cfn5qaimuvvTYmJyfjoYceivvuuy/uv//+eP/73z875tSpU/HWt741duzYEY888kgcOnQoPvGJT8QnP/nJ5f7aAAAAAC2pLb+KZThtbW3xwAMPxG/8xm9ERFp1tGPHjrj99tvjgx/8YESkVUYXXXRRfOxjH4sDBw7E+Ph4/OIv/mJ89rOfjd/6rd+KiIhnn302Xv7yl8cXv/jF2LdvXzzxxBNx2WWXxcMPPxyve93rIiLi4Ycfjje84Q3x5JNPxiWXXBJf+tKX4rrrrotnnnkmduzYERER9913X9x0003x/PPPx/bt2+NP//RP40Mf+lD86Ec/is2bN0dExL/8l/8yDh06FLlcLtra2sr+jqdOnYrOzs4YHx+P7du3r/Q/FQAAAEBDqbTmUdXMo+9///vx3HPPxdve9rbZa5s3b47du3fHN77xjYiIePTRR+PcuXNFY3bs2BGXX3757Ji/+qu/is7OztnCUUTE61//+ujs7Cwac/nll88WjiIi9u3bF2fOnIlHH310dszu3btnC0czY5599tk4ceJEyd/hzJkzcerUqaIDAAAAoFVVtXj03HPPRUTERRddVHT9oosumn3sueeei02bNsX555+/5JgLL7xwwfe/8MILi8bM/znnn39+bNq0ackxM/dnxsz30Y9+dDZnqbOzM17+8peX/8UBAAAAmtSadFubvx0sn8+X3SI2f0yp8dUYM7NLb7H5fOhDH4rx8fHZ45lnnlly3gAAAADNrKrFo4svvjgiFq7qef7552dX/Fx88cVx9uzZOHny5JJjfvSjHy34/j/+8Y+Lxsz/OSdPnoxz584tOeb555+PiIWro2Zs3rw5tm/fXnQAAAAAtKqqFo9e+cpXxsUXXxxf+cpXZq+dPXs2jh49Gm984xsjIuKKK66IjRs3Fo354Q9/GI8//vjsmDe84Q0xPj4e3/rWt2bHfPOb34zx8fGiMY8//nj88Ic/nB3z4IMPxubNm+OKK66YHfOXf/mXcfbs2aIxO3bsiL/39/5eNX91AAAAgKa07OLRxMREPPbYY/HYY49FRArJfuyxx+Lpp5+Otra2uP322+POO++MBx54IB5//PG46aabYuvWrXH99ddHRERnZ2f09/fH+9///viLv/iL+Pa3vx3vec97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 truncated
"text/plain": [
"<Figure size 1400x1000 with 1 Axes>"
"<Figure size 1400x1400 with 1 Axes>"
]
},
"metadata": {},
@@ -1983,7 +1983,7 @@
"_, corners = biggest_rectangle(red_tiles)\n",
"((x1, y1), (x2, y2)) = corners\n",
"\n",
"plt.figure(figsize=(14, 10))\n",
"plt.figure(figsize=(14, 14))\n",
"plt.plot(*T(red_tiles), 'r.-')\n",
"plt.plot([x1, x1, x2, x2, x1], [y1, y2, y2, y1, y1], 'b:');"
]