diff --git a/ipynb/Advent-2024.ipynb b/ipynb/Advent-2024.ipynb
index 634e13b..ed096a6 100644
--- a/ipynb/Advent-2024.ipynb
+++ b/ipynb/Advent-2024.ipynb
@@ -18,7 +18,7 @@
},
{
"cell_type": "code",
- "execution_count": 1440,
+ "execution_count": 668,
"id": "ed82ed5b-a42d-468b-8f6e-288d3c2de20b",
"metadata": {},
"outputs": [
@@ -64,7 +64,7 @@
},
{
"cell_type": "code",
- "execution_count": 907,
+ "execution_count": 671,
"id": "22e5d621-a152-4712-866f-f8b962b5dd14",
"metadata": {},
"outputs": [
@@ -117,7 +117,7 @@
},
{
"cell_type": "code",
- "execution_count": 909,
+ "execution_count": 673,
"id": "8d6bc9f5-5fa1-4dad-bd43-d957833d8ea9",
"metadata": {},
"outputs": [],
@@ -129,7 +129,7 @@
},
{
"cell_type": "code",
- "execution_count": 910,
+ "execution_count": 674,
"id": "6ada5e5b-2fb7-4198-a5bb-7b2af4b9270a",
"metadata": {},
"outputs": [
@@ -139,7 +139,7 @@
"Puzzle 1.1: .000 seconds, answer 1830467 ok"
]
},
- "execution_count": 910,
+ "execution_count": 674,
"metadata": {},
"output_type": "execute_result"
}
@@ -161,7 +161,7 @@
},
{
"cell_type": "code",
- "execution_count": 912,
+ "execution_count": 676,
"id": "0131e096-38d1-4c13-9e9c-b0d09839a5cf",
"metadata": {},
"outputs": [],
@@ -174,7 +174,7 @@
},
{
"cell_type": "code",
- "execution_count": 913,
+ "execution_count": 677,
"id": "6f6c298a-53a1-4d80-8747-7dd713d4d4f0",
"metadata": {},
"outputs": [
@@ -184,7 +184,7 @@
"Puzzle 1.2: .000 seconds, answer 26674158 ok"
]
},
- "execution_count": 913,
+ "execution_count": 677,
"metadata": {},
"output_type": "execute_result"
}
@@ -206,7 +206,7 @@
},
{
"cell_type": "code",
- "execution_count": 915,
+ "execution_count": 679,
"id": "10e1ab83-a6ec-4143-ad9a-eaae220adcde",
"metadata": {},
"outputs": [
@@ -257,7 +257,7 @@
},
{
"cell_type": "code",
- "execution_count": 1408,
+ "execution_count": 681,
"id": "0f6b6744-e93d-47cf-accd-daab9f3650d0",
"metadata": {},
"outputs": [],
@@ -282,7 +282,7 @@
},
{
"cell_type": "code",
- "execution_count": 1411,
+ "execution_count": 683,
"id": "c0cc052b-e9ef-4757-a860-4cd34dd00fb8",
"metadata": {},
"outputs": [],
@@ -301,7 +301,7 @@
},
{
"cell_type": "code",
- "execution_count": 920,
+ "execution_count": 685,
"id": "e662bf10-4d6a-40f1-95ce-dfc39f5b3fc2",
"metadata": {},
"outputs": [
@@ -311,7 +311,7 @@
"Puzzle 2.1: .000 seconds, answer 257 ok"
]
},
- "execution_count": 920,
+ "execution_count": 685,
"metadata": {},
"output_type": "execute_result"
}
@@ -335,7 +335,7 @@
},
{
"cell_type": "code",
- "execution_count": 1415,
+ "execution_count": 687,
"id": "67ba1d53-95b7-4811-b225-2ff15d6bdc5c",
"metadata": {},
"outputs": [],
@@ -353,17 +353,17 @@
},
{
"cell_type": "code",
- "execution_count": 1417,
+ "execution_count": 688,
"id": "d1b9ffb5-af7a-465f-a063-c31df2d0605c",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "Puzzle 2.2: .006 seconds, answer 328 ok"
+ "Puzzle 2.2: .002 seconds, answer 328 ok"
]
},
- "execution_count": 1417,
+ "execution_count": 688,
"metadata": {},
"output_type": "execute_result"
}
@@ -385,7 +385,7 @@
},
{
"cell_type": "code",
- "execution_count": 1420,
+ "execution_count": 690,
"id": "78080200-0f9f-4492-9bee-c936737ee96f",
"metadata": {},
"outputs": [
@@ -424,7 +424,7 @@
},
{
"cell_type": "code",
- "execution_count": 927,
+ "execution_count": 692,
"id": "bf6366b1-6952-47d8-8b3c-09f8d05ec093",
"metadata": {},
"outputs": [],
@@ -438,7 +438,7 @@
},
{
"cell_type": "code",
- "execution_count": 928,
+ "execution_count": 693,
"id": "2032c903-5f23-4c16-ba68-410b6c1750e1",
"metadata": {},
"outputs": [
@@ -448,7 +448,7 @@
"Puzzle 3.1: .001 seconds, answer 156388521 ok"
]
},
- "execution_count": 928,
+ "execution_count": 693,
"metadata": {},
"output_type": "execute_result"
}
@@ -468,7 +468,7 @@
},
{
"cell_type": "code",
- "execution_count": 1424,
+ "execution_count": 695,
"id": "85844f51-1396-4299-ba5b-c61064ee02b6",
"metadata": {},
"outputs": [],
@@ -488,7 +488,7 @@
},
{
"cell_type": "code",
- "execution_count": 931,
+ "execution_count": 697,
"id": "4525d01a-bac0-41c2-92b8-baf0fd395e88",
"metadata": {},
"outputs": [],
@@ -500,7 +500,7 @@
},
{
"cell_type": "code",
- "execution_count": 932,
+ "execution_count": 698,
"id": "ce40f258-ca76-48c3-9965-27a6979a4243",
"metadata": {},
"outputs": [
@@ -510,7 +510,7 @@
"Puzzle 3.2: .000 seconds, answer 75920122 ok"
]
},
- "execution_count": 932,
+ "execution_count": 698,
"metadata": {},
"output_type": "execute_result"
}
@@ -532,7 +532,7 @@
},
{
"cell_type": "code",
- "execution_count": 934,
+ "execution_count": 700,
"id": "a0d903b9-018e-4861-9314-cafed59055fd",
"metadata": {},
"outputs": [
@@ -571,7 +571,7 @@
},
{
"cell_type": "code",
- "execution_count": 1443,
+ "execution_count": 702,
"id": "72d48abb-7a82-452f-b91d-838b3836a90f",
"metadata": {},
"outputs": [],
@@ -591,17 +591,17 @@
},
{
"cell_type": "code",
- "execution_count": 1445,
+ "execution_count": 703,
"id": "6175362b-d8b4-45d1-b70c-d8575a0fe188",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "Puzzle 4.1: .041 seconds, answer 2401 ok"
+ "Puzzle 4.1: .022 seconds, answer 2401 ok"
]
},
- "execution_count": 1445,
+ "execution_count": 703,
"metadata": {},
"output_type": "execute_result"
}
@@ -629,7 +629,7 @@
},
{
"cell_type": "code",
- "execution_count": 1451,
+ "execution_count": 705,
"id": "3d8a051f-cf7b-4e8c-b0fb-78c3f089989d",
"metadata": {},
"outputs": [],
@@ -647,17 +647,17 @@
},
{
"cell_type": "code",
- "execution_count": 1453,
+ "execution_count": 706,
"id": "64cde1d9-f58c-4633-b5da-87908a02f76d",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "Puzzle 4.2: .029 seconds, answer 1822 ok"
+ "Puzzle 4.2: .016 seconds, answer 1822 ok"
]
},
- "execution_count": 1453,
+ "execution_count": 706,
"metadata": {},
"output_type": "execute_result"
}
@@ -683,7 +683,7 @@
},
{
"cell_type": "code",
- "execution_count": 942,
+ "execution_count": 708,
"id": "b77a5a1f-a43b-4ce8-a60c-94d69a595505",
"metadata": {},
"outputs": [
@@ -746,7 +746,7 @@
},
{
"cell_type": "code",
- "execution_count": 943,
+ "execution_count": 710,
"id": "4c85a23e-686a-4129-a14c-ff6f6a88b9ac",
"metadata": {},
"outputs": [],
@@ -767,7 +767,7 @@
},
{
"cell_type": "code",
- "execution_count": 1462,
+ "execution_count": 712,
"id": "78898d37-46ff-4367-9d89-b2a107a90aa1",
"metadata": {},
"outputs": [],
@@ -785,7 +785,7 @@
},
{
"cell_type": "code",
- "execution_count": 1464,
+ "execution_count": 713,
"id": "b1c87359-1d2d-4a90-8305-9d152ce5d547",
"metadata": {},
"outputs": [
@@ -795,7 +795,7 @@
"Puzzle 5.1: .001 seconds, answer 5762 ok"
]
},
- "execution_count": 1464,
+ "execution_count": 713,
"metadata": {},
"output_type": "execute_result"
}
@@ -818,7 +818,7 @@
},
{
"cell_type": "code",
- "execution_count": 948,
+ "execution_count": 715,
"id": "d8718c3e-0b3b-49ce-8cca-abd82aa788d7",
"metadata": {},
"outputs": [
@@ -828,7 +828,7 @@
"23"
]
},
- "execution_count": 948,
+ "execution_count": 715,
"metadata": {},
"output_type": "execute_result"
}
@@ -850,7 +850,7 @@
},
{
"cell_type": "code",
- "execution_count": 1499,
+ "execution_count": 717,
"id": "7222dc1c-067f-4bb5-84e1-3c2fc72fd53a",
"metadata": {},
"outputs": [],
@@ -867,17 +867,17 @@
},
{
"cell_type": "code",
- "execution_count": 1501,
+ "execution_count": 718,
"id": "494cda6e-6b07-4054-9b03-45f61bd4f973",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "Puzzle 5.2: .002 seconds, answer 4130 ok"
+ "Puzzle 5.2: .001 seconds, answer 4130 ok"
]
},
- "execution_count": 1501,
+ "execution_count": 718,
"metadata": {},
"output_type": "execute_result"
}
@@ -907,7 +907,7 @@
},
{
"cell_type": "code",
- "execution_count": 954,
+ "execution_count": 721,
"id": "6ec71cf8-c43d-457e-8e14-0e9eb99b956a",
"metadata": {},
"outputs": [
@@ -949,7 +949,7 @@
},
{
"cell_type": "code",
- "execution_count": 956,
+ "execution_count": 723,
"id": "95f0b409-a6d6-47bc-8ce5-1c2df80f2b18",
"metadata": {},
"outputs": [],
@@ -967,17 +967,17 @@
},
{
"cell_type": "code",
- "execution_count": 957,
+ "execution_count": 724,
"id": "f4be3d1f-7f24-4d55-8221-df0026178e1e",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "Puzzle 6.1: .001 seconds, answer 5329 ok"
+ "Puzzle 6.1: .002 seconds, answer 5329 ok"
]
},
- "execution_count": 957,
+ "execution_count": 724,
"metadata": {},
"output_type": "execute_result"
}
@@ -1008,7 +1008,7 @@
},
{
"cell_type": "code",
- "execution_count": 1509,
+ "execution_count": 726,
"id": "1718fecb-aa3e-4162-9948-1c06d4ec5e8a",
"metadata": {},
"outputs": [],
@@ -1038,17 +1038,17 @@
},
{
"cell_type": "code",
- "execution_count": 1511,
+ "execution_count": 727,
"id": "36196264-eb33-4fc0-95d5-06c985105ebf",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "Puzzle 6.2: 1.962 seconds, answer 2162 ok"
+ "Puzzle 6.2: 1.976 seconds, answer 2162 ok"
]
},
- "execution_count": 1511,
+ "execution_count": 727,
"metadata": {},
"output_type": "execute_result"
}
@@ -1080,7 +1080,7 @@
},
{
"cell_type": "code",
- "execution_count": 963,
+ "execution_count": 730,
"id": "c1c6cee8-122c-43c9-8c7d-ed8980ea2b76",
"metadata": {},
"outputs": [
@@ -1141,7 +1141,7 @@
},
{
"cell_type": "code",
- "execution_count": 966,
+ "execution_count": 733,
"id": "6fa3907c-0e1a-4d4a-9fc3-f809b9325674",
"metadata": {},
"outputs": [
@@ -1151,7 +1151,7 @@
"13"
]
},
- "execution_count": 966,
+ "execution_count": 733,
"metadata": {},
"output_type": "execute_result"
}
@@ -1165,12 +1165,14 @@
"id": "e0d9b0b2-fe1e-434e-b84e-c044da3d3673",
"metadata": {},
"source": [
- "No problem! With 13 numbers on a line there are 211 = 2048 equations; a small number. I'll define `can_be_calibrated` to keep a set of `results`, updating the set for each new number and each possible operator. Although the instructions were a bit vague, it appears that when they talk about \"numbers\" in the equations they mean \"positive integers\". That means that neither addition nor multiplication can cause a number to decrease, so once a result exceeds the target, we'll drop it."
+ "No problem! With 13 numbers on a line there are 211 = 2048 equations; a small number. I'll define `can_be_calibrated` to try all possible operator combinations. It goes left-to-right, one number at a time, keeping a set of partial `results` which is updated for each new number in the equation. \n",
+ "\n",
+ "Although the instructions were a bit vague, it appears that when they say \"numbers\" they mean \"positive integers\". Therefore, neither addition nor multiplication can cause a partal result to decrease, so once a partial result exceeds the target, we can drop it."
]
},
{
"cell_type": "code",
- "execution_count": 968,
+ "execution_count": 735,
"id": "5dfe0edf-cf29-4623-bb2c-6180f832f4d7",
"metadata": {},
"outputs": [],
@@ -1186,7 +1188,7 @@
},
{
"cell_type": "code",
- "execution_count": 969,
+ "execution_count": 736,
"id": "3085596d-f5ec-4ba8-b05a-cf70cf276a0c",
"metadata": {},
"outputs": [
@@ -1196,7 +1198,7 @@
"Puzzle 7.1: .014 seconds, answer 1985268524462 ok"
]
},
- "execution_count": 969,
+ "execution_count": 736,
"metadata": {},
"output_type": "execute_result"
}
@@ -1213,12 +1215,12 @@
"source": [
"### Part 2: What is the total calibration result of possibly true equations, allowing concatenation?\n",
"\n",
- "In Part 2, we add a third operator: concatentation. The equation \"`192: 17 8 14`\" can be balanced by concatenated 17 and 8 to get 178, and then adding 14: \"`192 = ((17 || 8) + 14)`\". With three operators, the equation with 11 operators now has 311 = 177,147 possibilities, almost 100 times more than Part 1, so this will take a few seconds:"
+ "In Part 2, we add a third operator: concatentation. The equation \"`192: 17 8 14`\" can be balanced by concatenated 17 and 8 to get 178, and then adding 14: \"`192 = ((17 || 8) + 14)`\". With three operators, the equation with 11 operators now has 311 = 177,147 possibilities, almost 100 times more than Part 1, so this will take longer:"
]
},
{
"cell_type": "code",
- "execution_count": 971,
+ "execution_count": 738,
"id": "393a50cf-f136-446a-a97e-c501669ce89f",
"metadata": {},
"outputs": [],
@@ -1228,17 +1230,17 @@
},
{
"cell_type": "code",
- "execution_count": 972,
+ "execution_count": 739,
"id": "f8e75ea3-e8ba-4b33-8efe-8bf74357e35d",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "Puzzle 7.2: .778 seconds, answer 150077710195188 ok"
+ "Puzzle 7.2: .799 seconds, answer 150077710195188 ok"
]
},
- "execution_count": 972,
+ "execution_count": 739,
"metadata": {},
"output_type": "execute_result"
}
@@ -1253,20 +1255,23 @@
"id": "128b4857-ed3e-49f5-97f5-9d9afd46408d",
"metadata": {},
"source": [
- "That was easy, but it is the second-slowest runtime so far. I can make it a wee bit faster:"
+ "That was easy, but it is the second-slowest runtime so far. I can make it a little faster by implementing the concatenation operator without any string operations:"
]
},
{
"cell_type": "code",
- "execution_count": 974,
+ "execution_count": 741,
"id": "6fe6adad-a3a6-49b8-b49e-6098b27e3a44",
"metadata": {},
"outputs": [],
"source": [
- "operators3 = (operator.add, operator.mul, lambda x, y: x * 10 ** num_digits(y) + y)\n",
+ "operators3 = (operator.add, operator.mul, lambda x, y: (x * 10 ** num_digits(y)) + y)\n",
"\n",
"def num_digits(n: int) -> int:\n",
" \"\"\"The number of digits in a positive integer.\"\"\"\n",
+ " if n < 10: return 1 ## Three special cases cover most calls\n",
+ " elif n < 100: return 2\n",
+ " elif n < 1000: return 3\n",
" result = 1\n",
" while n >= 10:\n",
" result += 1\n",
@@ -1276,17 +1281,17 @@
},
{
"cell_type": "code",
- "execution_count": 975,
+ "execution_count": 742,
"id": "ffb673f1-af9d-4d15-8f8d-92e29489dd78",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "Puzzle 7.2: .635 seconds, answer 150077710195188 ok"
+ "Puzzle 7.2: .593 seconds, answer 150077710195188 ok"
]
},
- "execution_count": 975,
+ "execution_count": 742,
"metadata": {},
"output_type": "execute_result"
}
@@ -1308,7 +1313,7 @@
},
{
"cell_type": "code",
- "execution_count": 977,
+ "execution_count": 744,
"id": "cf6361a7-e3bc-42ec-ae16-f9eec166055e",
"metadata": {},
"outputs": [
@@ -1349,7 +1354,7 @@
},
{
"cell_type": "code",
- "execution_count": 979,
+ "execution_count": 746,
"id": "22180ce8-5d03-4aee-8c73-62f2afbddf71",
"metadata": {},
"outputs": [],
@@ -1370,7 +1375,7 @@
},
{
"cell_type": "code",
- "execution_count": 980,
+ "execution_count": 747,
"id": "dd173ce9-cbbb-4282-b43f-c7cff662bd90",
"metadata": {},
"outputs": [
@@ -1380,7 +1385,7 @@
"Puzzle 8.1: .003 seconds, answer 220 ok"
]
},
- "execution_count": 980,
+ "execution_count": 747,
"metadata": {},
"output_type": "execute_result"
}
@@ -1397,14 +1402,14 @@
"source": [
"### Part 2: How many unique locations within the bounds of the map contain an updated antinode?\n",
"\n",
- "For Part 2, the updated definition of antinodes means that they can now occur at *any* point that is exactly on line with two antennas of the same frequency, regardless of distance. So if the two antennas are *A* and *B* then the antinodal points can be found by starting at *A* and going step by step in the direction of the vector *A* - *B* and also in the direction *B* - *A*, going as far as you can while staying on the grid. The `Grid.follow_line` method facilitates that.\n",
+ "For Part 2, the updated definition of **antinodes** means that they can now occur at *any* point that is exactly on line with two antennas of the same frequency, regardless of distance. So if the two antennas are *A* and *B* then the antinodal points can be found by starting at *A* and going step by step in the direction of the vector *A* - *B* and also in the direction *B* - *A*, going as far as you can while staying on the grid. The `Grid.follow_line` method facilitates that.\n",
"\n",
"I'll parametrize `updated_antinodes` so it can handle both parts:"
]
},
{
"cell_type": "code",
- "execution_count": 982,
+ "execution_count": 749,
"id": "d30f8ce9-f186-46a0-a2e7-f74eceae6905",
"metadata": {},
"outputs": [],
@@ -1425,7 +1430,7 @@
},
{
"cell_type": "code",
- "execution_count": 983,
+ "execution_count": 750,
"id": "6bf85b57-8b8f-4196-9903-6d5fe082f404",
"metadata": {},
"outputs": [
@@ -1435,7 +1440,7 @@
"Puzzle 8.1: .003 seconds, answer 220 ok"
]
},
- "execution_count": 983,
+ "execution_count": 750,
"metadata": {},
"output_type": "execute_result"
}
@@ -1447,7 +1452,7 @@
},
{
"cell_type": "code",
- "execution_count": 984,
+ "execution_count": 751,
"id": "f232952c-5fc6-4696-a8b1-d0b54137ac02",
"metadata": {},
"outputs": [
@@ -1457,7 +1462,7 @@
"Puzzle 8.2: .003 seconds, answer 813 ok"
]
},
- "execution_count": 984,
+ "execution_count": 751,
"metadata": {},
"output_type": "execute_result"
}
@@ -1472,7 +1477,7 @@
"id": "9696a986-b6a2-4530-b55b-9db959ef7485",
"metadata": {},
"source": [
- "I got both of these right the first time (except for some simple typos: a mismatched paren and typing `grid` when I meant the grid called `antennas`)."
+ "I got both of these right the first time (except for some simple typos: a misplaced paren and typing `grid` when I meant the grid called `antennas`)."
]
},
{
@@ -1487,7 +1492,7 @@
},
{
"cell_type": "code",
- "execution_count": 987,
+ "execution_count": 754,
"id": "0e944f9e-5c16-440c-b12e-178058a87048",
"metadata": {},
"outputs": [
@@ -1528,7 +1533,7 @@
},
{
"cell_type": "code",
- "execution_count": 989,
+ "execution_count": 756,
"id": "76e8454d-a2f3-4b6b-92df-182116cf46e0",
"metadata": {},
"outputs": [],
@@ -1560,7 +1565,7 @@
},
{
"cell_type": "code",
- "execution_count": 990,
+ "execution_count": 757,
"id": "2aa7e2b9-844e-49ed-b41b-4a4cecff86b7",
"metadata": {},
"outputs": [
@@ -1570,7 +1575,7 @@
"Puzzle 9.1: .020 seconds, answer 6332189866718 ok"
]
},
- "execution_count": 990,
+ "execution_count": 757,
"metadata": {},
"output_type": "execute_result"
}
@@ -1598,7 +1603,7 @@
},
{
"cell_type": "code",
- "execution_count": 992,
+ "execution_count": 759,
"id": "fcf4d832-3d7d-4987-aa57-e6e0f1df16bf",
"metadata": {},
"outputs": [],
@@ -1640,17 +1645,17 @@
},
{
"cell_type": "code",
- "execution_count": 993,
+ "execution_count": 760,
"id": "e3036875-88d0-496e-9d2f-facd0e80a5b2",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "Puzzle 9.2: 2.722 seconds, answer 6353648390778 ok"
+ "Puzzle 9.2: 2.748 seconds, answer 6353648390778 ok"
]
},
- "execution_count": 993,
+ "execution_count": 760,
"metadata": {},
"output_type": "execute_result"
}
@@ -1680,7 +1685,7 @@
},
{
"cell_type": "code",
- "execution_count": 996,
+ "execution_count": 763,
"id": "5804fb03-05f3-402f-b6cc-6804c5d22512",
"metadata": {},
"outputs": [
@@ -1733,7 +1738,7 @@
},
{
"cell_type": "code",
- "execution_count": 998,
+ "execution_count": 765,
"id": "76b5379e-ee19-4607-91b8-88ec7b38023f",
"metadata": {},
"outputs": [],
@@ -1749,7 +1754,7 @@
},
{
"cell_type": "code",
- "execution_count": 999,
+ "execution_count": 766,
"id": "97cf05f7-fa56-4a90-b2d8-2cd4d9b81f95",
"metadata": {},
"outputs": [
@@ -1759,14 +1764,14 @@
"Puzzle 10.1: .005 seconds, answer 744 ok"
]
},
- "execution_count": 999,
+ "execution_count": 766,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"answer(10.1, 744, lambda:\n",
- " sum(score(topo, head) for head in topo.findall([0])))"
+ " sum(score(topo, trailhead) for trailhead in topo.findall([0])))"
]
},
{
@@ -1783,7 +1788,7 @@
},
{
"cell_type": "code",
- "execution_count": 1001,
+ "execution_count": 768,
"id": "b763450f-a565-4936-bee4-e531c2eeebdb",
"metadata": {},
"outputs": [],
@@ -1800,7 +1805,7 @@
},
{
"cell_type": "code",
- "execution_count": 1002,
+ "execution_count": 769,
"id": "f8a87032-6556-4fc9-9bb8-573611aee8dc",
"metadata": {},
"outputs": [
@@ -1810,7 +1815,7 @@
"Puzzle 10.2: .006 seconds, answer 1651 ok"
]
},
- "execution_count": 1002,
+ "execution_count": 769,
"metadata": {},
"output_type": "execute_result"
}
@@ -1832,7 +1837,7 @@
},
{
"cell_type": "code",
- "execution_count": 1004,
+ "execution_count": 771,
"id": "4b35defa-a19e-46c5-bd04-3af55bea14e4",
"metadata": {},
"outputs": [],
@@ -1861,7 +1866,7 @@
},
{
"cell_type": "code",
- "execution_count": 1006,
+ "execution_count": 773,
"id": "76b68cef-d8de-4145-b65c-b254fedf1671",
"metadata": {},
"outputs": [
@@ -1892,7 +1897,7 @@
"source": [
"### Part 1: How many stones will you have after blinking 25 times?\n",
"\n",
- "Every time you blink, the stones appear to change, according to these rules:\n",
+ "Every time you **blink**, the stones appear to change, according to these rules:\n",
"- A stone marked 0 changes to 1.\n",
"- Otherwise, a stone with an even number of digits splits into two stones, with the first and second halves of those digits.\n",
"- Otherwise, the stone's number is multiplied by 2024.\n",
@@ -1900,12 +1905,12 @@
"\n",
"\n",
"\n",
- "I'll define `blink` to simulate the effect of a given number of blinks, and `change_stone` to change a single stone, returning a list of wither one or two stones (the two stones computed by `split_stone`):"
+ "I'll define `blink` to simulate the effect of a given number of blinks, and `change_stone` to change a single stone, returning a list of either one or two stones (the two stones computed by `split_stone`):"
]
},
{
"cell_type": "code",
- "execution_count": 1008,
+ "execution_count": 775,
"id": "1513df56-3d6f-42cf-8aec-1bdbeb991d90",
"metadata": {},
"outputs": [],
@@ -1931,24 +1936,24 @@
},
{
"cell_type": "code",
- "execution_count": 1009,
+ "execution_count": 776,
"id": "eff17cd0-a2c7-4d69-bc55-c0ef97917915",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "Puzzle 11.1: .063 seconds, answer 194482 ok"
+ "Puzzle 11.1: .062 seconds, answer 194482 ok"
]
},
- "execution_count": 1009,
+ "execution_count": 776,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"answer(11.1, 194482, lambda:\n",
- " len(blink(stones)))"
+ " len(blink(stones, 25)))"
]
},
{
@@ -1962,12 +1967,13 @@
"- Although the puzzle makes it clear that the stones are in a line, it turns out their position in the line is irrelevant.\n",
"- Because all the even-digit numbers get split in half, it seems like many small numbers will appear multiple times.\n",
"- (In the given example, after 6 blinks the number 2 appears 4 times.)\n",
- "- Therefore, I'll keep a `Counter` of stones rather than a `list` of stones."
+ "- Therefore, I'll keep a `Counter` of stones rather than a `list` of stones.\n",
+ "- (Note my [utility function](AdventUtils.ipynb) `accumulate` takes as input an iterable of (key, count) pairs, and returns a Counter of the total count for each key.)"
]
},
{
"cell_type": "code",
- "execution_count": 1011,
+ "execution_count": 778,
"id": "707b5a97-0296-48df-bdab-e34064cc67c2",
"metadata": {},
"outputs": [],
@@ -1992,7 +1998,7 @@
},
{
"cell_type": "code",
- "execution_count": 1013,
+ "execution_count": 780,
"id": "efdcdbf8-e8ec-4a85-9d09-90a20e08c66a",
"metadata": {},
"outputs": [
@@ -2002,7 +2008,7 @@
"Puzzle 11.1: .002 seconds, answer 194482 ok"
]
},
- "execution_count": 1013,
+ "execution_count": 780,
"metadata": {},
"output_type": "execute_result"
}
@@ -2014,17 +2020,17 @@
},
{
"cell_type": "code",
- "execution_count": 1014,
+ "execution_count": 781,
"id": "657b1f13-ffcc-44c6-84f1-398fa2fcdac7",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "Puzzle 11.2: .057 seconds, answer 232454623677743 ok"
+ "Puzzle 11.2: .055 seconds, answer 232454623677743 ok"
]
},
- "execution_count": 1014,
+ "execution_count": 781,
"metadata": {},
"output_type": "execute_result"
}
@@ -2039,7 +2045,7 @@
"id": "ce377749-b3e2-4ca4-b50d-e7c3d2e7201a",
"metadata": {},
"source": [
- "Again, I did pretty well, with no errors, and moving at what I thought was a good pace, but I didn't even crack the top 2000 on the leaderboard. I guess I spent too much time writing docstrings and type hints, and refactoring as I went."
+ "Again, I did pretty well, with no errors, and moving at what I thought was a good pace, but I didn't even crack the top 2000 on the leaderboard. "
]
},
{
@@ -2049,12 +2055,12 @@
"source": [
"# [Day 12](https://adventofcode.com/2024/day/12): Garden Groups\n",
"\n",
- "Today's input is yet another 2D map. This one depicts different garden plots on a farm, each plot planted with a crop, indicated by a letter (maybe \"I\" is iceberg lettuce and \"U\" is udo, and so on):"
+ "Today's input is yet another 2D map. This one depicts different garden plots on a farm, each plot planted with a crop, indicated by a letter (maybe \"I\" is iceberg lettuce and \"O\" is okra, and so on):"
]
},
{
"cell_type": "code",
- "execution_count": 1017,
+ "execution_count": 784,
"id": "8161ee7e-76e3-499a-abf8-a607991c9602",
"metadata": {},
"outputs": [
@@ -2093,7 +2099,7 @@
},
{
"cell_type": "code",
- "execution_count": 1019,
+ "execution_count": 786,
"id": "79f91f38-e325-44f2-9e53-b64ce12d9d35",
"metadata": {},
"outputs": [],
@@ -2117,12 +2123,12 @@
"id": "9524ee15-c378-4cd4-a79b-14fb99b17cb3",
"metadata": {},
"source": [
- "To find all the regions I'll start at a point and do a [flood fill](https://en.wikipedia.org/wiki/Flood_fill) to neighboring points with the same region letter, keeping track of points that have already been found so as to not duplicate them. The function `regions` iterates over all points to make sure it finds every region, and `flood_fill` recursively expands to all points that neighbor `p` and have the same crop (letter). This function mutates the set `already_found` as it goes (and also mutates the `region` it is building up)."
+ "To find all the regions I'll start at a point and do a [flood fill](https://en.wikipedia.org/wiki/Flood_fill) to neighboring points with the same region letter, keeping track of points that have already been found so as to not duplicate them. The function `regions` iterates over all points to make sure it finds every region, and `flood_fill` recursively expands to all points that neighbor `p` and have the same crop (letter). `flood_fill` mutates the set `already_found` as it goes (and also mutates the `region` it is building up)."
]
},
{
"cell_type": "code",
- "execution_count": 1021,
+ "execution_count": 788,
"id": "1fbabbfb-50c8-4197-8517-e7cee9582765",
"metadata": {},
"outputs": [],
@@ -2146,7 +2152,7 @@
},
{
"cell_type": "code",
- "execution_count": 1022,
+ "execution_count": 789,
"id": "cdaf655b-d12c-4973-b19b-3132e5e691c6",
"metadata": {},
"outputs": [
@@ -2156,7 +2162,7 @@
"Puzzle 12.1: .031 seconds, answer 1402544 ok"
]
},
- "execution_count": 1022,
+ "execution_count": 789,
"metadata": {},
"output_type": "execute_result"
}
@@ -2173,9 +2179,9 @@
"source": [
"### Part 2: What is the new total price of fencing all regions on your map, with the bulk discount?\n",
"\n",
- "In Part 2 we get a **bulk discount** on the fencing; we only need to pay for the number of straight line sides on the perimeter, not the total length of the perimeter. For example, a 10 x 10 square has perimeter 40, but has only 4 sides; that's a 90% discount!\n",
+ "In Part 2 we get a **bulk discount** on the fencing; we only need to pay for the number of straight line sides on the perimeter, not the total length of the perimeter. For example, a 10 x 10 square has perimeter 40, but has only 4 sides. That's a 90% discount!\n",
"\n",
- "It took me a while to figure out a good approach for this. At first I was reminded of the Convex Hull problem, for which I have [a notebook](https://github.com/norvig/pytudes/blob/main/ipynb/Convex%20Hull.ipynb). But that's not really appropriate here; our regions could be non-convex, and the set of points in a region are not the same as the vertexes of a polygon (e.g., a region with one point has 4 sides, not 0).\n",
+ "It took me a while to figure out a good approach for this. At first I was reminded of the Convex Hull problem, for which I have [a notebook](https://github.com/norvig/pytudes/blob/main/ipynb/Convex%20Hull.ipynb). But that's not really appropriate here; our regions could be non-convex, and the set of sides in a region are not the same as the vertexes of a polygon (e.g., a region with one point has 4 sides, not 0).\n",
"\n",
"A better idea is to start with the perimeter length and subtract one for every case in which a points has an edge in one direction (e.g., an edge to the North) and also has a neighbor with the same edge. To be precise, I'll look for four cases:\n",
"- A point with an edge to the North whose neighbor to the East also has an edge to the North\n",
@@ -2183,7 +2189,7 @@
"- A point with an edge to the South whose neighbor to the West also has an edge to the South\n",
"- A point with an edge to the West whose neighbor to the North also has an edge to the West\n",
"\n",
- "Here are two diagrams of two regions with \"`X`\" and \"`W`\" crops with a \"`-`\" marking each place where a perimeter piece would be subtracted.\n",
+ "Here are two diagrams of two regions with two kinds of crop, \"`X`\" and \"`W`\", with a \"`-`\" marking each place where a perimeter piece would be subtracted.\n",
"\n",
" .X-... .-------..\n",
" -X-.X- .WWWWWWWW-\n",
@@ -2191,12 +2197,12 @@
" ..XXX. -WWWWWWWW.\n",
" ...--. ..-------.\n",
"\n",
- "I'll parameterize `fence_price` to take a `region_price` parameter, and show that the change is backwards compatible to Part 1:"
+ "I'll refactor `fence_price` to take a `region_price` parameter, and show that the change is backwards compatible to Part 1:"
]
},
{
"cell_type": "code",
- "execution_count": 1024,
+ "execution_count": 791,
"id": "38c30e15-3a33-40c2-b734-163a15af7a8a",
"metadata": {},
"outputs": [],
@@ -2219,7 +2225,7 @@
},
{
"cell_type": "code",
- "execution_count": 1025,
+ "execution_count": 792,
"id": "72175812-dcd0-4f1b-9efa-0dceeeafa609",
"metadata": {},
"outputs": [
@@ -2229,7 +2235,7 @@
"Puzzle 12.1: .030 seconds, answer 1402544 ok"
]
},
- "execution_count": 1025,
+ "execution_count": 792,
"metadata": {},
"output_type": "execute_result"
}
@@ -2241,17 +2247,17 @@
},
{
"cell_type": "code",
- "execution_count": 1026,
+ "execution_count": 793,
"id": "9defcd35-91bc-41d4-a16f-bb7a4ede75e7",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "Puzzle 12.2: .043 seconds, answer 862486 ok"
+ "Puzzle 12.2: .042 seconds, answer 862486 ok"
]
},
- "execution_count": 1026,
+ "execution_count": 793,
"metadata": {},
"output_type": "execute_result"
}
@@ -2275,7 +2281,7 @@
},
{
"cell_type": "code",
- "execution_count": 1028,
+ "execution_count": 795,
"id": "e78f45c0-c420-4661-aad2-14e122b4473b",
"metadata": {},
"outputs": [
@@ -2334,12 +2340,12 @@
"- Calculate how many presses of the **B** button would be required to get to the prize's X location.\n",
"- If the number of presses is an integer, and would also arrive at the prize's Y location, then yield that solution.\n",
"- Out of these solutions, the cheapest solution is the one that needs the fewest tokens.\n",
- "- (If there are no solutions, `cheapest_solution` will return 0, whcih is convenient for adding the results up.)"
+ "- (If there are no solutions, `cheapest_solution` will return 0, whcih is convenient for adding the results up, but is worrisome because it doesn't distinguish between an impossible-to-reach prize and a prize at the origin. On this puzzle, that's ok, but it is still worrisome.)"
]
},
{
"cell_type": "code",
- "execution_count": 1030,
+ "execution_count": 797,
"id": "c2c4bbc9-42cd-483d-8da2-97cf051e93fe",
"metadata": {},
"outputs": [],
@@ -2358,22 +2364,22 @@
"\n",
"def cheapest_solution(claw: Claw) -> int: \n",
" \"\"\"The minimum cost out of every possible solution to this claw machine.\"\"\"\n",
- " return min((3 * A + 1 * B for (A, B) in solve_claw(claw)), default=0)"
+ " return min((3 * A + B for (A, B) in solve_claw(claw)), default=0)"
]
},
{
"cell_type": "code",
- "execution_count": 1031,
+ "execution_count": 798,
"id": "f5638ed4-1e59-4b9f-b1fc-427d2eb0d036",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "Puzzle 13.1: .011 seconds, answer 29598 ok"
+ "Puzzle 13.1: .010 seconds, answer 29598 ok"
]
},
- "execution_count": 1031,
+ "execution_count": 798,
"metadata": {},
"output_type": "execute_result"
}
@@ -2410,7 +2416,7 @@
},
{
"cell_type": "code",
- "execution_count": 1033,
+ "execution_count": 800,
"id": "df8da2ae-52f9-409b-a54f-ad7d21b32e45",
"metadata": {},
"outputs": [
@@ -2420,7 +2426,7 @@
"Counter({0: 168, 1: 152})"
]
},
- "execution_count": 1033,
+ "execution_count": 800,
"metadata": {},
"output_type": "execute_result"
}
@@ -2434,7 +2440,9 @@
"id": "f0f97d47-5741-4c6e-ae96-5b3161ee2e56",
"metadata": {},
"source": [
- "So, what is the intersection point of two lines? You could [look it up](https://www.wolframalpha.com/input?i=solve+for+a%2C+b%3A+p+*+a+%2B+q+*+b+%3D+r++and+++s+*+a+%2B+t+*+b+%3D+u) or work it out by hand. Given the two equations over the two variables *a* and *b*:\n",
+ "This says that 168 claw machines have no solution and 152 have exactly one. None of them have more than one solution.\n",
+ "\n",
+ "So, what is the intersection point of two lines? You could [look it up](https://www.wolframalpha.com/input?i=solve+for+a%2C+b%3A+p+*+a+%2B+q+*+b+%3D+r++and+++s+*+a+%2B+t+*+b+%3D+u) or work it out by hand, or [call a function](https://numpy.org/doc/2.1/reference/generated/numpy.linalg.solve.html). Given the two equations over the two variables *a* and *b*:\n",
"\n",
" p * a + q * b = r\n",
" s * a + t * b = u\n",
@@ -2449,7 +2457,7 @@
},
{
"cell_type": "code",
- "execution_count": 1035,
+ "execution_count": 802,
"id": "6bbd0934-d962-4c93-940b-810651e9e568",
"metadata": {},
"outputs": [],
@@ -2473,7 +2481,7 @@
},
{
"cell_type": "code",
- "execution_count": 1037,
+ "execution_count": 804,
"id": "dd38ba4c-44ba-426b-b1c8-0e10adbdd642",
"metadata": {},
"outputs": [],
@@ -2485,7 +2493,7 @@
},
{
"cell_type": "code",
- "execution_count": 1038,
+ "execution_count": 805,
"id": "9f578b3e-6b6d-4eb0-9228-c98122a84747",
"metadata": {},
"outputs": [
@@ -2495,7 +2503,7 @@
"Puzzle 13.2: .000 seconds, answer 93217456941970 ok"
]
},
- "execution_count": 1038,
+ "execution_count": 805,
"metadata": {},
"output_type": "execute_result"
}
@@ -2510,12 +2518,12 @@
"id": "db917eed-07e5-4409-a92d-b26534a1fcd4",
"metadata": {},
"source": [
- "The refactored `solve_claw` is compatible with Part 1, and should be a bit faster:"
+ "The refactored `solve_claw` is compatible with Part 1, and should be faster:"
]
},
{
"cell_type": "code",
- "execution_count": 1040,
+ "execution_count": 807,
"id": "609ed4ce-548c-4af4-8e09-c621aca0124e",
"metadata": {},
"outputs": [
@@ -2525,7 +2533,7 @@
"Puzzle 13.1: .000 seconds, answer 29598 ok"
]
},
- "execution_count": 1040,
+ "execution_count": 807,
"metadata": {},
"output_type": "execute_result"
}
@@ -2535,6 +2543,14 @@
" sum(map(cheapest_solution, claws)))"
]
},
+ {
+ "cell_type": "markdown",
+ "id": "741bd221-cda4-432b-8ad2-b8c6950c7dc3",
+ "metadata": {},
+ "source": [
+ "I could have recognized in Part 1 that we have a system of two linear equations in two unknowns, and gone straight to the Part 2 solution. But I have no regrets; I took the hint that trial-and-test for 100 trials was a good idea, and I saved the complicated algebra for when I really needed it in Part 2. Having two independent implementations give the answer incrreases my confidence in both of them."
+ ]
+ },
{
"cell_type": "markdown",
"id": "2576ce68-3f1e-4887-ab0b-62fa94cbe55a",
@@ -2542,12 +2558,12 @@
"source": [
"# [Day 14](https://adventofcode.com/2024/day/14 ): Restroom Redoubt\n",
"\n",
- "Today's narratives involve robots roaming around a restroom. Each line of the input describes a robot's position and velocity in two dimensions:"
+ "Today's narratives involve multiple robots roaming around a restroom. Each line of the input describes a robot's position and velocity in two dimensions:"
]
},
{
"cell_type": "code",
- "execution_count": 1042,
+ "execution_count": 810,
"id": "1a5f5875-426d-47ea-a35a-405c39ced5dd",
"metadata": {},
"outputs": [
@@ -2598,7 +2614,7 @@
},
{
"cell_type": "code",
- "execution_count": 1044,
+ "execution_count": 812,
"id": "be22ac94-7401-4cf6-ab83-e43775536af7",
"metadata": {},
"outputs": [],
@@ -2620,7 +2636,7 @@
},
{
"cell_type": "code",
- "execution_count": 1045,
+ "execution_count": 813,
"id": "69093001-79aa-463a-b801-51cd5b4de4eb",
"metadata": {},
"outputs": [
@@ -2630,7 +2646,7 @@
"Puzzle 14.1: .000 seconds, answer 216027840 ok"
]
},
- "execution_count": 1045,
+ "execution_count": 813,
"metadata": {},
"output_type": "execute_result"
}
@@ -2649,16 +2665,17 @@
"\n",
"I was so sure Part 2 was going to ask for 10 trillion steps. But I was wrong. \n",
"\n",
- "Instead they ask the very vague question of when a picture emerges. They gave the hint that \"*very rarely, most of the robots should arrange themselves into a picture of a Christmas tree.*\" Since I don't know exactly how to specify a Christmas tree picture, I see two options:\n",
+ "Instead they ask the very vague question of when a picture emerges. They gave the hint that \"*very rarely, most of the robots should arrange themselves into a picture of a Christmas tree.*\" Since I don't know exactly how to specify a Christmas tree picture, I see three options:\n",
"- I could build an animation, and watch as each frame is displayed, stopping when I see something that looks like a tree.\n",
- "- The phrase \"*most of the robots should arrange themselves*\" suggests that most of the robots are in one area. I could check for that. \n",
+ "- The phrase \"*most of the robots should arrange themselves*\" suggests that most of the robots are in one area. I could check for that.\n",
+ "- Generate an image for each time step and send it off to an image recognition service. That would be iffy, and possibly expensive. \n",
"\n",
- "I'll try the animation first. Google and Stack overflow led me to the `matplotlib.animation.FuncAnimation` function:"
+ "I'll try the animation approach first. Google and Stack Overflow led me to the `matplotlib.animation.FuncAnimation` function:"
]
},
{
"cell_type": "code",
- "execution_count": 1047,
+ "execution_count": 815,
"id": "664c686e-0c3d-43b8-970f-88c0bf47dbf6",
"metadata": {},
"outputs": [],
@@ -2675,7 +2692,7 @@
" points = robot_dance(robots, t)\n",
" plt.cla()\n",
" ax.yaxis.set_inverted(True)\n",
- " plt.plot(*T(points), 'o')\n",
+ " plt.plot(*T(points), 'go')\n",
" plt.title(f'{t} seconds')\n",
" return matplotlib.animation.FuncAnimation(fig, animate, frames=times)"
]
@@ -2690,7 +2707,7 @@
},
{
"cell_type": "code",
- "execution_count": 1049,
+ "execution_count": 817,
"id": "87843969-cb37-4fa5-9788-6a1b71c43521",
"metadata": {},
"outputs": [
@@ -2882,42 +2899,42 @@
"\n",
"\n",
"
\n",
@@ -5986,697 +6075,723 @@
" /* Instantiate the Animation class. */\n",
" /* The IDs given should match those used in the template above. */\n",
" (function() {\n",
- " var img_id = \"_anim_imga2955861de624838a41958e304b17493\";\n",
- " var slider_id = \"_anim_slidera2955861de624838a41958e304b17493\";\n",
- " var loop_select_id = \"_anim_loop_selecta2955861de624838a41958e304b17493\";\n",
+ " var img_id = \"_anim_imged69eeb3dff848aba82de90936e3b8cc\";\n",
+ " var slider_id = \"_anim_slidered69eeb3dff848aba82de90936e3b8cc\";\n",
+ " var loop_select_id = \"_anim_loop_selected69eeb3dff848aba82de90936e3b8cc\";\n",
" var frames = new Array(1);\n",
" \n",
" frames[0] = \"data:image/png;base64,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\\\n",
- "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\\\n",
- "s2vXLkOSIcn4y1/+Yqr9vfnHP/5hnHLKKZ2vkZKSYpxyyilGIBDovG3JkiXdtguHw8ZXvvKVzsdI\\\n",
- "MjIyMoyUlJTO/87LyzP+53/+p8fXffHFF7u87sCBA42srKwuz/f888932aa9vd247rrrOu8fMGCA\\\n",
- "ccoppxgDBgzovG3x4sXGkSNHur3ekiVLOv+WZcuWdW5/8mt+6Utf6rG9x44dM2688cbOxwUCgS6v\\\n",
- "ff3113d5jRMdPXrUmD9/fpfXGTZsmJGamtrlNgCA//ALMADAUu3t7Z3n5V588cXavXu3brrpJo0e\\\n",
- "PVqpqak67bTTdOWVV3YuQ+7JV7/6VUnHf+1ctmyZ/vnPf0o6Hkz1+uuv64orrlBbW5umT5+uf//3\\\n",
- "f4+5ba+88oo++OADSdJXvvKVHh/z2muvSTq+3Pqiiy7S+vXrNXfuXGVlZWnIkCE6++yzdfvtt6uu\\\n",
- "ri7m1z3RnXfeqf379+uCCy7Qli1bFA6HtW/fPoVCIe3atUurV69Wfn5+t+2++c1v6pe//KVOPfVU\\\n",
- "/fSnP1Vzc3PnedF//etfdf755+u9997TokWLuv2q+sYbb+jKK6/U/v37lZ+frz/96U86dOiQ9u/f\\\n",
- "r4MHD2r79u268847lZmZ2WW7//iP/9AzzzyjQCCg7373u2pubta+ffvU1NSk//iP/5AklZWV6bvf\\\n",
- "/W7Uv/cPf/iDfvGLX+ihhx7S/v37tX//fjU1NXX2/9NPP61NmzZ12+7HP/6xnnzySUnS1772Ne3d\\\n",
- "u1f79u3Tvn379P3vf1/PPPOMfv/73/f4mmVlZXrppZeUlpamX/7yl2ptbVVLS4sOHz6sjz/+WOvX\\\n",
- "r+f8bQDwq2RX4AAAb3n33Xc7f2H7zne+Y6SnpxuSjEGDBnX79e/WW2/t8Tk6OjqMb33rW11+aczI\\\n",
- "yDAGDRpkSDJOO+00Y/ny5cahQ4fiatu///u/G5KMnJwcIxQK9fiY5cuXG5KMUaNGGV/72tc6X3/o\\\n",
- "0KHG4MGDO/87MzPTePHFF+Pun8hzVFZWxrzNm2++aQQCAWPIkCHGzp07e3zMJ598YowePbrHX3Iv\\\n",
- "uugiQ5IxYcIEo6WlJabXbGhoMAYOHGhIMu6+++4eH1NaWmpIMoLBoPGvf/2ry32RX2clGU8++WSP\\\n",
- "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\\\n",
- "9m//ZqSkpHR7POPDP9atW2cMGDDAkGRMmTLFuO6664xZs2Z13vbtb3+72zaMD++58sorO483Iv9S\\\n",
- "U1N73cbMOFi/fr2RkpJiBAIB4+KLLzauueaazn3THXfcYcefBptQAMMW3/3udw1JxoUXXmi0trZ2\\\n",
- "3v7ggw8akozZs2cnsXVIhKeeesr46le/auzatavL7f/617+M888/35BkLF68uMt9GzduNCQZOTk5\\\n",
- "XbarrKw0Bg0aZAwbNszYt29fQtqPxHr55ZcNScYtt9zSawHMGPGXf/7zn0ZWVpYxePDgHg9Kt23b\\\n",
- "1uW/GR/+EQ6HjREjRhiSjN/97ndd7qusrDTS0tKMQCDQ5Qt3xoc3rVq1yvje975nVFRUGB999FGf\\\n",
- "BbCZcbBv3z5j2LBhhiTjueee67z9o48+MsaPH29IMjZt2mT9HwdbUADDckeOHOn8Ruz111/vdv+5\\\n",
- "555rSDJ27NiRhNbBCSorKzs/oNrb2ztvv/zyyw1JxsMPP9xtm69//euGJGP16tUJbCkS4dChQ8b4\\\n",
- "8eONSZMmGbt27eq1AGaM+MsNN9xgSDJ+/OMfx/R4xod/vPnmm52riXoS+VXwmWee6byN8eEPfRXA\\\n",
- "ZsbB/fffb0gyrrzyym7brF+/3pBkXHHFFf1tOhKEc4Bhuddee00tLS0666yzdP7553e7v7i4WJJU\\\n",
- "UVGR6KbBIT772c9Kktrb29Xc3Czp+DnjGzdulPTpGDkR48a7Vq5cqQ8++ECPPfaYgsFg1McxRvxl\\\n",
- "//79WrdunYYNG6avfOUrfT6e8eEvqampMT0uOztbEuMDx5kdBy+88ELUbT7/+c8rLS1NL7/8skKh\\\n",
- "kNVNhg0ogGG5//7v/5YkXXDBBT3eH7k98jj4z+7duyWpM7BEkt599121t7drxIgRGj16dLdtIuNm\\\n",
- "586diWsobLdz5049+OCDuvHGGzV79uxeH8sY8Ze///3vam9v10UXXaRgMKjy8nJ94xvf0LJly/Tj\\\n",
- "H/9YH3/8cZfHMz78Zdy4cRo3bpzeffddrVu3rst9W7Zs0YsvvqixY8d27lcYH5DMj4PIf/d0bDto\\\n",
- "0CCdc845CoVCeu+992xoNaxGAQzL1dXVSVKPO5YTb488Dv7z6KOPSpIuvfTSzm/x+xo36enpysrK\\\n",
- "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\\\n",
+ "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\\\n",
+ "AAAIBBpgAAAAAEAg0AADAAAAAAKBBhgAAAAAEAg0wAAAAACAQKABBgAAAAAEAg0wAAAAACAQaIAB\\\n",
+ "AAAAAIFAAwwAAAAACAQaYAAAAABAINAAAwAAAAACgQYYAAAAABAINMAAAAAAgECgAQYAAAAABAIN\\\n",
+ "MAAAAAAgEGiAAQAAAACBQAMMAAAAAAgEGmAAAAAAQCDQAAMAAAAAAoEGGAAAAAAQCDTAAAAAAIBA\\\n",
+ "oAEGAAAAAAQCDTAAAAAAIBBogAEAAAAAgUADDAAAAAAIBBpgAAAAAEAg0AADAAAAAAKBBhgAAAAA\\\n",
+ "EAg0wAAAAACAQKABBgAAAAAEAg0wAAAAACAQaIABAAAAAIFAAwwAADxpyZIlSktL05IlS5wuBQDg\\\n",
+ "ETTAAABbvfvuu/rud7+rCy+8UCeffLJGjhypSZMm6ZJLLtFdd92lffv29bvsE088ocWLF+u0007T\\\n",
+ "iBEjNHr0aE2fPl233XabWltb+1ymqalJaWlpCf+7++67B6x/y5Yt+vznP6/p06crMzNTY8aM0Yc+\\\n",
+ "9CFdf/31euyxx4awZgAAQKoNd7oAAIB/rV+/XjfccIMikYgkafjw4crMzNQ///lP/fOf/1RTU5Ou\\\n",
+ "uuoq5ebm9lju4MGDuvbaa9XQ0NB9W2Zmpg4dOqRXXnlFr7zyih588EF9//vf17Jly3osO2LECE2c\\\n",
+ "OHHAug4cOKBoNCpJOv/88/t8jGEY+trXvqb77rtPR44ckSSNHj1a77//vl599VW9+uqr2rZtm264\\\n",
+ "4Yak1gkAAHAOR4ABALb44x//qE984hOKRCJasGCBnnvuOR08eFB79+7Ve++9pxdeeEErVqzQ2LFj\\\n",
+ "ey17zz33dDe/X/jCF7R79251dHQoFovphRde0MUXX6wjR47ojjvu0AsvvNBj2QsvvFDt7e0D/iso\\\n",
+ "KJAknX766br00kv7rL+srEzf+973NGzYMH3jG9/Qrl27FI1GdeDAAb399tt6+umndfXVV1u70gAA\\\n",
+ "gK04AgwAsNx7772nz3zmM4rFYrr66qv1y1/+Uunp//7ONSMjQ+edd57OO++8Ppd/6KGHJEn5+fn6\\\n",
+ "7//+7+7b09PTdd555+k3v/mNJk2apGg0qieffFIf+9jHEq7tX//6l9asWSNJKi4u1rBhw3o9prGx\\\n",
+ "UT/84Q8lSY8//riuvPLKHvefeOKJuuqqq3TVVVcl/LoAAMB5HAEGAFju4Ycf1o4dO5SRkaGf/OQn\\\n",
+ "PZrfRLzxxhuS1G9jO3bsWH3oQx+SpO5TmRNVX1+v999/X2lpabr11lv7fEzXdcHXXnttr+bXCrt3\\\n",
+ "79ayZcs0Y8YMjR49WiNHjtRpp52m8847T8uWLdPzzz/f77JNTU264YYbNHnyZI0aNUpjx47VrFmz\\\n",
+ "dO+99+rAgQMDvu6ePXu0cuVKffzjH9eECRM0atQoTZ06VZdeeql+8pOfaP/+/X0u99RTT+nyyy/X\\\n",
+ "xIkTu08xv/zyy/X000/3+1rHB1Q98cQTKigo0IQJE3TCCScoNzdX1dXV3aeX9+fRRx/VRRddpKys\\\n",
+ "LI0dO1Yf//jH9cADD8gwjAGXO3z4sB544AEVFBTopJNOUigU0oknnqjp06fruuuu04MPPjjg8gAA\\\n",
+ "nzIAALDYhRdeaEgyrr/+elPLf/jDHzYkGQUFBX3ev2/fPiMzM9OQZNTX1yf8vEeOHDHOOOMMQ5Kx\\\n",
+ "YMGCPh/zyiuvGJIMSUZjY6Op+gfS2tpqjB8/vvs1hg0bZowfP95IS0vrvu2WW27ptVw8Hjc++9nP\\\n",
+ "dj9GkpGZmWkMGzas+/+nT59u7Ny5s8/X/f3vf9/jdYcPH26MGzeux/M9/fTTPZY5ePCgcd1113Xf\\\n",
+ "n56ebowfP95IT0/vvu2GG24wDh061Ov1brnllu6/5Ytf/GL38se/5mc+85k+6z1y5IhRXFzc/bi0\\\n",
+ "tLQer3399df3eI1jHT582CgsLOzxOmPHjjVGjhzZ4zYAQPBwBBgAYKmDBw92X5ebn5+vHTt2qKSk\\\n",
+ "RJMmTdLIkSOVnZ2tK6+8svs05L58/vOfl3T0aOcXv/hF/fOf/5R0NJiqpaVFl19+uaLRqGbPnq0b\\\n",
+ "b7wx4dqampq0fft2SdJnP/vZPh/z3HPPSTp6uvXFF1+sp556SpdcconGjRunE044QWeddZbKysr0\\\n",
+ "+uuvJ/y6x7rjjju0d+9e5eXladOmTYrH43rnnXfU2dmpV155Rd///vc1Y8aMXst95Stf0apVqzRx\\\n",
+ "4kT9z//8j/bs2dN9XfT69es1c+ZMvfzyy/rUpz7V66jqli1bdOWVV2rv3r2aMWOGfve73+m9997T\\\n",
+ "3r17deDAAT3//PO64447lJWV1WO58vJy/eIXv1BaWpq+8Y1vaM+ePXrnnXf09ttvq7y8XJL02GOP\\\n",
+ "6Rvf+Ea/f++vf/1r1dbW6v7779fevXu1d+9evf32293r/6GHHtK6det6LffDH/5Qq1evliR96Utf\\\n",
+ "0ptvvql33nlH77zzju666y794he/0K9+9as+X/Oxxx5TOBzWqFGjtGrVKnV0dGjfvn2KxWKKRCJ6\\\n",
+ "6qmnuH4bAILK6Q4cAOAv27Zt6z7CtmLFCmP06NGGJGPEiBG9jv597nOf6/M53n//feOrX/1qjyON\\\n",
+ "mZmZxogRIwxJRnZ2tnHnnXca7733XlK13XjjjYYk48QTTzQ6Ozv7fMydd95pSDJOO+0040tf+lL3\\\n",
+ "648ZM8bIyMjo/v+srCzj97//fdLrp+s5Nm7cmPAyf/nLX4y0tDTjhBNOMF566aU+H/Puu+8akyZN\\\n",
+ "6vNI7sUXX2xIMs4880xj3759Cb3m7t27jeHDhxuSjK9//et9Pmb58uWGJCMUChn/+te/etzXdXRW\\\n",
+ "krF69eo+lz/vvPMMScZnP/vZHrfHYjFjwoQJhiTj5ptv7nPZrvdJfRwB/vznP29IMkpLSxP6WwEA\\\n",
+ "wcERYACApfbu3dv93//1X/+lUCikxx57TNFoVHv37tXrr7+u66+/XpL0k5/8RNXV1b2eIz09Xf/1\\\n",
+ "X/+lBx98UJmZmZKOXut76NAhSVJnZ6f2798/6DWvx9q3b5+efPJJSdJNN92kkSNHDlh/e3u7fvSj\\\n",
+ "H2nu3Ln6y1/+ov379ysajeoPf/iDpk6dqo6ODl177bVJHwkeN26cpH9f55yIuro6GYahT3ziEzrn\\\n",
+ "nHP6fExWVlZ3KNfvf//77ttfffXV7qPa99xzT5+p23158skndfjwYY0aNUp33nlnn4+pqKjQyJEj\\\n",
+ "FY/H9cQTT/T5mJycHH3mM5/p874rrrhCkvTSSy/1uH3t2rV65513JEnf/OY3+1z2zjvv1KhRo/q8\\\n",
+ "r2sdt7e393k/ACC4aIABAJY69vTbI0eO6Cc/+Ymuv/56hUIhSUcbokcffVQzZ86UJH3729/W4cOH\\\n",
+ "ezzH22+/rfnz52vJkiW64IIL9Nxzz2nfvn1644039NRTT+nkk0/Wj3/8Y3384x/vPj16MI8++qg6\\\n",
+ "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\\\n",
+ "bvvKV74yYA2vvvpqd7Nz//33J1X/hg0buhssScbYsWONE044ofv/TznlFONPf/pTUs/52muv9ah/\\\n",
+ "2LBhxoQJE4wRI0Z03zZixAjj8ccf77Xs4cOHjdtvv73H8qNGjTJOPPHEXuvlueee67X873//++6m\\\n",
+ "XpIRCoV6vR9PP/10j2UOHjxofPrTn+6+Pz093Rg/fryRnp7efdsNN9zQ3Uwfa6gN8Pvvv2/cfPPN\\\n",
+ "vV572LBhhiTj+uuv7/c1ur706Po3ZswYY8yYMT1uu+aaa4z333+/39oAAP7EKdAAAFuMHj1a69ev\\\n",
+ "V21trebOnavRo0crGo3q9NNP1/XXX68//vGPuvvuu/tc9qSTTtLmzZu1atUqXXrppZo4caLi8biG\\\n",
+ "Dx+uadOm6aabbtKzzz6r733vewPW8OCDD8owDI0YMUI333xzUvXPmTNHf/vb37R8+XJNnz69OzH4\\\n",
+ "nHPOUXl5uf76179q1qxZST3n6aefrl//+tdatmyZZs+erVNPPVXRaFTDhw/X2WefrS9+8Yv661//\\\n",
+ "qmuuuabXssOGDVNVVZVaWlpUWlqq6dOna9iwYdq/f7/Gjx+viy66SHfddZdaW1u7r3E91sKFC/Xq\\\n",
+ "q69qxYoVmjlzpjIyMhSLxTR16lRdeumlqqmp0bx583osM2LECP3iF7/Qk08+qaKiIp144onq6OjQ\\\n",
+ "iSeeqKKiIj311FP62c9+1v0bz1ZKT0/XQw89pIceekizZ89WRkaGDh8+rLy8PP3kJz/pvq67Lz/8\\\n",
+ "4Q/13e9+V5dddpnOPPNMGYahWCym0047TVdccYWefPJJPf744/3+PjEAwL/SDGOQ344AAAAAAMAH\\\n",
+ "+OoTAAAAABAINMAAAAAAgECgAQYAAAAABAINMAAAAAAgEGiAAQAAAACBQAMMAAAAAAgEGmAAAAAA\\\n",
+ "QCDQAAMAAAAAAoEGGAAAAAAQCDTAAAAAAIBAGO50AbBPdna2Dhw4oMmTJztdCgAAABB4r7/+ukaP\\\n",
+ "Hq329nanSwksjgD72IEDBxSPx50uAwAAAICkeDyuAwcOOF1GoHEE2Me6jvxu3brV4UoAAAAAzJgx\\\n",
+ "w+kSAo8jwAAAAACAQKABBgAAAAAEAg0wAAAAACAQaIABAAAAAIFAAwwAAAAACAQaYAAAAABAINAA\\\n",
+ "AwAAAAACgQYYAAAAABAINMAAAAAAgECgAQYAAAAABAINMAAAAAAgEGiAAQAAAACBQAMMAAAAAAgE\\\n",
+ "GmAAAAAAQCDQAAMAAAAAAoEGGAAAAAAQCDTADuvs7NR//ud/6kMf+pBGjRql0047Tbfeeqt2797t\\\n",
+ "dGkAAAAA4CvDnS4gyDo7OzV//nxt3LhRp556qq688krt3LlTq1ev1m9+8xtt2rRJZ5xxhtNlwoMi\\\n",
+ "0YhWtaxS865mdRzqUNaILBVMLVDJzBJNzJzodHm+wDoGAMD9+LzG8dIMwzCcLiKovvnNb+pb3/qW\\\n",
+ "LrjgAq1du1aZmZmSpPvvv1933HGH5s6dq+bmZtPPP2PGDEnS1q1bLakX7heLx1TWWKb61nrFj8R7\\\n",
+ "3R9KD6k4t1jVRdUaNXyUAxV6H+sYAAD3c+vnNfvnzqMBdkg8Htcpp5yiffv2qaWlRTNnzuxx/0c/\\\n",
+ "+lG99NJLeuGFF3TeeeeZeg0mWLDE4jEVPVqk5l2Df2mSPyVfa25co4xQRgoq8w/WMQAA7ufmz2v2\\\n",
+ "z53HNcAOee6557Rv3z6dccYZvZpfSbrmmmskSQ0NDakuDR5V1liW0IZekpp3Nev2xtvtLciHWMcA\\\n",
+ "ALgfn9cYCA2wQ/785z9LkvLy8vq8v+v2rscBA2mPtqu+tT6pZVa3rlYkGrGnIB9iHQMA4H58XmMw\\\n",
+ "NMAOef311yVJkyZN6vP+rtu7HgcMpK6lrs/rWwYSPxJX3ZY6myryh0g0osoNlVr48ELNqp3FOgYA\\\n",
+ "wOXYJ8JgSIF2SDQalSSdcMIJfd4/evToHo8bSNe1BMfbvn07KdIBkehpPsdr2tmk8jnlFlfjfYMF\\\n",
+ "ZySDdQwAQOqwT4TB0AA7pCt7LC0tbcD7gUR0HOpI6XJ+lkxwRiJYxwAApA77RBgMDbBDsrKyJEkH\\\n",
+ "Dhzo8/733ntPkrp/Gmkg/aXI9XdkGP6TNSIrpcv5WTLBGYlgHQMAkDrsE2EwXAPskMmTJ0uSdu/e\\\n",
+ "3ef9Xbd3PQ4YSP6UfFPLFUwtsLYQjzMTnDEY1jEAAKnDPhEGQwPskI9+9KOSpJaWlj7v77r93HPP\\\n",
+ "TVlNQXRsyNEFdRdo4cMLdc+z93guCbAkr0Sh9FBSy4TSQyqZWWJTRd5kJjhjIKxjAABSi30iDIYG\\\n",
+ "2CEXXXSRxo4dq+3bt2vLli297n/iiSckSZdffnmqSwuEWDym0oZS5VTlqGJ9hcI7wtq8e7PCO8Ja\\\n",
+ "sW6FcqpytLRhqToPdzpdakKyM7O1JHdJUssU5xZrYuZEewryKCtPfZZYxwAApBr7RBgMDbBDRowY\\\n",
+ "oS996UuSpC996Us9rgW+//779dJLL+niiy/W+eef71SJvtUVclTbUtvv0b74kbgeaHlAix5ZpFg8\\\n",
+ "luIKzaleVJ3waT/5U/JVXVRtc0XeY2UABusYAABnsE+EgdAAO6iiokIf//jHtXHjRp155pm67rrr\\\n",
+ "NHv2bN1xxx068cQTtXr1aqdL9KVkQo6adzXr9sbb7S3IIhmhDK25cY1K80r7PfUnlB5SaV6pGm9q\\\n",
+ "1Kjho1JcoftZEYDBOgYAwFnsE2EgaQa/t+OoWCym//qv/9LPfvYztbW1afz48Vq0aJG+9a1vKScn\\\n",
+ "Z0jP3ZUC3V9KdBC1R9s1uWpyUtd5htJDalvW5qlTYyLRiOq21KlpZ5M6DnUoa0SWCqYWqGRmiaf+\\\n",
+ "jlSr3FCpivUVSS+XMyZHZ510FusYAACXcds+EfvnzqMB9jEmWG9mG5zKeZX8OHoABOULEgAA4Az2\\\n",
+ "z53HKdAIFLMhR007m6wtBK5EcAYAAIC/0QAjUMyGHFkZjgR3IzgDAADAv2iAEShmQ46sCEeCNxCc\\\n",
+ "AQAA4F/DnS4ASKX8KfkK7wgnvVzB1ALri4FrZYQyVLO4RisvWemq4AwAAAAMDSFYPsZF9r0RcgQA\\\n",
+ "3hKJRrSqZZWadzXzRRQAz2P/3HkcAUagdIUc1bbUJrwMIUcAkHqxeExljWWqb63v9aVleEdYdzXd\\\n",
+ "peLcYlUXVXMpAgAgYVwDjMAh5AgA3C0Wj6no0SLVttT2e8ZO/EhcD7Q8oEWPLFIsHktxhQAAr6IB\\\n",
+ "RuAQcgQA7lbWWJbwz9Y172rW7Y2321sQAMA3uAbYx7jGYHCRaISQIwBwEbIaAPgZ++fO4xpgBNrE\\\n",
+ "zIkqn1Ou8jnljtZByAsAHFXXUpdU8ysdPR26bkud49ty+B+f14D3cQTYx/iGyf0GCnmRjh7VIOQF\\\n",
+ "QJAsfHihqZ+rK5xWqLU3r7WhIoDPa1iH/XPncQQYcEhXyMtA17l1hby8vOdlrblxjTJCGSmsEABS\\\n",
+ "r+NQR0qXAwbD5zXgL4RgAQ4h5AUAessakZXS5YDB8HkN+AsNMOCA9mi76lvrk1pmdetqRaIRewoC\\\n",
+ "AJdI9GfqjlcwtcDaQgDxeQ34EQ0w4IChhLwAgJ+V5JX0+xN1/UlTmp76+1Na+PBC3fPsPTQfsAyf\\\n",
+ "14D/0AADDkj0VKrjNe1ssrYQAHCZ7MxsLcldktQyhgy9+MaLCu8Ia8W6FcqpytHShqXqPNxpT5EI\\\n",
+ "DD6vAf+hAQYcQMgLAPSvelG16VOhpX8HEi16ZJFi8ZiFlSFo+LwG/IcGGHAAIS8A0L+MUIbW3LhG\\\n",
+ "pXmlSZ8OfSwCiTBUfF4D/kMDDDiAkBcAGFhGKEM1i2vUtqxNlfMqVTitUHmn5ilNaUk9D4FEGAo+\\\n",
+ "rwH/STMMw3C6CNgjSD+0HYlGtKpllZp3NavjUIeyRmSpYGqBSmaWaGLmRKfL66U92q7JVZOTCtYI\\\n",
+ "pYfUtqzNsb/Ha+vYi1jHwMAqN1SqYn1F8svNq1T5nHIbKoLfefHzGu4WpP1zt6IB9rEgTLBYPKay\\\n",
+ "xjLVt9b3+eEUSg+pOLdY1UXVGjV8lAMV9q+0oVS1LbWJPz6vVDWLa2ysqG9eXsdewToGErPw4YUK\\\n",
+ "7wgnvVzhtEKtvXmtDRUhCLzyeQ1vCML+udtxCjQ8KxaPqejRItW21Pb7zaybg1CSCXnJn5Kv6qJq\\\n",
+ "myvqzevr2AtYx0DiCCSCE7zweQ0gcTTA8KyyxrKEf57AjUEoiYS8hNJDKs0rVeNNjY4c+fP6OvYC\\\n",
+ "1jGQOAKJ4AQvfF4DSBynQPuYn0+x8Ns1OZFoRHVb6tS0s8k11376bR27EesYSA7XAMNpbvy8hrf4\\\n",
+ "ef/cK4Y7XQBgRl1LXVJNg3T0NNK6LXWu3AmamDlR5XPKXVWb39axG7GOgeSU5JXo7ua7k/7SqGRm\\\n",
+ "iY1VIUjc+HkNIDmcAg1PSvSU0eM17WyythAfYx3bj3UMJCc7M1tLcpcktUxxbjFH5gAA3WiA4UkE\\\n",
+ "odiPdWw/1jGQPAKJAABDQQMMTyIIxX6sY/uxjoHkEUgEABgKGmB4UqLf/h+vYGqBtYX4GOvYfqxj\\\n",
+ "wJyMUIZqFteobVmbKudVqnBaoWZPmq3CaYWqnFeptmVtqllcQ/MLAOiFFGgf82LKXCQa0aqWVWre\\\n",
+ "1TxguqKZ9Nw0pSnv1DxNyJhAYmMCSCi2H+sYAIBg8eL+ud9wBBiuEIvHVNpQqpyqHFWsr1B4R1ib\\\n",
+ "d29WeEdYK9atUE5VjpY2LFXn4U5J5oJQDBl68Y0X+31O9ETYjP1YxwAAAKlFAwzHxeIxFT1apNqW\\\n",
+ "2n6PhMWPxPVAywNa9MgixeIxSckFoST6nOiJsBn7sY4BAABShwYYjitrLEv452CadzXr9sbbJSUW\\\n",
+ "hJLsc6InwmbsxzoGAABIHa4B9jEvXGNg1TWQkWhEdVvq1LSzSXtie7TljS0ylPjQ5rrKwR27jge6\\\n",
+ "PhvmsY4BAPA3L+yf+x0NsI85PcESCbSq3FCpivUVST935bxKlc8p7/s+G54TAJyWaEggAMC9nN4/\\\n",
+ "Bw2wrzk1wWLxmMoay1TfWt/nkd1QekjFucWqLqrWFY9dofCOcNKvUTitUGtvXtvnfQsfXmj5cwKA\\\n",
+ "U5LZpnKKPAC4Gw2w84Y7XQD8pSvQaqBrervCp17e87Jih82FT3Uc6jB1n9nnBAAnJLtNXXPjGmWE\\\n",
+ "MlJYIQAA3kIIFiyVbKDVP9/9p6nXyRqRZeo+s88JAE4wGxIIAAD6RgMMy7RH21XfWp/UMm9E3zD1\\\n",
+ "WgVTC/q9z+xPIw30nAC8IxKNqHJDpRY+vFAX1F2ghQ8v1D3P3qNINOJ0aUkxs01d3brac38nAACp\\\n",
+ "RAMMy9S11CWV5ixJR4wjGpY2LKllQukhlcws6ff+krySpH8WabDnBOB+sXhMpQ2lyqnKUcX6CoV3\\\n",
+ "hLV592aFd4S1Yt0K5VTlaGnDUnUe7nS61ISY2abGj8RVt6XOpooAAPA+GmBYJtHT9I6XnZmd1OOL\\\n",
+ "c4sHTDzNzszWktwllj4nAHfrula2tqW236ax61rZRY8sUixuLn8glcxuU5t2NllbCAAAPkIDDMuY\\\n",
+ "DZE6fczpCZ+2nD8lX9VF1YM+rnpRteXPCcC9/HitLIF+AABYjwYYljEbIjV25FituXGNSvNK+z11\\\n",
+ "OZQeUmleqRpvakzoZz4yQhmWPycAd/LrtbIE+gEAYD1+BgmWyZ+Sb+r3dwumFigjlKGaxTVaeclK\\\n",
+ "1W2pU9POJnUc6lDWiCwVTC1QycySpE9RtuM5gS6RaESrWlapeVcz48phZq+VPb/2fJ110lmufd+G\\\n",
+ "sk0FAAB9SzMMw3C6CNgj1T+03R5t1+SqyUntiIbSQ2pb1ua6HU+gP7F4TGWNZapvre9zrIfSQyrO\\\n",
+ "LVZ1UTVnFqTIwocXmmoUj+XG941tKgD4T6r3z9Ebp0DDMoRPwe/8GLTkB1Zc8+rG941tKgAA1qMB\\\n",
+ "hqUIn4Kf+TFoyQ+svObVbe8b21QAAKxFAwxLET4Fv/Jr0JIfJNogJspN7xvbVAAArMU1wD7m9DUG\\\n",
+ "kWiE8Cn4RuWGSlWsr0h6uZwxObYGLRHGZe5a2cFUzqtU+Zxyy57PCl7YpjIe4RWMVTjF6f1z0AD7\\\n",
+ "GhMMsI7bgpYI4+qptKFUtS21lj1f4bRCrb15rWXP53eMR3gFYxVOY//ceZwCDQAJcFPQEmFcvSVz\\\n",
+ "rWwirHi/g4LxCK9grAKQaIABICFuCloijKu3RK6VTYaV77ffMR7hFYxVABINMAAkxC1BS4Rx9S8j\\\n",
+ "lKGaxTVqW9amynmVKpxWqJwxOaaeq2BqgbXF+RTjEV7BWAXQhQYYvheJRlS5oVILH16oC+ou0MKH\\\n",
+ "F+qeZ+/hQw1JKckrseTIYpf4kbjqttQl/PiucXzxgxcnHfaU7Gt53cTMiSqfU661N6/V/932f0m/\\\n",
+ "b6H0kEpmlthUnb/UtdQxHuEJjNXBsb+EoKABhm/F4jGVNpQqpypHFesrFN4R1ubdmxXeEdaKdSuU\\\n",
+ "U5WjpQ1L1Xm40+lS4QHZmdlakrvE0uds2tk06GOOH8fb92637bX8yMz7VpxbTApsghI9nfR4QR2P\\\n",
+ "cA5jtX/sLyFoaIDhSwRdwA6pDlpKZBxb9Vp+lsz7lj8lX9VF1TZX5B9mx1WQxyOcwVjtG/tLCCIa\\\n",
+ "YPgSQRewQ6qDlpIZx0N9LT9L5H0LpYdUmleqxpsa+emTJJgdV0Eej3AGY7Vv7C8hiGiA4TsEXcBO\\\n",
+ "qQpaMjOOzb5WEPT1vs2eNFuF0wpVOa9SbcvaVLO4huY3SWbPiAj6eETqMVZ7Y38JQZVmGIbhdBGw\\\n",
+ "R1B/aLtyQ6Uq1lckv9y8SpXPKbehIrhdJBrRqpZVat7VrI5DHcoakaWCqQUqmVmS0LWg7dF2Ta6a\\\n",
+ "nNRpyqH0kNqWtfX7/GbHsZnXAsyyY+wDdkjFWB3qZ0mqsb/kjKDun7sJR4DhOwRdIFFWBX/YEbRk\\\n",
+ "1anPibwWYBYhY/AKO8eqV0Ok2F9CUNEAw3cIukAirA7+sDpoyarxSKgT7EbIGLzCjrHq5RAp9pcQ\\\n",
+ "VDTA8B2CLpAIq4M/rA5aGup4JNQJqULIGLzCjrHq5RAp9pcQVFwD7GNBvcaAa1owGLuvBYtEI6rb\\\n",
+ "UqemnU2mrwMzO44/OP6DKp5Z7NprzuBvVox9IBWsGKtevwae/SVnBHX/3E1ogH0sqBPM6x9IsJ8X\\\n",
+ "PvT9NI69FgwDAInwwmfJQPz0OeMlQd0/dxNOgYbvEMqCwXgh+MMP49irwTAAkAgvfJYMxA+fM4AZ\\\n",
+ "NMDwJUJZMBCvBH94eRx7ORgGABLhlc+SgXj5cwYwiwYYvkQoCwbileAPL49jLwfDAEAivPJZMhAv\\\n",
+ "f84AZnENsI9xjcFRhLLgeF68bstL45jrygAEgRc/Swbipc8ZL2P/3Hk0wD7GBAP65tYGzS9hUX7b\\\n",
+ "KYSz/DIv4D9OfpYwL7yL/XPn0QD7GBMM6F9pQ6lqW2oTf3xeqWoW19hSSyweU1ljmepb6/vckQql\\\n",
+ "h1ScW6zqompPnH628OGFCu8IJ71c4bRCrb15rQ0VwYv8Ni/gT6n+LGFeeB/7587jGmAAgeSW4A8/\\\n",
+ "hkX5IRgGzvLjvIA/pfKzhHkBWIMGGEAguSX4w49hUX4IhoGz/Dgv4E+p/CxhXgDW4BRoH+MUCyAx\\\n",
+ "TgV/uPVa5KHiGmAMhV/nBfzPzs8S5oV/sH/uvOFOFwAATpuYOVHlc8pT3nzVtdQltTMjHT29rW5L\\\n",
+ "nasbxZK8Et3dfHfSO2olM0tsrMoeBNFYz6/zAv5n52cJ8wKwDqdAA4BDEj2V7XhNO5usLcRi2ZnZ\\\n",
+ "WpK7JKllinOLPdUwxuIxlTaUKqcqRxXrKxTeEdbm3ZsV3hHWinUrlFOVo6UNS9V5uNPpUj3Hr/MC\\\n",
+ "GArmBWAdGmAAcIifw6LcEjJmB4Jo7OXneQGYxbwArEMDDAAO8XNYlFtCxuxAEI29/DwvALOYF4B1\\\n",
+ "aIABwCGJHiE9XsHUAmsLsUlGKEM1i2vUtqxNlfMqVTitULMnzVbhtEJVzqtU27I21Syu8VTz2x5t\\\n",
+ "V31rfVLLrG5drUg0Yk9BPuT3eQGYwbwArEMKtI+RMge4G6me3kPCtf2YF0BvzAv/YP/ceRwBBgCH\\\n",
+ "BCEsym8IorEf8wLojXkBWIcGGAAc5OewKD8iiCY1mBdAb8wLwBo0wADgID+HRfkRQTSpwbwAemNe\\\n",
+ "ANbgGuAheu+997R27Vo1NDTo+eef186dO/X+++/rgx/8oK6++motX75cmZmZfS770EMP6Uc/+pH+\\\n",
+ "9re/acSIEZo9e7YqKip04YUXWlIb1xgA3hKJRlS3pU5NO5vUcahDWSOyVDC1QCUzSziNzSW4Bjj1\\\n",
+ "mBdAb8wL72L/3Hk0wEO0atUq3XbbbZKODuizzz5b7777rjZu3KiOjg6dddZZam5u1imnnNJjueXL\\\n",
+ "l6uqqkoZGRlauHChOjs79cwzz8gwDD3++OP65Cc/OeTamGAAYC2CaBA0kWhEq1pWqXlXM40WYAH2\\\n",
+ "z51HAzxEDz30kDZv3qxly5bpzDPP7L79jTfe0Cc+8Qlt2bJFN9xwg372s59137du3TrNnz9fJ554\\\n",
+ "ojZt2tS93KZNm1RQUKCMjAy99tprGj9+/JBqY4IBgPVKG0pV21Kb+OPzSlWzuMbGigDrxeIxlTWW\\\n",
+ "qb61vs8vfELpIRXnFqu6qJpTbYEksH/uPK4BHqLPfOYz+p//+Z8eza8knXrqqfrv//5vSdJTTz2l\\\n",
+ "Q4cOdd933333SZIqKip6LHfBBRfoc5/7nPbv368HH3wwBdUDAJJFEA38LhaPqejRItW21PZ7tkP8\\\n",
+ "SFwPtDygRY8sUiweS3GFAGAeDbCNPvrRj0qSDh48qD179khS96nOknTNNdf0WqbrtoaGhhRVCQBI\\\n",
+ "BkE08LuyxrKEf/KreVezbm+83d6CAMBCnAJto7/+9a8655xzFAqF1NHRoZEjR6q1tVUzZ87UySef\\\n",
+ "rDfffLPXMgcOHFBmZqbGjx+vd955Z0ivzykWAGAvgmjgN1znDtiL/XPnDXe6AD+rrj562tuiRYs0\\\n",
+ "cuRISdLrr78uSZo0aVKfy4wePVrjxo3T3r171dHRoawsfjoDANxqYuZElc8pJ+EZvlHXUpdU8ysd\\\n",
+ "PR26bksd8wCAJ9AA2+R3v/ud6urqFAqF9K1vfav79mg0Kkk64YQT+l129OjR2rdvn6LRaEINcNc3\\\n",
+ "Scfbvn27zjjjjCQrBwAAQZXoqc/Ha9rZRAMMwBO4BtgGf//733XTTTfJMAx973vf674WWJK6zjhP\\\n",
+ "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\\\n",
"\"\n",
"\n",
"\n",
" /* set a timeout to make sure all the above elements are created before\n",
" the object is initialized. */\n",
" setTimeout(function() {\n",
- " anima2955861de624838a41958e304b17493 = new Animation(frames, img_id, slider_id, 200.0,\n",
+ " animed69eeb3dff848aba82de90936e3b8cc = new Animation(frames, img_id, slider_id, 200.0,\n",
" loop_select_id);\n",
" }, 0);\n",
" })()\n",
"\n"
],
"text/plain": [
- ""
+ ""
]
},
- "execution_count": 1052,
+ "execution_count": 820,
"metadata": {},
"output_type": "execute_result"
}
@@ -6693,22 +6808,24 @@
"source": [
"**It worked!** \n",
"\n",
- "(At first I had a **bug**: the Christmas tree was upside down, because the Y-axis was upside down. So I added the `yaxis.set_inverted` call to `animate_robots`.)"
+ "(At first I had a **bug**: the Christmas tree was upside down, because the Y-axis was upside down. So I added the `yaxis.set_inverted` call to `animate_robots`.)\n",
+ "\n",
+ "Although there was a human in the loop to verify the output, I can make this official with this call to `answer`:"
]
},
{
"cell_type": "code",
- "execution_count": 1054,
+ "execution_count": 822,
"id": "75434bc8-35ae-4d8b-b747-01d773472541",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "Puzzle 14.2: 1.819 seconds, answer 6876 ok"
+ "Puzzle 14.2: 1.833 seconds, answer 6876 ok"
]
},
- "execution_count": 1054,
+ "execution_count": 822,
"metadata": {},
"output_type": "execute_result"
}
@@ -6730,7 +6847,7 @@
},
{
"cell_type": "code",
- "execution_count": 1056,
+ "execution_count": 824,
"id": "20be45ec-f6fc-472c-9b49-872b7334528c",
"metadata": {},
"outputs": [
@@ -6774,14 +6891,14 @@
"\n",
"The robot attempts to follow each instruction arrow (for example, moving East when the arrow is `>`). The robot is strong enough to push a line of any number of boxes sitting in front of it; that's its job. However, if a push is blocked by a wall, then neither the robot nor any boxes will move.\n",
"\n",
- "The **GPS coordinate** of a box at (*x*, *y*) is *x* + 100*y*.\n",
+ "The **GPS coordinate** of a box at (*x*, *y*) is defined to be *x* + 100*y*.\n",
"\n",
"I'll implement `obey_arrows` to make the arrow moves on a copy of the warehouse. For each arrow it finds all boxes that might move (and the robot) with `moveables`, then `make_movement` checks if they would bump into a wall, and if not, they all move."
]
},
{
"cell_type": "code",
- "execution_count": 1058,
+ "execution_count": 826,
"id": "248d51c0-424e-4bbb-bbf4-37cdc18313e1",
"metadata": {},
"outputs": [],
@@ -6817,7 +6934,7 @@
},
{
"cell_type": "code",
- "execution_count": 1059,
+ "execution_count": 827,
"id": "52e93218-6ac2-4cf7-aced-f4f3a3df77b5",
"metadata": {},
"outputs": [
@@ -6827,7 +6944,7 @@
"Puzzle 15.1: .025 seconds, answer 1563092 ok"
]
},
- "execution_count": 1059,
+ "execution_count": 827,
"metadata": {},
"output_type": "execute_result"
}
@@ -6844,7 +6961,15 @@
"source": [
"### Part 2: What is the sum of all boxes' final GPS coordinates on the double-wide grid?\n",
"\n",
- "In Part 2, there is another warehouse that is similar to the first, but twice as wide. Each position in the original warehouse is replaced by two copies of the contents, except that the robot is replaced by `@.` and a box, `O`, is replaced by `[]`, indicating the two halves of a double-wide box. The rules for movement and pushing are the same, except that when the robot is moving North or South and is pushing a box, that box, since it is two positions wide, can push *two* boxes if they are lined up right. (Presumably, those two boxes could then push three boxes in the next row, and so on, although the puzzle description did not explicitly specify that). Finally, the GPS coordinates are taken for the `[` part of the box.\n",
+ "In Part 2, there is another warehouse that is similar to the first, but twice as wide. Each position in the original warehouse is replaced by two copies of the contents, except that the robot is replaced by `@.` and a box, `O`, is replaced by `[]`, indicating the two halves of a double-wide box. The rules for movement and pushing are the same, except that when the robot is moving North or South and is pushing a box, that box, since it is two positions wide, can push *two* boxes if they are lined up right. (Presumably, those two boxes could then push three boxes in the next row, and so on, although the puzzle description did not explicitly specify that). Finally, the GPS coordinates are taken for the `[` part of the box. Here's what it looks like before and after the robot moves \"^\":\n",
+ "\n",
+ " ############## ##############\n",
+ " ##......##..## ##......##..##\n",
+ " ##..........## ##...[][]...##\n",
+ " ##...[][]...## ##....[]....##\n",
+ " ##....[]....## ##.....@....##\n",
+ " ##.....@....## ##..........##\n",
+ " ############## ##############\n",
"\n",
"So this is mostly the same as Part 1, but the criteria of what to move is different. Here are the changes I'll make:\n",
"- I'll need to make the double-wide grid, by applying `doublewide` to the original text to get `warehouse2`.\n",
@@ -6856,13 +6981,13 @@
},
{
"cell_type": "code",
- "execution_count": 1061,
+ "execution_count": 829,
"id": "2d9afbc1-75b2-479d-81fc-fbab69d25753",
"metadata": {},
"outputs": [],
"source": [
"def doublewide(text: str) -> str:\n",
- " \"\"\"Make the grid twice as wide.\"\"\"\n",
+ " \"\"\"Make the grid (described in text) twice as wide.\"\"\"\n",
" return text.replace('#', '##').replace('O', '[]').replace('.', '..').replace('@', '@.')\n",
" \n",
"warehouse2 = Grid(parse(doublewide(warehouse_woes[0])))\n",
@@ -6894,7 +7019,7 @@
},
{
"cell_type": "code",
- "execution_count": 1062,
+ "execution_count": 830,
"id": "7af49bbf-dd10-4221-9096-6f548dec44c0",
"metadata": {},
"outputs": [
@@ -6904,7 +7029,7 @@
"Puzzle 15.1: .029 seconds, answer 1563092 ok"
]
},
- "execution_count": 1062,
+ "execution_count": 830,
"metadata": {},
"output_type": "execute_result"
}
@@ -6916,7 +7041,7 @@
},
{
"cell_type": "code",
- "execution_count": 1063,
+ "execution_count": 831,
"id": "99246602-a51e-41aa-a7e9-7cdbc8d449ca",
"metadata": {},
"outputs": [
@@ -6926,7 +7051,7 @@
"Puzzle 15.2: .042 seconds, answer 1582688 ok"
]
},
- "execution_count": 1063,
+ "execution_count": 831,
"metadata": {},
"output_type": "execute_result"
}
@@ -6941,12 +7066,12 @@
"id": "4361f8c3-1d15-441e-9a41-b1ea20707651",
"metadata": {},
"source": [
- "I had a frustrating time **debugging** this one; this was by far my worst performance. First I had a silly typo in `moveables`; I was able to fix it after looking at the results on the smaller test puzzle:"
+ "I had a frustrating time **debugging** this one; this was by far my worst performance of the year. First I had a silly typo in `moveables`; I was able to fix it after looking at the results on the smaller test puzzle:"
]
},
{
"cell_type": "code",
- "execution_count": 1065,
+ "execution_count": 833,
"id": "47c99f0f-ab65-4ae1-a308-42668feacdd5",
"metadata": {},
"outputs": [
@@ -6984,7 +7109,7 @@
"id": "30a6d933-8969-427d-b82f-c5fb95d10164",
"metadata": {},
"source": [
- "That's the correct final grid, so I couldn't see what I had done wrong. It turns out that I had the movements correct, but I was mistakenly summing the GPS coordinates of *both* sides of the boxes when I should have been using just the *left* sides."
+ "That's the correct final grid, so I couldn't see what I had done wrong. It turns out that I had the movements correct, but I my **bug** was summing the GPS coordinates of *both* sides of the boxes when I should have been using just the *left* sides. Lesson learned: read the instructions carefully!"
]
},
{
@@ -6999,7 +7124,7 @@
},
{
"cell_type": "code",
- "execution_count": 1068,
+ "execution_count": 836,
"id": "03255fd5-95d9-4a90-b1bb-abdf6bbf1d85",
"metadata": {},
"outputs": [
@@ -7039,12 +7164,12 @@
"\n",
"The race through the maze starts at the `S` position and ends at the `E`. A reindeer is allowed to take a step forward (as long as there isn't a `#` wall there) or to turn 90 degrees right or left. The reindeer is initially facing East. The **score** for a path is one point for every forward step and 1000 points for every turn.\n",
"\n",
- "We're asked to find the path with the minimum score. My [AdventUtils](AdventUtils.ipynb) notebook already contains an `A_star_search` function for finding least-cost paths, and a `GridProblem` class. By default, a `GridProblem` counts one point for a move in any direction, so we'll have to create a subclass, `MazeSearchProblem`. This is straightforward but a bit tedious; I had a **bug** where I accepted the default `is_goal` and `h` methods; that doesn't work because they assume the state is just a position; but for this problem the state contains both the position and the facing direction. Another **bug** was that I left out the `goal=end` in the call to `MazeSearchProblem`. I thought I wouldn't need it because I wrote an `is_goal` method, but the `goal` is needed in the `h` method."
+ "We're asked to find the path with the minimum score. My [AdventUtils](AdventUtils.ipynb) notebook already contains an `A_star_search` function for finding least-cost paths, and a `GridProblem` class. By default, a `GridProblem` counts one point for a move in any direction, so we'll have to create a subclass, `MazeSearchProblem`. This is straightforward but a bit tedious; I had a **bug** where I accepted the default `is_goal` and `h` methods; that doesn't work because they assume the state is just a position; but for this problem the state contains both the position and the facing direction. Another **bug** was that I left out the `goal=end` in the call to `MazeSearchProblem`. I thought I wouldn't need it because I wrote an `is_goal` method, but the `goal` is needed in the `h` (heuristic estimate) method."
]
},
{
"cell_type": "code",
- "execution_count": 1070,
+ "execution_count": 838,
"id": "e6e4bfba-0170-436a-961b-d4749f2cd66e",
"metadata": {},
"outputs": [],
@@ -7077,7 +7202,7 @@
},
{
"cell_type": "code",
- "execution_count": 1071,
+ "execution_count": 839,
"id": "4974c14c-86da-4b86-a55c-6ae8781df207",
"metadata": {},
"outputs": [
@@ -7087,7 +7212,7 @@
"Puzzle 16.1: .139 seconds, answer 103512 ok"
]
},
- "execution_count": 1071,
+ "execution_count": 839,
"metadata": {},
"output_type": "execute_result"
}
@@ -7109,7 +7234,7 @@
},
{
"cell_type": "code",
- "execution_count": 1073,
+ "execution_count": 841,
"id": "692abfea-f9c8-477c-8369-386cdd2a7606",
"metadata": {},
"outputs": [],
@@ -7141,17 +7266,17 @@
},
{
"cell_type": "code",
- "execution_count": 1074,
+ "execution_count": 842,
"id": "ea9bf9f3-0e6b-4949-a641-6b3db2fd9d32",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "Puzzle 16.2: .982 seconds, answer 554 ok"
+ "Puzzle 16.2: .985 seconds, answer 554 ok"
]
},
- "execution_count": 1074,
+ "execution_count": 842,
"metadata": {},
"output_type": "execute_result"
}
@@ -7168,12 +7293,12 @@
"source": [
"# [Day 17](https://adventofcode.com/2024/day/17): Chronospatial Computer\n",
"\n",
- "Today we have to help debug a faulty computer. This particular computer has three registers, A, B, and C, and a program consisting of a sequence of octal digits. The input is a description of the state of the computer:"
+ "Today we have to help debug a faulty computer. This particular computer has three registers, A, B, and C, and a program consisting of a sequence of octal digits. The input is a description of the state of the computer; the values in the register and the stored program."
]
},
{
"cell_type": "code",
- "execution_count": 1076,
+ "execution_count": 844,
"id": "50fd3cb8-0a6f-4edd-b5cb-f7b1e6f9d987",
"metadata": {},
"outputs": [
@@ -7217,7 +7342,7 @@
},
{
"cell_type": "code",
- "execution_count": 1077,
+ "execution_count": 845,
"id": "c23b8a44-e352-4a30-abe5-3c939ffc743c",
"metadata": {},
"outputs": [
@@ -7227,7 +7352,7 @@
"Computer(A=52042868, B=0, C=0, prog=[2, 4, 1, 7, 7, 5, 0, 3, 4, 4, 1, 7, 5, 5, 3, 0])"
]
},
- "execution_count": 1077,
+ "execution_count": 845,
"metadata": {},
"output_type": "execute_result"
}
@@ -7241,14 +7366,14 @@
"id": "031ec910-e249-487b-ae95-b98abae3b9cf",
"metadata": {},
"source": [
- "### Part 1: What do you get if you use commas to join the output values?\n",
+ "### Part 1: Run the Program. What do you get if you use commas to join the output values?\n",
"\n",
"Now we have to run the program. The computer has eight opcodes; each opcode operates on the following value in memory; some instructions take the operand literally, and some compute a **combo** value from it (equal to register A, B, or C if the value is 4, 5, or 6, respectively; otherwise the value itself). There is a program counter (pc) that increments by 2, unless there is a branch instuction (opcode 3). See the [day's description](https://adventofcode.com/2024/day/17) for details on how the opcodes work. Or look at my `run_program` function, which yields the outputs from running the program:"
]
},
{
"cell_type": "code",
- "execution_count": 1079,
+ "execution_count": 847,
"id": "d98f88cc-c435-43fc-bcb5-52e6dd70fdb1",
"metadata": {},
"outputs": [],
@@ -7283,7 +7408,7 @@
},
{
"cell_type": "code",
- "execution_count": 1081,
+ "execution_count": 849,
"id": "860f24e5-92ad-4361-8920-102ebc573598",
"metadata": {},
"outputs": [
@@ -7293,7 +7418,7 @@
"Puzzle 17.1: .000 seconds, answer 2,1,0,1,7,2,5,0,3 ok"
]
},
- "execution_count": 1081,
+ "execution_count": 849,
"metadata": {},
"output_type": "execute_result"
}
@@ -7330,14 +7455,16 @@
" output B \n",
" if A: goto top \n",
"\n",
- "So I realized that one octal digit of `A` is eliminated on each pass through the loop, and when `A` hits zero, we exit. Each pass outputs one octal digit, so `A` in octal has to be the same length as my program; somewhere in the ten trillion range. Good thing I gave up on brute force. \n",
+ "So I realized that one octal digit of `A` is eliminated on each pass through the loop, and when `A` hits zero, we exit. Each pass outputs one octal digit, so `A` in octal has to be the same number of digits as my program; 16 octal digits is somewhere in the hundred trillion range. Good thing I gave up on brute force. \n",
"\n",
- "I realized that I should go right-to-left, outputing one octal digit at a time, and appending one octal digit at a time to `A`. After some trial and error I got the following:"
+ "I realized that I should go right-to-left, outputing one octal digit at a time, and appending one octal digit at a time to `A`. \n",
+ "\n",
+ "I started playing around like this and found a pattern:"
]
},
{
"cell_type": "code",
- "execution_count": 1083,
+ "execution_count": 851,
"id": "bb745303-dd20-486f-bbdd-7ae77f995c2c",
"metadata": {},
"outputs": [],
@@ -7349,7 +7476,7 @@
},
{
"cell_type": "code",
- "execution_count": 1084,
+ "execution_count": 852,
"id": "54ac9b9c-70d9-4356-91c5-40fb285634b4",
"metadata": {},
"outputs": [
@@ -7359,7 +7486,7 @@
"[2, 4, 1, 7, 7, 5, 0, 3, 4, 4, 1, 7, 5, 5, 3, 0]"
]
},
- "execution_count": 1084,
+ "execution_count": 852,
"metadata": {},
"output_type": "execute_result"
}
@@ -7370,7 +7497,7 @@
},
{
"cell_type": "code",
- "execution_count": 1085,
+ "execution_count": 853,
"id": "36d89d9a-c8fc-41be-820b-cb13e40793c0",
"metadata": {},
"outputs": [
@@ -7380,18 +7507,18 @@
"[0]"
]
},
- "execution_count": 1085,
+ "execution_count": 853,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "run_with(A=0o7)"
+ "run_with(A=0o7) # match the last digit of program"
]
},
{
"cell_type": "code",
- "execution_count": 1086,
+ "execution_count": 854,
"id": "892fef38-5f9b-4370-a242-f7a10df5487b",
"metadata": {},
"outputs": [
@@ -7401,18 +7528,18 @@
"[3, 0]"
]
},
- "execution_count": 1086,
+ "execution_count": 854,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "run_with(A=0o72)"
+ "run_with(A=0o72) # match the last two digits of program"
]
},
{
"cell_type": "code",
- "execution_count": 1087,
+ "execution_count": 855,
"id": "b3d11d5e-30c2-419f-bc11-3f26fbdddfbb",
"metadata": {},
"outputs": [
@@ -7422,13 +7549,13 @@
"[5, 3, 0]"
]
},
- "execution_count": 1087,
+ "execution_count": 855,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "run_with(A=0o726)"
+ "run_with(A=0o726) # match the last three digits of program"
]
},
{
@@ -7436,18 +7563,18 @@
"id": "f40f775f-bb9d-459c-80c3-ac09b6b42904",
"metadata": {},
"source": [
- "That is, my program ends in `5,3,0`, and an octal `7` outputs a `0`; an octal `0o72` outputs `3,0`, and octal `0o726` outputs `5,3,0`. So here's my approach for finding the Quine program:\n",
- "- I'm going to keep a set of candidate values for `A` as the set `As`.\n",
- "- The set starts with just `{0}`.\n",
+ "That is, if I can pick the right octal digits, then each time I append a digit to the right of `A`, the run of the program outputs one more correct digit of the tail of my program. But there might be several digit values that work for the current digit, but might screw up later. So here's my approach for finding the Quine program:\n",
+ "- I'm going to keep a **set** of candidate values for `A` as the set `As` (because there may be several good digits at each step).\n",
+ "- The set starts with no digits, so just `{0}`.\n",
"- On each iteration I try appending each octal digit to each element of the set `As`.\n",
"- I keep the candidate `A` values whose output matches the tail of the program's output.\n",
"- Iterate this for each digit and return the set of `A` values that produce the whole program.\n",
- "- Take the minium of the set."
+ "- Take the minimum of the set."
]
},
{
"cell_type": "code",
- "execution_count": 1089,
+ "execution_count": 857,
"id": "a49c6de9-4e6b-47e5-bcf0-2972a95c1af3",
"metadata": {},
"outputs": [
@@ -7457,7 +7584,7 @@
"Puzzle 17.2: .004 seconds, answer 267265166222235 ok"
]
},
- "execution_count": 1089,
+ "execution_count": 857,
"metadata": {},
"output_type": "execute_result"
}
@@ -7466,9 +7593,9 @@
"def quine(computer) -> Set[int]:\n",
" \"\"\"Find the values of `A` that cause the output to match the program.\"\"\"\n",
" As = {0}\n",
- " for d in reversed(range(len(computer.prog))):\n",
- " tail = computer.prog[d:]\n",
- " candidates = {(A << 3) + i for A in As for i in range(8)}\n",
+ " for place in reversed(range(len(computer.prog))):\n",
+ " tail = computer.prog[place:]\n",
+ " candidates = {(A * 8) + d for A in As for d in range(8)}\n",
" As = {A for A in candidates if run_with(A=A) == tail}\n",
" return As\n",
"\n",
@@ -7488,7 +7615,7 @@
},
{
"cell_type": "code",
- "execution_count": 1091,
+ "execution_count": 859,
"id": "d14e1966-2feb-4553-9a0a-12595ef4f7d7",
"metadata": {},
"outputs": [
@@ -7543,7 +7670,7 @@
},
{
"cell_type": "code",
- "execution_count": 1093,
+ "execution_count": 861,
"id": "83af4751-38c9-4830-a2fa-78515b59bc97",
"metadata": {},
"outputs": [],
@@ -7552,13 +7679,13 @@
" \"\"\"Make a Grid of the given size with the points as obstacles.\"\"\"\n",
" grid = Grid(['.' * width] * height)\n",
" grid.update({p: '#' for p in falling_bytes})\n",
- " problem = GridProblem(grid=grid, initial=(0, 0), goal=sub(grid.size, (1, 1)))\n",
+ " problem = GridProblem(grid=grid, initial=(0, 0), goal=(width - 1, height - 1))\n",
" return A_star_search(problem)"
]
},
{
"cell_type": "code",
- "execution_count": 1094,
+ "execution_count": 862,
"id": "29da25e2-f3c2-43e3-8769-1d4fcecb807b",
"metadata": {},
"outputs": [
@@ -7568,7 +7695,7 @@
"Puzzle 18.1: .014 seconds, answer 344 ok"
]
},
- "execution_count": 1094,
+ "execution_count": 862,
"metadata": {},
"output_type": "execute_result"
}
@@ -7587,12 +7714,12 @@
"\n",
"After 1024 bytes fall there is a path from start to exit, but as more bytes fall we might have to switch to a different path, and eventually there will be no path. We're asked for the `x,y` position of the first falling byte that blocks off all paths. I can think of two ways to handle this:\n",
"1) Add falling bytes one at a time and repeat the A-star search each time. **Slow!**\n",
- "2) Add falling bytes in binary search fashion: We know adding no bytes is **good** for getting a path and adding all of them is **bad**; try half way and then update **good** or **bad** depending on whether we found a path. **Fast!**"
+ "2) Add falling bytes in **binary search** fashion: We know adding no bytes is **good** for getting a path and adding all of them is **bad**; try half way and then update **good** or **bad** depending on whether we found a path. **Fast!**"
]
},
{
"cell_type": "code",
- "execution_count": 1096,
+ "execution_count": 864,
"id": "4c0a8dcb-c3af-45e7-9273-8776e8c3ea1d",
"metadata": {},
"outputs": [],
@@ -7611,17 +7738,17 @@
},
{
"cell_type": "code",
- "execution_count": 1097,
+ "execution_count": 865,
"id": "22371144-5d51-440a-918f-a63de73b13ad",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "Puzzle 18.2: .042 seconds, answer 46,18 ok"
+ "Puzzle 18.2: .032 seconds, answer 46,18 ok"
]
},
- "execution_count": 1097,
+ "execution_count": 865,
"metadata": {},
"output_type": "execute_result"
}
@@ -7653,7 +7780,7 @@
},
{
"cell_type": "code",
- "execution_count": 1100,
+ "execution_count": 868,
"id": "689df92b-92d7-44e6-8b4e-d67bf3f153df",
"metadata": {},
"outputs": [
@@ -7697,7 +7824,7 @@
},
{
"cell_type": "code",
- "execution_count": 1102,
+ "execution_count": 870,
"id": "e0b96545-5f60-4c8e-9a0f-c77608c19128",
"metadata": {},
"outputs": [],
@@ -7711,17 +7838,17 @@
},
{
"cell_type": "code",
- "execution_count": 1103,
+ "execution_count": 871,
"id": "3c3fba1b-d3e5-494e-aad0-42ca0566ae1f",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "Puzzle 19.1: .046 seconds, answer 242 ok"
+ "Puzzle 19.1: .040 seconds, answer 242 ok"
]
},
- "execution_count": 1103,
+ "execution_count": 871,
"metadata": {},
"output_type": "execute_result"
}
@@ -7743,7 +7870,7 @@
},
{
"cell_type": "code",
- "execution_count": 1105,
+ "execution_count": 873,
"id": "77d4fae1-d506-4733-9bb2-467619012f97",
"metadata": {},
"outputs": [],
@@ -7758,17 +7885,17 @@
},
{
"cell_type": "code",
- "execution_count": 1106,
+ "execution_count": 874,
"id": "14116eca-0b0f-484a-a169-9726e4ac7fbf",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "Puzzle 19.2: .215 seconds, answer 595975512785325 ok"
+ "Puzzle 19.2: .185 seconds, answer 595975512785325 ok"
]
},
- "execution_count": 1106,
+ "execution_count": 874,
"metadata": {},
"output_type": "execute_result"
}
@@ -7788,7 +7915,7 @@
},
{
"cell_type": "code",
- "execution_count": 1108,
+ "execution_count": 876,
"id": "f992b197-be14-47dc-8678-10cc63a1afd7",
"metadata": {},
"outputs": [],
@@ -7807,17 +7934,17 @@
},
{
"cell_type": "code",
- "execution_count": 1110,
+ "execution_count": 878,
"id": "57296f79-d0a0-4de3-bb1c-b3ed84ba1a59",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "Puzzle 19.1: .003 seconds, answer 242 ok"
+ "Puzzle 19.1: .002 seconds, answer 242 ok"
]
},
- "execution_count": 1110,
+ "execution_count": 878,
"metadata": {},
"output_type": "execute_result"
}
@@ -7844,7 +7971,7 @@
},
{
"cell_type": "code",
- "execution_count": 1112,
+ "execution_count": 880,
"id": "156dcbf7-79ec-41a7-a9f2-397a827b9856",
"metadata": {},
"outputs": [
@@ -7887,7 +8014,7 @@
},
{
"cell_type": "code",
- "execution_count": 1114,
+ "execution_count": 882,
"id": "4c4ef05c-b548-49f9-b092-847e9752e745",
"metadata": {},
"outputs": [],
@@ -7906,7 +8033,7 @@
" return D\n",
"\n",
"def cheats(racetrack, lower_bound=1) -> Iterable[Tuple[Point, Point, int]]:\n",
- " \"\"\"All ways of cheating by taking one step onto a wall and a second step back on track.\"\"\"\n",
+ " \"\"\"All ways of cheating by taking one step onto a wall (at p2) and a second step back on track (at p3).\"\"\"\n",
" D = dijkstra(racetrack, 'E')\n",
" return ((p1, p3, t)\n",
" for p1 in D\n",
@@ -7917,17 +8044,17 @@
},
{
"cell_type": "code",
- "execution_count": 1115,
+ "execution_count": 883,
"id": "1bbd8b72-c503-4384-aaea-a5bed45a4491",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "Puzzle 20.1: .037 seconds, answer 1343 ok"
+ "Puzzle 20.1: .029 seconds, answer 1343 ok"
]
},
- "execution_count": 1115,
+ "execution_count": 883,
"metadata": {},
"output_type": "execute_result"
}
@@ -7949,22 +8076,22 @@
"\n",
"### Part 2: How many big cheats would save you at least 100 picoseconds?\n",
"\n",
- "In Part 2 you can use a much bigger cheat, of up to 20 picoseconds. (But you can still only use one cheat.) I'll tackle this by looking at all points in a neighborhood of radius 20 from each starting point on the path."
+ "In Part 2 you can use a much bigger cheat, of up to 20 steps (and thus 20 picoseconds). But you can still only use one cheat. I'll tackle this by looking at all points in a neighborhood of radius 20 from each starting point on the path."
]
},
{
"cell_type": "code",
- "execution_count": 1117,
+ "execution_count": 885,
"id": "d370e24c-9b82-4415-82a5-7afe2be17654",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "Puzzle 20.2: .822 seconds, answer 982891 ok"
+ "Puzzle 20.2: .757 seconds, answer 982891 ok"
]
},
- "execution_count": 1117,
+ "execution_count": 885,
"metadata": {},
"output_type": "execute_result"
}
@@ -7981,7 +8108,7 @@
"def neighborhood(point, radius) -> List[Point]:\n",
" \"\"\"All points within `radius` of `point` (using taxi distance).\"\"\"\n",
" (x, y) = point\n",
- " return [(x + dx, y+ dy) \n",
+ " return [(x + dx, y + dy) \n",
" for dx in range(-radius, radius + 1)\n",
" for dy in range(-(radius - abs(dx)), radius - abs(dx) + 1)]\n",
"\n",
@@ -7999,17 +8126,17 @@
},
{
"cell_type": "code",
- "execution_count": 1119,
+ "execution_count": 887,
"id": "332e9c72-db9a-4b90-a649-45f7bf955e84",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "Puzzle 20.1: .022 seconds, answer 1343 ok"
+ "Puzzle 20.1: .023 seconds, answer 1343 ok"
]
},
- "execution_count": 1119,
+ "execution_count": 887,
"metadata": {},
"output_type": "execute_result"
}
@@ -8031,7 +8158,7 @@
},
{
"cell_type": "code",
- "execution_count": 1121,
+ "execution_count": 889,
"id": "9d0eea9f-9d8f-4410-97ec-13d8b136925b",
"metadata": {},
"outputs": [
@@ -8080,6 +8207,8 @@
"- Robot 2 presses some buttons on Robot 1's remote keypad (e.g. \" int:\n",
- " \"\"\"Compute the `nth` next secret number after this secret number.\"\"\"\n",
+ " \"\"\"Compute the `n`th next secret number after this secret number.\"\"\"\n",
" for _ in range(n):\n",
" secret ^= (secret * 64) % 16777216\n",
" secret ^= (secret // 32) % 16777216\n",
@@ -8366,17 +8524,17 @@
},
{
"cell_type": "code",
- "execution_count": 1141,
+ "execution_count": 911,
"id": "fce754cd-f6da-4e7d-b406-3314c9c28ca8",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "Puzzle 22.1: .319 seconds, answer 14273043166 ok"
+ "Puzzle 22.1: .305 seconds, answer 14273043166 ok"
]
},
- "execution_count": 1141,
+ "execution_count": 911,
"metadata": {},
"output_type": "execute_result"
}
@@ -8391,36 +8549,39 @@
"id": "80fea986-b9f3-4184-94b5-5fda551ce115",
"metadata": {},
"source": [
- "I note that all the the integer constants in `nth_new_secret` are powers of 2; I wonder if I will have to analyze exactly what is going on with these bit operations for Part 2. \n",
+ "I note that all the the integer constants in `nth_secret` are powers of 2, so they could be replaced by bit operations. I wonder if I will have to analyze exactly what is going on with these bit operations for Part 2. \n",
"\n",
"### Part 2: What is the most bananas you can get?\n",
"\n",
- "Knowing the secret numbers is not the whole story. Each buyer monkey has a **price** in bananas that they are offering at each time step. The price is the ones digit of their secret number (i.e., the secret number mod 10). Each monkey wants to buy one hiding spot. We would like to wait for the highest price from each monkey, but we don't speak monkeese. We do have a translator who speaks a few words, put unfortunately, the translator doesn't know enough to help us sell as soon as the price hits 9 (or 8, or whatever). The translator has only the ability help as follows:\n",
- "- We tell the translator a watch for a sequence of four deltas in price from one time step to the next for the first monkey.\n",
+ "Knowing the timeline of secret numbers is not the whole story. Each buyer monkey has a **price** in bananas that they are offering at each time step. The price is the ones digit of their secret number (e.g., for secret number 9524047 the price is 7 bananas). Each monkey wants to buy exactly one hiding spot. We would like to wait for the highest price from each monkey, but we don't speak monkeese. We do have a translator who speaks a few words, put unfortunately, the translator doesn't know enough to help us sell as soon as the price hits 9 (or 8, or whatever). The translator has only the ability to help as follows:\n",
+ "- We tell the translator to watch for a specific sequence of four deltas in price from one time step to the next for the first monkey.\n",
" - For example, watch for the deltas (**+1, -2, 0, +3**) in the price timeline.\n",
- "- As soon as that sequence of 4 deltas appears in the monkey's price history, we sell a hiding spot for the current price.\n",
+ "- As soon as that sequence of 4 deltas appears in a monkey's price timeline, we sell that monkey a hiding spot for the current price.\n",
" - For example, if the prices are (3, 3, 3, 5, 6, 4, 4, 7, ...) then the deltas are (0, 0, +2, **+1, -2, 0, +3**, ...) and we sell for 7 bananas.\n",
- "- The translator simultaneously does the same for all the other monkeys.\n",
+ "- The translator simultaneously monitors all the monkeys.\n",
"\n",
"Our task is to get the most possible bananas under these constraints. \n",
"\n",
- "Can we brute-force it? Each delta is between -9 and +9, so the number of possible 4-tuples of deltas is 194 or about 100,000; a small number. However, if for each possible 4-tuple of deltas I looked at all 2000 steps of all 1685 monkeys, then 194 * 2000 * 1685 > 400 billion is a large number. So instead I'll do this:\n",
+ "Can we brute-force it? Each delta is between -9 and +9, so the number of possible 4-tuples of deltas is 194 or about 100,000; a small number. However, if for each possible 4-tuple of deltas I looked at all 2000 steps of all 1685 monkeys, then 194 * 2000 * 1685 is more than 400 billion, which is a medium-large number. So instead I'll do this:\n",
"\n",
" For each monkey:\n",
" For each 4-tuple of price deltas in the monkey's price timeline:\n",
- " If this is the first time this 4-tuple appeared in this monkey's sequence of deltas:\n",
+ " If this is the first time this 4-tuple appeared in this monkey's timeline:\n",
" then increment the total number of bananas for this 4-tuple by the current price\n",
" Finally, take the maximum of the numbers of bananas, across all the recorded 4-tuples\n",
"\n",
"Some details:\n",
- "- A `defaultdict(int)` is a great data structure for the 4-tuple to bananas mapping.\n",
- "- A `deque` with `maxlen=4` is a good data structure for keeping the 4-tuple; just append to it.\n",
- "- I now call `nth_secret(secret, 1)`, so I wish I had made a separate function for that in Part 1; it would probably speed things up by a few percent."
+ "- A `defaultdict(int)` is a great data structure for the 4-tuple to bananas mapping (a `Counter` is also good).\n",
+ "- A `deque` with `maxlen=4` is a good data structure for keeping the evolving 4-tuple; just append to the deque and it drops old deltas.\n",
+ "- I now call `nth_secret(secret, 1)`, so I wish I had made a separate `next_secret` function in Part 1; it would probably speed things up by a percent or two.\n",
+ "- `price_timeline` returns a dict of `{delta-4-tuple: price}` for all the first appearances of a 4-tuple in a given monkey's timeline.\n",
+ "- `total_bananas` returns a dict of `{delta-4-tuple: total_price}`, computing the total across all monkeys.\n",
+ "- Then we just take the `max` of the `values` of the result of `total_bananas`."
]
},
{
"cell_type": "code",
- "execution_count": 1369,
+ "execution_count": 913,
"id": "cbbb4793-b13d-4a95-ba03-673b3ebaa229",
"metadata": {},
"outputs": [],
@@ -8453,17 +8614,17 @@
},
{
"cell_type": "code",
- "execution_count": 1371,
+ "execution_count": 914,
"id": "34eaf7fe-fe9b-4858-b1e8-e4c3713ea093",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "Puzzle 22.2: 1.294 seconds, answer 1667 ok"
+ "Puzzle 22.2: 1.295 seconds, answer 1667 ok"
]
},
- "execution_count": 1371,
+ "execution_count": 914,
"metadata": {},
"output_type": "execute_result"
}
@@ -8483,7 +8644,7 @@
},
{
"cell_type": "code",
- "execution_count": 1146,
+ "execution_count": 916,
"id": "a2da8c78-d240-4c52-a83a-f3599f4f69a4",
"metadata": {},
"outputs": [
@@ -8493,7 +8654,7 @@
"(-3, 2, -1, 2)"
]
},
- "execution_count": 1146,
+ "execution_count": 916,
"metadata": {},
"output_type": "execute_result"
}
@@ -8509,12 +8670,12 @@
"id": "1e1c48b3-bfff-4e5d-8f6f-9c9fff5f6baa",
"metadata": {},
"source": [
- "Now, how many monkeys had this in their timeline, and what prices did each buy at? What was the mean price?"
+ "Now, how many monkeys had this 4-tuple in their timeline, and what prices did each buy at? What was the mean price?"
]
},
{
"cell_type": "code",
- "execution_count": 1383,
+ "execution_count": 918,
"id": "9de3f365-c546-494a-a18c-2ae58d88792b",
"metadata": {},
"outputs": [
@@ -8532,12 +8693,53 @@
"print(f'{len(prices)} monkeys ({len(prices)/len(secrets):.0%}), price {mean(prices):3.1f} mean: {histo}')"
]
},
+ {
+ "cell_type": "markdown",
+ "id": "7fac136e-b676-49c9-91f1-a209b9ef53fa",
+ "metadata": {},
+ "source": [
+ "We do pretty well on prices, getting a lot of 8 and 9 prices, but only 16% of monkeys every get this sequence of price deltas.\n",
+ "\n",
+ "Do any 4-tuples show up in more timelines?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 920,
+ "id": "4fc191f9-62d8-47ef-a571-8c0541e25f4d",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[((0, -1, 1, -1), 322),\n",
+ " ((-1, 0, 0, 0), 315),\n",
+ " ((0, -1, 0, 0), 315),\n",
+ " ((-1, 0, 1, 0), 312),\n",
+ " ((1, -2, 1, 0), 303),\n",
+ " ((0, 1, -1, 0), 302),\n",
+ " ((0, 0, 0, 0), 297),\n",
+ " ((0, 1, 0, 0), 295),\n",
+ " ((0, 1, 0, -1), 295),\n",
+ " ((1, -1, 0, 0), 292)]"
+ ]
+ },
+ "execution_count": 920,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "counts = Counter(delta for secret in secrets for delta in price_timeline(secret))\n",
+ "counts.most_common(10)"
+ ]
+ },
{
"cell_type": "markdown",
"id": "1fa741c6-ecf7-4459-a017-ffa574352d7e",
"metadata": {},
"source": [
- "We do pretty well on prices, getting a lot of 8 and 9 prices, but only 16% of monkeys every get this sequence of price deltas."
+ "Yes, but not by much, and they are mostly negative-trending 4-tuples. I guess that's why they yielded lower totals."
]
},
{
@@ -8552,7 +8754,7 @@
},
{
"cell_type": "code",
- "execution_count": 1393,
+ "execution_count": 923,
"id": "85f5b145-8c5e-448c-8b45-ad5750252ff2",
"metadata": {},
"outputs": [
@@ -8603,7 +8805,7 @@
},
{
"cell_type": "code",
- "execution_count": 1152,
+ "execution_count": 925,
"id": "289d2325-1e58-41f5-b4b2-b90ae26e7887",
"metadata": {},
"outputs": [],
@@ -8628,17 +8830,17 @@
},
{
"cell_type": "code",
- "execution_count": 1395,
+ "execution_count": 926,
"id": "6425577d-4ca9-45de-9698-cd9b026f7ce6",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "Puzzle 23.1: .003 seconds, answer 1170 ok"
+ "Puzzle 23.1: .001 seconds, answer 1170 ok"
]
},
- "execution_count": 1395,
+ "execution_count": 926,
"metadata": {},
"output_type": "execute_result"
}
@@ -8655,12 +8857,12 @@
"source": [
"### Part 2: What is the password to get into the LAN party?\n",
"\n",
- "In Part 2 we learn two important facts. First, the LAN party is the largest **clique** in the graph. Second, the password is formed by listing the names of all the computers in the LAN party in alphabetical order, and separating them by commas. The function `maximum_clique` finds the largest clique; and `password` creates the password. The function `expand_clique` takes a node, a graph, and a partially-formed clique. It adds the node to the clique, and recursively looks for and adds any other nodes that should be added, finally returning the clique."
+ "In Part 2 we learn two important facts. First, the LAN party is the largest **clique** in the graph. Second, the **password** is formed by listing the names of all the computers in the LAN party in alphabetical order, and separating them by commas. The function `maximum_clique` finds the largest clique; and `password` creates the password. The function `expand_clique` takes a node, a graph, and a partially-formed clique. It adds the node to the clique, and recursively looks for and adds any other nodes that should be added, finally returning the clique."
]
},
{
"cell_type": "code",
- "execution_count": 1386,
+ "execution_count": 928,
"id": "88811073-22b2-4378-afa5-9d38462c63b5",
"metadata": {},
"outputs": [],
@@ -8682,17 +8884,17 @@
},
{
"cell_type": "code",
- "execution_count": 1397,
+ "execution_count": 929,
"id": "0b5f08ac-18e2-4933-9737-cdbc842c5809",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "Puzzle 23.2: .008 seconds, answer bo,dd,eq,ik,lo,lu,ph,ro,rr,rw,uo,wx,yg ok"
+ "Puzzle 23.2: .003 seconds, answer bo,dd,eq,ik,lo,lu,ph,ro,rr,rw,uo,wx,yg ok"
]
},
- "execution_count": 1397,
+ "execution_count": 929,
"metadata": {},
"output_type": "execute_result"
}
@@ -8707,7 +8909,9 @@
"id": "afa122bf-4459-49c8-98bf-ddc3667fa50c",
"metadata": {},
"source": [
- "I got the right answer, and it was very quick (for me), but now I'm not sure it handles all possible inputs. Consider the following network, where `{BCD}` means the three nodes form a (non-maximal) clique, and a dashed line means all nodes on each side are connected.\n",
+ "*Terminology note:* A **maximum clique** is a largest clique in the graph. A **maximal clique** is a clique to which no other node can be added to form a larger clique. Say there are 3 nodes that form a triangle. That's a clique. But if there is a fourth node that is connected to all three noddes in the triangle, then that too is a clique, and it means the triangle is not a maximal clique.\n",
+ "\n",
+ "*Second thoughts:* I got the right answer, and I coded it up quickly (for me) without errors, but now I'm not sure it handles all possible inputs. Consider the following network, where `{BCD}` means the three nodes form a (non-maximal) clique, and a dashed line means all nodes on each side are connected.\n",
"\n",
" {BCD}--{A}--{EF}\n",
"\n",
@@ -8730,7 +8934,7 @@
},
{
"cell_type": "code",
- "execution_count": 1158,
+ "execution_count": 932,
"id": "47421581-71df-4c72-a62e-c40d0596fdbb",
"metadata": {},
"outputs": [
@@ -8776,12 +8980,12 @@
"source": [
"### Part 1: Simulate the system of gates and wires. What decimal number does it output on the wires starting with z?\n",
"\n",
- "We can't just treat the device as a program where we execute statements in order, because in a line like `z01 = bfn XOR y33`, the values of `bfn` and `y33` may not yet be determined. But we can execute *backwards*, as a [dataflow architecture](https://en.wikipedia.org/wiki/Dataflow_architecture). To go backwards we'll need a mapping from each output wire to where it comes from: either a bit value or a gate. I'll define `Device` as a subclass of `dict` where the keys are wire names and the values are either bits or gates."
+ "We can't just treat the device as a program where we execute statements in order, because in a statement like `z01 = bfn XOR y33`, the values of `bfn` and `y33` may not yet be determined. But we can execute *backwards*, as a [dataflow architecture](https://en.wikipedia.org/wiki/Dataflow_architecture). To go backwards we'll need a mapping from each output wire to where it comes from: either a bit value or a gate. I'll define `Device` as a subclass of `dict` where the keys are wire names and the values are either bits or gates."
]
},
{
"cell_type": "code",
- "execution_count": 1160,
+ "execution_count": 934,
"id": "43b29260-d912-4cfc-91ce-d303ec1c86df",
"metadata": {},
"outputs": [],
@@ -8793,8 +8997,8 @@
" match line: \n",
" case (wire, bit): # e.g., ('x00', 1)\n",
" self[wire] = bit\n",
- " case (x, op, y, out): # e.g., ('y33', 'AND', 'x33', 'bfn')\n",
- " self[out] = (x, op, y)"
+ " case (x, op, y, wire): # e.g., ('y33', 'AND', 'x33', 'bfn')\n",
+ " self[wire] = (x, op, y)"
]
},
{
@@ -8802,12 +9006,12 @@
"id": "ff09bc35-43a4-45c1-bc00-c9cd6a1d7f69",
"metadata": {},
"source": [
- "Next, the function `simulate` does the dataflow computation. We start from the outputs (the wires whose first letter is `'z'`) and try to **get** their values. If the value is a bit, great, we got it. If the value is a gate, then we recursively **get** the values of both input wires to the gate, and perform the gate's boolean operation on them. When we're done calculating all the output variables, the function `simulate` returns their values as a string of `'0'` or `'1'` characters."
+ "Next, the function `simulate` does the dataflow computation. We start from the outputs (the wires whose first letter is `'z'`) and try to **get** their values. If the value is a bit, great, we got it. If the value is a gate, then we recursively **get** the values of both of the gate's input wires, and perform the gate's boolean operation on them. When we're done calculating all the output variables, the function `simulate` returns their values as a string of `'0'` or `'1'` characters."
]
},
{
"cell_type": "code",
- "execution_count": 1162,
+ "execution_count": 936,
"id": "a9a4780f-6033-452f-b49c-74b97c9e2440",
"metadata": {},
"outputs": [],
@@ -8829,7 +9033,7 @@
},
{
"cell_type": "code",
- "execution_count": 1163,
+ "execution_count": 937,
"id": "72437439-dddf-4202-9944-36e796800304",
"metadata": {},
"outputs": [
@@ -8839,7 +9043,7 @@
"Puzzle 24.1: .001 seconds, answer 36035961805936 ok"
]
},
- "execution_count": 1163,
+ "execution_count": 937,
"metadata": {},
"output_type": "execute_result"
}
@@ -8864,19 +9068,23 @@
"source": [
"### Part 2: What do you get if you sort the names of the eight wires involved in a swap and then join those names with commas?\n",
"\n",
- "In Part 2 we are told that the system is attempting to do addition: treating the `x` wires as a binary number and the `y` wires as another binary number, and computing their sum and outputting it to the `z` wires. But four pairs of output wires are swapped with each other. For example, we might have gates `a XOR b -> z01` and `c OR d -> z02`, but the correct gates are `a XOR b -> z02` and `c OR d -> z01`; then the swapped wires are `z01` and `z02`. Our job is to find all eight swapped wires.\n",
+ "In Part 2 we are told that the system is attempting to do addition: treating the `x` wires as a binary number and the `y` wires as another binary number, and computing their sum and outputting it to the `z` wires. But four pairs of output wires are swapped with each other. Our job is to find all eight swapped wires. For example, one pair might be `(z01, z02)` if we detect the following fault:\n",
"\n",
- "I have four ideas, none of them completely compelling:\n",
+ " Faulty gates: Corrected gates:\n",
+ " a XOR b -> z01 a XOR b -> z02\n",
+ " c XOR d -> z02 c XOR d -> z01\n",
+ "\n",
+ "I have four ideas of how to proceed, none of them completely compelling:\n",
"1) Plot the circuit diagram and see if anythng looks funny.\n",
- " - Making a pretty plot might be tedious, and I'm worried about the ordering of the two input wires to each gate.\n",
+ " - Making a nice plot might be tedious, and I'm worried about the ordering of the two input wires to each gate being confusing.\n",
"2) Examine the structure of the device and look for something that breaks the pattern.\n",
" - For example, calculate the depth, number of transitive inputs, number of transitive outputs, etc. for each gate, and look for broken patterns.\n",
" - This might help me, as a detective, uncover the answer, but if I was given another input device I'd have to start all over.\n",
"3) Choose `x` and `y` numbers as input, run the simulation, and compare the resulting `z` values to the correct answer.\n",
" - If I chose random numbers it might take a long time to isolate the faults.\n",
" - It is easy to identify faulty output (`z`) values; trickier to identify faults in internal gates.\n",
- " - I could test the one-bit adders one at a time (with and without carry). But I don;t know if that would always work.\n",
- "4) I know a bit about how an adder circuit is normally built; if our device is like that, we should be able to see if each bit conforms to the pattern.\n",
+ " - I could test the one-bit adders one at a time (with and without carry). But I don't know if that would always work.\n",
+ "4) I know how an adder circuit is conventionally built; if our device is like that, we should be able to see if each bit conforms to the pattern.\n",
" - When it doesn't, I can swap wires to make it conform.\n",
" - I don't know if this approach will find all faults.\n",
" - It could be that the device is a correct adder, but is built in a non-conventional way.\n",
@@ -8889,7 +9097,7 @@
},
{
"cell_type": "code",
- "execution_count": 1166,
+ "execution_count": 940,
"id": "3b41a166-d33b-402b-971b-1dc1d33135ec",
"metadata": {},
"outputs": [
@@ -8899,7 +9107,7 @@
"Counter({'AND': 89, 'XOR': 89, 'OR': 44})"
]
},
- "execution_count": 1166,
+ "execution_count": 940,
"metadata": {},
"output_type": "execute_result"
}
@@ -8915,12 +9123,12 @@
"source": [
"It does match, so I guess our device is probably implementing the conventional circuit layout. Therefore I'll try approach (4). \n",
" \n",
- "The first trouble I ran into was that the two inputs to a gate could be in either order. I will canonicalize this, so that the first input wire is always alphabetically before the second one. The function `canon` enforces canonicalization. I'll redefine `Device` to canonicalize gate order, and also to cache the **inverse** mapping: from gates to output wires rather than from output wires to gates/bits."
+ "The first trouble I ran into was that the two inputs to a gate could be in either order. I will canonicalize this, so that the first input wire is always alphabetically before the second one. The function `canon` enforces this canonicalization. I'll redefine `Device` to use it, and also to cache the **inverse** mapping: from gates to output wires rather than from output wires to gates/bits."
]
},
{
"cell_type": "code",
- "execution_count": 1168,
+ "execution_count": 942,
"id": "ec8d86d4-8caf-40f2-b516-c7da4acbda19",
"metadata": {},
"outputs": [],
@@ -8952,7 +9160,7 @@
},
{
"cell_type": "code",
- "execution_count": 1170,
+ "execution_count": 944,
"id": "7ed8f8e6-c3e1-4c22-b812-e1a201afec3d",
"metadata": {},
"outputs": [],
@@ -8967,12 +9175,10 @@
" \n",
" for i in range(len(wires(device, 'x'))):\n",
" x, y, z = [f'{v}{i:02d}' for v in 'xyz']\n",
- " XOR_wire = wire(x, 'XOR', y)\n",
- " AND_wire = wire(x, 'AND', y)\n",
" if x == 'x00':\n",
- " carry = AND_wire\n",
+ " carry = wire(x, 'AND', y)\n",
" else:\n",
- " a, b = carry, XOR_wire\n",
+ " a, b = carry, wire(x, 'XOR', y)\n",
" if not wire(a, 'XOR', b):\n",
" a2, op, b2, = device[z] # Look backwards from z to see if they hook up\n",
" once = [w for w in (a, b, a2, b2) if [a, b, a2, b2].count(w) == 1]\n",
@@ -8981,7 +9187,7 @@
" elif wire(a, 'XOR', b) != z:\n",
" yield from swap(z, wire(a, 'XOR', b), device)\n",
" carry = wire(carry, 'AND', wire(x, 'XOR', y)) # The carry gets propagated through two gates\n",
- " carry = wire(carry, 'OR', wire(x, 'AND', y))\n",
+ " carry = wire(carry, 'OR', wire(x, 'AND', y))\n",
"\n",
"def swap(a: str, b: str, device: dict) -> Set[str]:\n",
" \"\"\"Swap wires `a` and `b` in device (and also update the inverse mapping).\"\"\"\n",
@@ -8993,7 +9199,7 @@
},
{
"cell_type": "code",
- "execution_count": 1171,
+ "execution_count": 945,
"id": "e9b87c38-f67c-4948-9af6-251021747e9d",
"metadata": {},
"outputs": [
@@ -9003,7 +9209,7 @@
"Puzzle 24.2: .000 seconds, answer jqf,mdd,skh,wpd,wts,z11,z19,z37 ok"
]
},
- "execution_count": 1171,
+ "execution_count": 945,
"metadata": {},
"output_type": "execute_result"
}
@@ -9027,7 +9233,7 @@
},
{
"cell_type": "code",
- "execution_count": 1173,
+ "execution_count": 947,
"id": "f5971853-7139-4f17-bdc5-6c51e12a928d",
"metadata": {},
"outputs": [
@@ -9086,7 +9292,7 @@
},
{
"cell_type": "code",
- "execution_count": 1175,
+ "execution_count": 949,
"id": "5302ac58-91fc-475a-83d9-cea91457df3b",
"metadata": {},
"outputs": [],
@@ -9108,7 +9314,7 @@
},
{
"cell_type": "code",
- "execution_count": 1176,
+ "execution_count": 950,
"id": "c415f5c1-76c3-486c-9075-c46a5a8c5bcb",
"metadata": {},
"outputs": [],
@@ -9118,7 +9324,7 @@
},
{
"cell_type": "code",
- "execution_count": 1177,
+ "execution_count": 951,
"id": "89c28b74-ed31-4bb5-b463-7177952a95ae",
"metadata": {},
"outputs": [
@@ -9128,7 +9334,7 @@
"Puzzle 25.1: .022 seconds, answer 3196 ok"
]
},
- "execution_count": 1177,
+ "execution_count": 951,
"metadata": {},
"output_type": "execute_result"
}
@@ -9164,7 +9370,7 @@
},
{
"cell_type": "code",
- "execution_count": 1180,
+ "execution_count": 954,
"id": "34813fc9-a000-4cd8-88ae-692851b3242c",
"metadata": {},
"outputs": [
@@ -9178,44 +9384,44 @@
"Puzzle 2.2: .002 seconds, answer 328 ok\n",
"Puzzle 3.1: .001 seconds, answer 156388521 ok\n",
"Puzzle 3.2: .000 seconds, answer 75920122 ok\n",
- "Puzzle 4.1: .035 seconds, answer 2401 ok\n",
- "Puzzle 4.2: .028 seconds, answer 1822 ok\n",
+ "Puzzle 4.1: .022 seconds, answer 2401 ok\n",
+ "Puzzle 4.2: .016 seconds, answer 1822 ok\n",
"Puzzle 5.1: .001 seconds, answer 5762 ok\n",
"Puzzle 5.2: .001 seconds, answer 4130 ok\n",
- "Puzzle 6.1: .001 seconds, answer 5329 ok\n",
- "Puzzle 6.2: 1.936 seconds, answer 2162 ok\n",
+ "Puzzle 6.1: .002 seconds, answer 5329 ok\n",
+ "Puzzle 6.2: 1.976 seconds, answer 2162 ok\n",
"Puzzle 7.1: .014 seconds, answer 1985268524462 ok\n",
- "Puzzle 7.2: .635 seconds, answer 150077710195188 ok\n",
+ "Puzzle 7.2: .593 seconds, answer 150077710195188 ok\n",
"Puzzle 8.1: .003 seconds, answer 220 ok\n",
"Puzzle 8.2: .003 seconds, answer 813 ok\n",
"Puzzle 9.1: .020 seconds, answer 6332189866718 ok\n",
- "Puzzle 9.2: 2.722 seconds, answer 6353648390778 ok\n",
+ "Puzzle 9.2: 2.748 seconds, answer 6353648390778 ok\n",
"Puzzle 10.1: .005 seconds, answer 744 ok\n",
"Puzzle 10.2: .006 seconds, answer 1651 ok\n",
"Puzzle 11.1: .002 seconds, answer 194482 ok\n",
- "Puzzle 11.2: .057 seconds, answer 232454623677743 ok\n",
+ "Puzzle 11.2: .055 seconds, answer 232454623677743 ok\n",
"Puzzle 12.1: .030 seconds, answer 1402544 ok\n",
- "Puzzle 12.2: .043 seconds, answer 862486 ok\n",
+ "Puzzle 12.2: .042 seconds, answer 862486 ok\n",
"Puzzle 13.1: .000 seconds, answer 29598 ok\n",
"Puzzle 13.2: .000 seconds, answer 93217456941970 ok\n",
"Puzzle 14.1: .000 seconds, answer 216027840 ok\n",
- "Puzzle 14.2: 1.819 seconds, answer 6876 ok\n",
+ "Puzzle 14.2: 1.833 seconds, answer 6876 ok\n",
"Puzzle 15.1: .029 seconds, answer 1563092 ok\n",
"Puzzle 15.2: .042 seconds, answer 1582688 ok\n",
"Puzzle 16.1: .139 seconds, answer 103512 ok\n",
- "Puzzle 16.2: .982 seconds, answer 554 ok\n",
+ "Puzzle 16.2: .985 seconds, answer 554 ok\n",
"Puzzle 17.1: .000 seconds, answer 2,1,0,1,7,2,5,0,3 ok\n",
"Puzzle 17.2: .004 seconds, answer 267265166222235 ok\n",
"Puzzle 18.1: .014 seconds, answer 344 ok\n",
- "Puzzle 18.2: .042 seconds, answer 46,18 ok\n",
- "Puzzle 19.1: .003 seconds, answer 242 ok\n",
- "Puzzle 19.2: .215 seconds, answer 595975512785325 ok\n",
- "Puzzle 20.1: .022 seconds, answer 1343 ok\n",
- "Puzzle 20.2: .822 seconds, answer 982891 ok\n",
+ "Puzzle 18.2: .032 seconds, answer 46,18 ok\n",
+ "Puzzle 19.1: .002 seconds, answer 242 ok\n",
+ "Puzzle 19.2: .185 seconds, answer 595975512785325 ok\n",
+ "Puzzle 20.1: .023 seconds, answer 1343 ok\n",
+ "Puzzle 20.2: .757 seconds, answer 982891 ok\n",
"Puzzle 21.1: .002 seconds, answer 205160 ok\n",
"Puzzle 21.2: .008 seconds, answer 252473394928452 ok\n",
- "Puzzle 22.1: .319 seconds, answer 14273043166 ok\n",
- "Puzzle 22.2: 1.280 seconds, answer 1667 ok\n",
+ "Puzzle 22.1: .305 seconds, answer 14273043166 ok\n",
+ "Puzzle 22.2: 1.295 seconds, answer 1667 ok\n",
"Puzzle 23.1: .001 seconds, answer 1170 ok\n",
"Puzzle 23.2: .003 seconds, answer bo,dd,eq,ik,lo,lu,ph,ro,rr,rw,uo,wx,yg ok\n",
"Puzzle 24.1: .001 seconds, answer 36035961805936 ok\n",
@@ -9224,7 +9430,7 @@
"\n",
"Correct: 49/49\n",
"\n",
- "Time in seconds: 0.006 median, 0.231 mean, 11.318 total.\n"
+ "Time in seconds: 0.006 median, 0.229 mean, 11.227 total.\n"
]
}
],