Add files via upload

This commit is contained in:
Peter Norvig authored and GitHub committed 2025-12-20 23:30:58 -08:00
1 parent 69a2b1f887
commit 2df96d1cd4
2 files changed
+134 -169

No files matched your search

+66 -101
View File
@@ -175,7 +175,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 1.1: .0015 seconds, answer 1182 correct" "Puzzle 1.1: .0007 seconds, answer 1182 correct"
] ]
}, },
"execution_count": 3, "execution_count": 3,
@@ -305,7 +305,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 1.2: .0021 seconds, answer 7509 WRONG; EXPECTED ANSWER IS 6907" "Puzzle 1.2: .0008 seconds, answer 7509 WRONG; EXPECTED ANSWER IS 6907"
] ]
}, },
"execution_count": 5, "execution_count": 5,
@@ -409,7 +409,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 1.2: .0018 seconds, answer 6907 correct" "Puzzle 1.2: .0008 seconds, answer 6907 correct"
] ]
}, },
"execution_count": 7, "execution_count": 7,
@@ -489,7 +489,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 2.1: .1342 seconds, answer 23560874270 correct" "Puzzle 2.1: .0355 seconds, answer 23560874270 correct"
] ]
}, },
"execution_count": 9, "execution_count": 9,
@@ -573,7 +573,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 2.2: .1546 seconds, answer 44143124633 correct" "Puzzle 2.2: .0403 seconds, answer 44143124633 correct"
] ]
}, },
"execution_count": 11, "execution_count": 11,
@@ -646,7 +646,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 3.1: .0043 seconds, answer 17085 correct" "Puzzle 3.1: .0019 seconds, answer 17085 correct"
] ]
}, },
"execution_count": 13, "execution_count": 13,
@@ -731,7 +731,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 3.2: .0080 seconds, answer 169408143086082 correct" "Puzzle 3.2: .0026 seconds, answer 169408143086082 correct"
] ]
}, },
"execution_count": 15, "execution_count": 15,
@@ -828,7 +828,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 4.1: .0174 seconds, answer 1569 correct" "Puzzle 4.1: .0084 seconds, answer 1569 correct"
] ]
}, },
"execution_count": 17, "execution_count": 17,
@@ -923,7 +923,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 4.2: .4197 seconds, answer 9280 correct" "Puzzle 4.2: .1996 seconds, answer 9280 correct"
] ]
}, },
"execution_count": 19, "execution_count": 19,
@@ -1032,7 +1032,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 4.2: .1065 seconds, answer 9280 correct" "Puzzle 4.2: .0329 seconds, answer 9280 correct"
] ]
}, },
"execution_count": 21, "execution_count": 21,
@@ -1128,7 +1128,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 5.1: .0064 seconds, answer 635 correct" "Puzzle 5.1: .0029 seconds, answer 635 correct"
] ]
}, },
"execution_count": 23, "execution_count": 23,
@@ -1227,7 +1227,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 5.2: .0002 seconds, answer 369761800782619 correct" "Puzzle 5.2: .0001 seconds, answer 369761800782619 correct"
] ]
}, },
"execution_count": 25, "execution_count": 25,
@@ -1345,7 +1345,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 6.1: .0079 seconds, answer 5877594983578 correct" "Puzzle 6.1: .0034 seconds, answer 5877594983578 correct"
] ]
}, },
"execution_count": 27, "execution_count": 27,
@@ -1483,7 +1483,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 6.2: .0065 seconds, answer 11159825706149 correct" "Puzzle 6.2: .0023 seconds, answer 11159825706149 correct"
] ]
}, },
"execution_count": 29, "execution_count": 29,
@@ -1597,7 +1597,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 7.1: .0011 seconds, answer 1681 correct" "Puzzle 7.1: .0004 seconds, answer 1681 correct"
] ]
}, },
"execution_count": 31, "execution_count": 31,
@@ -1712,7 +1712,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 7.2: .0019 seconds, answer 422102272495018 correct" "Puzzle 7.2: .0008 seconds, answer 422102272495018 correct"
] ]
}, },
"execution_count": 33, "execution_count": 33,
@@ -1871,7 +1871,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 7.2: .0025 seconds, answer 422102272495018 correct" "Puzzle 7.2: .0011 seconds, answer 422102272495018 correct"
] ]
}, },
"execution_count": 36, "execution_count": 36,
@@ -2012,7 +2012,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 8.1: 1.3418 seconds, answer 24360 correct" "Puzzle 8.1: .2886 seconds, answer 24360 correct"
] ]
}, },
"execution_count": 38, "execution_count": 38,
@@ -2151,7 +2151,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 8.2: 1.0359 seconds, answer 2185817796 correct" "Puzzle 8.2: .2857 seconds, answer 2185817796 correct"
] ]
}, },
"execution_count": 40, "execution_count": 40,
@@ -2234,7 +2234,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 9.1: .0333 seconds, answer 4772103936 correct" "Puzzle 9.1: .0094 seconds, answer 4772103936 correct"
] ]
}, },
"execution_count": 42, "execution_count": 42,
@@ -2442,7 +2442,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 9.2: .8590 seconds, answer 1529675217 correct" "Puzzle 9.2: .4376 seconds, answer 1529675217 correct"
] ]
}, },
"execution_count": 44, "execution_count": 44,
@@ -2601,7 +2601,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 10.1: .0044 seconds, answer 441 correct" "Puzzle 10.1: .0019 seconds, answer 441 correct"
] ]
}, },
"execution_count": 46, "execution_count": 46,
@@ -2828,7 +2828,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 10.2: 11.4070 seconds, answer 18559 correct" "Puzzle 10.2: 3.4554 seconds, answer 18559 correct"
] ]
}, },
"execution_count": 48, "execution_count": 48,
@@ -2948,7 +2948,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 10.2: .1177 seconds, answer 18559 correct" "Puzzle 10.2: .0461 seconds, answer 18559 correct"
] ]
}, },
"execution_count": 50, "execution_count": 50,
@@ -3211,7 +3211,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 11.1: .0007 seconds, answer 574 correct" "Puzzle 11.1: .0003 seconds, answer 574 correct"
] ]
}, },
"execution_count": 53, "execution_count": 53,
@@ -3327,7 +3327,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 11.2: .0016 seconds, answer 306594217920240 correct" "Puzzle 11.2: .0009 seconds, answer 306594217920240 correct"
] ]
}, },
"execution_count": 55, "execution_count": 55,
@@ -3601,6 +3601,14 @@
" return ok" " return ok"
] ]
}, },
{
"cell_type": "markdown",
"id": "2cbca4d7-773c-4027-8f27-270887180ee1",
"metadata": {},
"source": [
"*Below we see that ChatGPT's code works, but it takes 2 minutes to run:*"
]
},
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 57, "execution_count": 57,
@@ -3610,7 +3618,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 12.1: 211.1226 seconds, answer 454 correct" "Puzzle 12.1: 112.2115 seconds, answer 454 correct"
] ]
}, },
"execution_count": 57, "execution_count": 57,
@@ -3687,7 +3695,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 3, "execution_count": 58,
"id": "3b3dbe00-a191-412b-b062-edefc9ab4013", "id": "3b3dbe00-a191-412b-b062-edefc9ab4013",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
@@ -3886,87 +3894,44 @@
"id": "8aa26008-a652-4860-9c84-5ba4344d32f3", "id": "8aa26008-a652-4860-9c84-5ba4344d32f3",
"metadata": {}, "metadata": {},
"source": [ "source": [
"# Summary of Run Times\n", "# Summary\n",
"\n", "\n",
"*Here are the run times and some comments.*\n", "*Here are the run times, lines-of-code counts, and some comments.*\n",
"\n", "\n",
"*The LLM lines-of-code count is 5 times the human count. The LLM run times are roughly double the human-written run times, if we throw out 12.1, where the human noticed the trick and the LLM didn't. But all the solutions run in under a second, so run time is not a big deal.*" "*The LLM lines-of-code count is 5 times the human count. The LLM run times are roughly double the human-written run times, if we throw out 12.1, where the human noticed the trick and the LLM didn't. But all the solutions run in under a second, so run time is not a big deal.*"
] ]
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "49736354-51c0-4870-bc39-f7a2e955e196", "id": "a27a329a-01f5-4fbc-a3a6-5946bffe859f",
"metadata": {}, "metadata": {},
"source": [ "source": [
" DAY LLM Human LLM Human\n", " | DAY | LLM<br>Name | LLM<br>Time | Human<br>Time | LLM<br>LOC | Human<br>LOC | Comments |\n",
" #\tLLM Time\tTime LOC LOC\t\n", " | --- | ------ | ---- | ----- | --- | ----- | ---|\n",
" --- ------ ---- ----- --- -----\n", " | 1.1 | Gemini | .0007 | .0002 | 51 | 6 | Straightforward and easy for LLM and human. | \n",
" 1.1\tGemini\t.001\t.001\t51\t6\tStraightforward and easy for LLM and human.\n", " | 1.2 | Gemini | .0008 | .0004 | 75 | 11 | Both LLM and human erred on the distance from 0 to 0. | \n",
" 1.2\tGemini\t.002\t.001\t75\t11\tBoth LLM and human erred on the distance from 0 to 0.\n", " | 2.1 | Claude | .0355 | .0001 | 29 | 17 | Easy | \n",
" 2.1\tClaude\t.121\t.003\t29\t17\tEasy\n", " | 2.2 | Claude | .0403 | .0002 | 35 | 16 | Both LLM and human found the more efficient half-digits approach | \n",
" 2.2\tClaude\t.135\t.004\t35\t16\tBoth LLM and human found the more efficient half-digits approach\n", " | 3.1 | ChatGPT | .0019 | .0003 | 22 | 11 | Easy | \n",
" 3.1\tChatGPT\t.004\t.001\t22\t11\tEasy\n", " | 3.2 | ChatGPT | .0026 | .0008 | 42 | 14 | Easy | \n",
" 3.2\tChatGPT\t.007\t.002\t42\t14\tEasy\n", " | 4.1 | Gemini | .0084 | .0194 | 44 | 9 | Easy | \n",
" 4.1\tGemini\t.016\t.055\t44\t9\tEasy\n", " | 4.2 | Gemini | .0329 | .0495 | 52 | 8 | LLM chose the less efficient scan-whole-grid approach | \n",
" 4.2\tGemini\t.379\t.139\t52\t8\tLLM chose the less efficient scan-whole-grid approach\n", " | 5.1 | Claude | .0029 | .0045 | 45 | 11 | Easy | \n",
" 5.1\tClaude\t.005\t.012\t45\t11\tEasy\n", " | 5.2 | Claude | .0001 | .0000 | 58 | 9 | Easy | \n",
" 5.2\tClaude\t.001\t.001\t58\t9\tEasy\n", " | 6.1 | ChatGPT | .0034 | .0008 | 67 | 7 | Easy; bad “if x: True else: False” idiom by LLM | \n",
" 6.1\tChatGPT\t.008\t.002\t67\t7\tEasy; bad “if x: True else: False” idiom by LLM\n", " | 6.2 | ChatGPT | .0023 | .0013 | 87 | 27 | Easy; LLM overly verbose | \n",
" 6.2\tChatGPT\t.006\t.006\t87\t27\tEasy; LLM overly verbose\n", " | 7.1 | Gemini | .0004 | .0003 | 63 | 13 | Easy | \n",
" 7.1\tGemini\t.001\t.001\t63\t13\tEasy\n", " | 7.2 | Gemini | .0011 | .0007 | 70 | 11 | Easy | \n",
" 7.2\tGemini\t.002\t.002\t70\t11\tEasy\n", " | 8.1 | Claude | .2886 | .1981 | 91 | 27 | Easy | \n",
" 8.1\tClaude\t.828\t.583\t91\t27\tEasy\n", " | 8.2 | Claude | .2857 | .2034 | 82 | 11 | Easy; but LLMs Union-Find data type runs slower than mine. | \n",
" 8.2\tClaude\t.835\t.618\t82\t11\tEasy; but LLMs Union-Find data type runs slower than mine.\n", " | 9.1 | ChatGPT | .0094 | .0187 | 33 | 7 | Easy | \n",
" 9.1\tChatGPT\t.027\t.037\t33\t7\tEasy\n", " | 9.2 | ChatGPT | .4376 | .0046 | 157 | 36 | LLM code a bit complicated; human uses “2 point” trick for speedup | \n",
" 9.2\tChatGPT\t.771\t.016\t157\t36\tLLM code a bit complicated; human uses “2 point” trick for speedup\n", " | 10.1 | Gemini | .0019 | .0242 | 101 | 18 | Easy | \n",
" 10.1\tGemini\t.005\t.001\t101\t18\tEasy\n", " | 10.2 | Gemini | .0461 | .0680 | 70 | 13 | milp solutions similar; LLM offers other solutions | \n",
" 10.2\tGemini\t.120\t.112\t70\t13\tmilp solutions similar; LLM offers other solutions\n", " | 11.1 | Claude | .0003 | .0001 | 83 | 11 | Easy; LLM has a bit of vestigial code | \n",
" 11.1\tClaude\t.023\t.001\t83\t11\tEasy; LLM has a bit of vestigial code\n", " | 11.2 | Claude | .0009 | .0010 | 77 | 11 | Easy | \n",
" 11.2\tClaude\t.001\t.001\t77\t11\tEasy\n", " | 12.1 | ChatGPT | 112.2 | .0006 | 238 | 20 | Human saw shortcut to avoid search; LLM wrote search functions | \n",
" 12.1\tChatGPT\t3min\t.002\t238\t20\tHuman saw shortcut to avoid search; LLM wrote search functions\n", " | **TOTAL** | |**1.204** | **.597** | **1672** | **324** | **Total time ignores 12.1. Overall, Human code is 5x briefer, 2x faster** | "
" TOTAL 3.29\t1.60 1672\t324\tOverall, Human code is 5x briefer, 2x faster (even ignoring 12.1)"
]
},
{
"cell_type": "code",
"execution_count": 58,
"id": "1329c562-4721-4084-a7f2-8e8af82986c0",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Puzzle 1.1: .0015 seconds, answer 1182 correct\n",
"Puzzle 1.2: .0018 seconds, answer 6907 correct\n",
"Puzzle 2.1: .1342 seconds, answer 23560874270 correct\n",
"Puzzle 2.2: .1546 seconds, answer 44143124633 correct\n",
"Puzzle 3.1: .0043 seconds, answer 17085 correct\n",
"Puzzle 3.2: .0080 seconds, answer 169408143086082 correct\n",
"Puzzle 4.1: .0174 seconds, answer 1569 correct\n",
"Puzzle 4.2: .1065 seconds, answer 9280 correct\n",
"Puzzle 5.1: .0064 seconds, answer 635 correct\n",
"Puzzle 5.2: .0002 seconds, answer 369761800782619 correct\n",
"Puzzle 6.1: .0079 seconds, answer 5877594983578 correct\n",
"Puzzle 6.2: .0065 seconds, answer 11159825706149 correct\n",
"Puzzle 7.1: .0011 seconds, answer 1681 correct\n",
"Puzzle 7.2: .0025 seconds, answer 422102272495018 correct\n",
"Puzzle 8.1: 1.3418 seconds, answer 24360 correct\n",
"Puzzle 8.2: 1.0359 seconds, answer 2185817796 correct\n",
"Puzzle 9.1: .0333 seconds, answer 4772103936 correct\n",
"Puzzle 9.2: .8590 seconds, answer 1529675217 correct\n",
"Puzzle 10.1: .0044 seconds, answer 441 correct\n",
"Puzzle 10.2: .1177 seconds, answer 18559 correct\n",
"Puzzle 11.1: .0007 seconds, answer 574 correct\n",
"Puzzle 11.2: .0016 seconds, answer 306594217920240 correct\n",
"Puzzle 12.1: 211.1226 seconds, answer 454 correct\n",
"\n",
"Time in seconds: sum = 214.970, mean = 9.347, median = .008, max = 211.123\n"
]
}
],
"source": [
"summary(answers) # Below is the most recent run of this notebook; the chart above is from a previous run."
] ]
} }
], ],
@@ -3986,7 +3951,7 @@
"name": "python", "name": "python",
"nbconvert_exporter": "python", "nbconvert_exporter": "python",
"pygments_lexer": "ipython3", "pygments_lexer": "ipython3",
"version": "3.13.5" "version": "3.13.3"
} }
}, },
"nbformat": 4, "nbformat": 4,
+68 -68
View File
@@ -158,7 +158,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 1.1: .0006 seconds, answer 1182 correct" "Puzzle 1.1: .0002 seconds, answer 1182 correct"
] ]
}, },
"execution_count": 5, "execution_count": 5,
@@ -192,7 +192,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 1.2: .0574 seconds, answer 6907 correct" "Puzzle 1.2: .0269 seconds, answer 6907 correct"
] ]
}, },
"execution_count": 6, "execution_count": 6,
@@ -242,7 +242,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 1.2: .0007 seconds, answer 6907 correct" "Puzzle 1.2: .0004 seconds, answer 6907 correct"
] ]
}, },
"execution_count": 8, "execution_count": 8,
@@ -407,7 +407,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 2.1: .0003 seconds, answer 23560874270 correct" "Puzzle 2.1: .0002 seconds, answer 23560874270 correct"
] ]
}, },
"execution_count": 13, "execution_count": 13,
@@ -432,7 +432,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 101, "execution_count": 14,
"id": "4fbf52e7-a06a-4000-8627-80d159788da1", "id": "4fbf52e7-a06a-4000-8627-80d159788da1",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
@@ -462,7 +462,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 102, "execution_count": 15,
"id": "5a29e5bc-3b07-4800-9a0f-4bd433e01c55", "id": "5a29e5bc-3b07-4800-9a0f-4bd433e01c55",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
@@ -481,17 +481,17 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 103, "execution_count": 16,
"id": "8a7c6c25-4b5f-4178-8559-166ba1a9f924", "id": "8a7c6c25-4b5f-4178-8559-166ba1a9f924",
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 2.1: .0004 seconds, answer 23560874270 correct" "Puzzle 2.1: .0001 seconds, answer 23560874270 correct"
] ]
}, },
"execution_count": 103, "execution_count": 16,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -503,17 +503,17 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 104, "execution_count": 17,
"id": "32fefd65-df2a-4ea3-9acd-7525ebd32380", "id": "32fefd65-df2a-4ea3-9acd-7525ebd32380",
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 2.2: .0005 seconds, answer 44143124633 correct" "Puzzle 2.2: .0002 seconds, answer 44143124633 correct"
] ]
}, },
"execution_count": 104, "execution_count": 17,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@@ -621,7 +621,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 3.1: .0005 seconds, answer 17085 correct" "Puzzle 3.1: .0003 seconds, answer 17085 correct"
] ]
}, },
"execution_count": 21, "execution_count": 21,
@@ -698,7 +698,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 3.1: .0006 seconds, answer 17085 correct" "Puzzle 3.1: .0003 seconds, answer 17085 correct"
] ]
}, },
"execution_count": 24, "execution_count": 24,
@@ -720,7 +720,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 3.2: .0016 seconds, answer 169408143086082 correct" "Puzzle 3.2: .0008 seconds, answer 169408143086082 correct"
] ]
}, },
"execution_count": 25, "execution_count": 25,
@@ -819,7 +819,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 4.1: .0376 seconds, answer 1569 correct" "Puzzle 4.1: .0194 seconds, answer 1569 correct"
] ]
}, },
"execution_count": 28, "execution_count": 28,
@@ -868,7 +868,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 4.2: .8418 seconds, answer 9280 correct" "Puzzle 4.2: .4524 seconds, answer 9280 correct"
] ]
}, },
"execution_count": 30, "execution_count": 30,
@@ -917,7 +917,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 4.2: .0968 seconds, answer 9280 correct" "Puzzle 4.2: .0495 seconds, answer 9280 correct"
] ]
}, },
"execution_count": 32, "execution_count": 32,
@@ -948,7 +948,7 @@
"outputs": [ "outputs": [
{ {
"data": { "data": {
"image/png": "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 truncated "image/png": "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 truncated
"text/plain": [ "text/plain": [
"<Figure size 1000x1000 with 1 Axes>" "<Figure size 1000x1000 with 1 Axes>"
] ]
@@ -958,7 +958,7 @@
}, },
{ {
"data": { "data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAxoAAAMWCAYAAAB2gvApAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAY7dJREFUeJzt3TuW5EqXHlj8zZ5BCamTWsoUyAHkNFrjqFrradQASIFyaaReQg2BK1q4KxnMuICHmR879txbxHIPw8NgcATw2fnHx8fHxwUAANDQ/zV6BQAAgP240QAAAJpzowEAADTnRgMAAGjOjQYAANCcGw0AAKA5NxoAAEBzbjQAAIDm3GgAAADNudEAAACac6MBAAA050YDAABozo0GAADQnBsNAACgOTcaAABAc240AACA5txoAAAAzbnRAAAAmnOjAQAANOdGAwAAaM6NBgAA0JwbDQAAoDk3GgAAQHNuNAAAgObcaAAAAM250QAAAJpzowEAADTnRgMAAGjOjQYAANCcGw0AAKA5NxoAAEBzbjQAAIDm3GgAAADNudEAAACac6MBAAA050YDAABozo0GAADQnBsNAACgOTcaAABAc240AACA5txoAAAAzbnRAAAAmvu/R68AwGn++V/+9fqv/+Pfrv/8H/7p+vXzx+MyAFjZPz4+Pj5GrwTAKf75X/71+i//33+//t0//nH9r4+P6//9f/7jdV3X35a52QBgdV6dAujov/6Pf/vfNxT/7h//uP7b//y322UAsDo3GgAd/ef/8E//+4bif318XP/p3//T7TIAWJ1XpwA6++d/+dfrv/3Pf7v+07//M6PxdRkArEwYnCUJ07KKp3559y+er8tq+rlzoo2a/QvAa55osBxhWlZR2lcjy379/OGcaORuPz7tX/sS4HsyGixHmJZVlPbVyLKadnitZv8C8D03GixHmJZVlPbVyLKadnitZv8C8D2vTrEkYVpWUdpXI8tqP8uzmv0LwGvC4EyvdZgWeivpq79+/vhbH71b9vT3SttxTnyqGVvulgvgA7zmiQZTax2mdeGnp9Yh7Zqw8l07kbZ3U3Ns7F+A93iiwdTuQpgfH9fby1z06am0/5b2y7u/9+vnj9B5cuo5UXNs7F+A9wiDM7WM4Cz00rpfRsPgzolPGWF7+xfgT16dYnoZwVnopXW/jIbBnROfMsL29i/AJ69OsYSSkGvNMuipZUj7KSBeExx3Tnyq2T/vjjkC4sCpPNFgasLgrGxkiFi18Nd6hcGf/ibACTzRYGrC4KxsZIi4dRB9N73C4PY5cDJhcKYmDM7KRvZV58RrvcLg9jlwMq9OMT1hcFY2sq86J17rFQa3z4FTeXWK6UVCrk/fhV5Gh7RnPyd6Vde++5s1xyZ6HP1LD9rpNW4Q54kGyxFyZWW9+u9TFfGZzLYvavaZauEwht8Aa5HRYDl3wcy7ZTCjXv13hXNitn1R03bpuq9wHGAlzrO1uNFgOQKXrGxkGHw2s+2LmraFwWEM59lavDrFkgQuWdnIMPhsZtsXNW0Lg8MYzrN1CIOzpLtg5mwhV85TE1DsFdL+2s7IwGTpvnhaVrrupe3UrE80TD7TcYBVvDpPnGdr8EQDoIHZwsGzBSaj+ycS6C5tZ2TbfgTBn57OO+fZWjzRAGhgZBXwyPr0uvBG98/d9+/WPaOKd4+2/QCCPz2dd86ztQiDAzQwWzh4tsBkdP9EAt0rtA38qeZ8dJ7Ny6tTAI3MFg6eLTAZ3T+RQPcKbQN/qjkfnWdz8uoUwAu1FWhLg829/sXzbmAyK0QZ2T934evWIe1o29F2gD89nSfvnmcC4n15ogHwoCZQPVtAMSMUPWp9aqpz9wppz7Z/YTcZYfC7Zc69XJ5oADyoCVTPFlDMCEWPWp+ntkeGtGfbv7CbjDC4c68/YXCAB9HA8Aph8JHVuaNtjwxpz7Z/YTcZY61zrz+vTgG8EA0MrxAGH1mdO9r2yJD2bPsXdpMx1jr3+jru1anS0KOwEJwnGu6drVJ0Rig6Ooa2brt1SPtpn5W2Hd3nrj3wp6d/h787ltSMGcQd9URjtrAmMI/ZAsOzBcQzQpjRtkcGv0uPT3RCAdceTtWrMrjzLtdRTzRmC2sC85gtMDxbQDwjhBlte2Twu/T4RCcUcO3hVL0qgzvvch0VBhcWAp7MFhiecRtbhzBXqc4dOT4Z2wgn6DXxhvMu11GvTl2XsBDwbLbA8Izb2DqEuUp17sjxydhGOEGviTecd3m2fnWqdRgxIywkiA5zeXd8uK41xpxoWLnms+8ue1rH1sHvu2VPf6+07ej6vFoOp3kaC66r/TleM6ZTbtsnGj1Ci9FOVxMSBHKtEJQeGRCfcRtHrk9GdWKhVPher/Pe+djGtk80eoQWox2uJiQI5FohKD0yID7jNo5cn4zqxEKp8L1e573zsY1tw+C9Aoo91hHIt0JQeuR2z7iNI9dnZOAdTjbbBBS8tu2rU9fVL6DYYx2BfCsEpUdu94zbOHJ9Rgbe4WSzTUDBs21fnfrt7jaqZFlpYLImKBQJCQokQb4VgtIZ7rY7I4R5t+xVO6XeHb9rjndpZfCn75cua7E/YHc1Y1Z0rC35PeY32rNtn2j0qBxZ+t3o+tS0A7SzclA6w2zjWKRaeM3nRlYlB94zcoIP5/OnbZ9o9KgcWfrd6PrUtAO0s3JQeuT+6LU9kWrhNZ8bWZUceM/ICT6cz5+EwRtXm81YH4EkGGPloHSG2bandeXfGauSA+8ZOcEHn7Z9deq6+lSOHB0cBHKtHJTOMNv2tK78O2NVcuA9Iyf44C/bvjp1XbFgUDT4Fwl+t2iHvwhtEVUTOmwdRpwxGFy6P2oD5iVKx9Wa8fermhB8xjgPtBOdGOLus6XL/Nb4y9ZPNL7qERDPCBBFA4qnUnmd0YQJ2xkZRJ8tBA+8p+Z3k/O+ja2faHzVIyCeESCKBhRPpfI6owkTtjMyiD5bCB54T83vJud9G9uGwe/0CIiPbodPQluMJkzYzk4VyIExTOLT31GvTl1Xn4D46Hb4JLTFaMKE7exUgRwYwyQ+fR316tR1tQ+IP3239G/erU+Ldk6k8joz6hWU3smr87HkfC5dVnvev9uOY8t1tZ+c5Om7rmev1fzuuq62Y86Jjnui8VVG2CcSQo5WIj51UBHagj1kTLJRuiwjFGos4braT05ikph2eo05px6H455ofJUR9omEkKOViE/tyEJbsIeMSTai571QP1GtJycxSUw7vcacU4/DUWHwOxlhn14VyIWNPgltwR5mrLxuLCGqdX/xu6CdXmPOqY5/deq6csI+vSqQCxt9EtqCPcxYed1YQlTr/uJ3QTu9xpwTHf/q1HXlVbq9u4X7uiwSYP6u/Z1FK7eXLgPGeDofI+dzZEyOtsOn0lB062Wjt/G63u+D0UliRu+PFbQec079ffaVJxoJRoYWT1AadhPghPWMDIPfLYu2bSz508jjeMI2tg6dnyBjzLF/P3mikWBkaPEEpWE3AU5Yz8gw+NNYYCxpZ+RxPGEbW4fOT5Ax5ti/n44Pg2cYGVo8Qetgvf0L8xgZBs9omz+NPI4nbOOM+2N2zvtcXp1KMjK0eILWwXr7F+YxMgye0TZ/GnkcT9jGGffH7Jz3ebw6laR1wPzkUFFpCC4arI/ccs8YRoSVPZ2PJedu1sQQkbZP1LPacumy1mHyp89l9MHWfZVP0Yl9npbhiQaTWyE4KHwH7USDmRkTQzjH650Q6q+pwt1rkhh9tR1h8DY80WBqKwQHhe+gnWgwM2NiCOd4vRNC/TVVuHtNEqOvtiMM3oYwOFNbITgoHAbtZIRcBWz7OyHU36u6vL46hjB4G16dYnorBAeFw6CdjJCrgG1/J4T6e1WX11fHEAaPc6MBAAA0J6PB9FrPCFIzG1RkhpKats1aBd/rcT4679qJjne9js/IMT1jG/Xh/uzzZ55oMLUeM82YJQTmt8IMdHzqNetU9PhkrM/IbayZCYs27PPXPNFgaj1mmjFLCMxvhRno+NRr1qno8clYn5HbWDMTFm3Y56+ZdYqp9ZhpJtq2WUIg3woz0PGp16xTGes5cnarjFkQyWWfv+bVKabXY6aZ6PfNEgL5VpiBjk+9Zp3KWM+Rs1tlzIJILvv8mVenmN6vnz9uT9yvt8hPYay7W+nS75a2Xbrs6e9F13MnAro8uTt/SpddV/wcpU50vKs5thGt+1DtZ2v+5v/p1bjoX8h5Sn9ruG79xRMNltMrpN267Z5/c1WC8WTQr+ax6rGoWe8eYfCasP1s+3Jlrtf1PNFgOb1C2q3b7vk3VyUYTwb9ah6rHoua9e4RBq8J28+2L1fmel1PGJzljAyArvI3V3XqdpNLv5rHqsditjB4Tdu043pdz6tTLGlkAHSVv7mqU7ebXPrVPFY9FrOFwWvaph3X6zpenWJJpUG9aKAvEjB/Wvbk3XVfOXCWEeA/lRD9a72CxXxv1WNRs96tJxKpGStfLaeNjN8Au/JEgy2UBuBmC/RlrfsKZqsQvLLd+gbsptckJsLguYTB63miwRZKA3CzBfqy1n0Fs1UIXtlufQN202sSE2HwXMLg9YTB2UJGtfCRAfPouq9gtgrBK7OPYG69JjFx3udyjarn1Sm2kVEtfGTAPLruK5itQvDK7COYW69JTJz3uVyj6nh1iiXVBuO+qgltlXy2NCRYU8m1dVD66e+NDgxHQnWl+2wntdWAT9xHMKt3ryel3331fdpxjSrniQbLiQRfM8LgpYNFTSXXu3ZaLxsdHBxZ4X1VGX1ot30EM+p13SKXSUzqeaLBciLB14wweOlAUVPJNRIIrAmmjQwOjqzwvqqMPrTbPoIZ9bpukcskJvWEwVlO62qq0TB4ZL1r2tktODiywvuqMvoQkK/XdYtcrlH1vDrFklpXU42GwSPrXdPObsHBkRXeV5XRh4B8va5b5HKNquPVKZZ1d4tcettc892Sz9aEryPt1FSmjWxjRmDLine truncated "image/png": "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 truncated
"text/plain": [ "text/plain": [
"<Figure size 1000x1000 with 1 Axes>" "<Figure size 1000x1000 with 1 Axes>"
] ]
@@ -1057,7 +1057,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 5.1: .0071 seconds, answer 635 correct" "Puzzle 5.1: .0045 seconds, answer 635 correct"
] ]
}, },
"execution_count": 36, "execution_count": 36,
@@ -1138,7 +1138,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 5.2: .0001 seconds, answer 369761800782619 correct" "Puzzle 5.2: .0000 seconds, answer 369761800782619 correct"
] ]
}, },
"execution_count": 39, "execution_count": 39,
@@ -1224,7 +1224,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 6.1: .0017 seconds, answer 5877594983578 correct" "Puzzle 6.1: .0008 seconds, answer 5877594983578 correct"
] ]
}, },
"execution_count": 42, "execution_count": 42,
@@ -1307,7 +1307,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 6.2: .0029 seconds, answer 11159825706149 correct" "Puzzle 6.2: .0013 seconds, answer 11159825706149 correct"
] ]
}, },
"execution_count": 44, "execution_count": 44,
@@ -1519,7 +1519,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 7.1: .0008 seconds, answer 1681 correct" "Puzzle 7.1: .0003 seconds, answer 1681 correct"
] ]
}, },
"execution_count": 52, "execution_count": 52,
@@ -1573,7 +1573,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 7.2: .0014 seconds, answer 422102272495018 correct" "Puzzle 7.2: .0007 seconds, answer 422102272495018 correct"
] ]
}, },
"execution_count": 54, "execution_count": 54,
@@ -1697,7 +1697,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 8.1: .4600 seconds, answer 24360 correct" "Puzzle 8.1: .1981 seconds, answer 24360 correct"
] ]
}, },
"execution_count": 57, "execution_count": 57,
@@ -1750,7 +1750,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 8.2: .5004 seconds, answer 2185817796 correct" "Puzzle 8.2: .2034 seconds, answer 2185817796 correct"
] ]
}, },
"execution_count": 59, "execution_count": 59,
@@ -1866,7 +1866,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 9.1: .0267 seconds, answer 4772103936 correct" "Puzzle 9.1: .0187 seconds, answer 4772103936 correct"
] ]
}, },
"execution_count": 62, "execution_count": 62,
@@ -1901,7 +1901,7 @@
"outputs": [ "outputs": [
{ {
"data": { "data": {
"image/png": "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 truncated "image/png": "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 truncated
"text/plain": [ "text/plain": [
"<Figure size 700x700 with 1 Axes>" "<Figure size 700x700 with 1 Axes>"
] ]
@@ -2011,7 +2011,7 @@
"outputs": [ "outputs": [
{ {
"data": { "data": {
"image/png": "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 truncated "image/png": "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 truncated
"text/plain": [ "text/plain": [
"<Figure size 700x700 with 1 Axes>" "<Figure size 700x700 with 1 Axes>"
] ]
@@ -2079,7 +2079,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 9.2: .0037 seconds, answer 1529675217 correct" "Puzzle 9.2: .0046 seconds, answer 1529675217 correct"
] ]
}, },
"execution_count": 67, "execution_count": 67,
@@ -2108,7 +2108,7 @@
"outputs": [ "outputs": [
{ {
"data": { "data": {
"image/png": "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 truncated "image/png": "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 truncated
"text/plain": [ "text/plain": [
"<Figure size 1200x1200 with 1 Axes>" "<Figure size 1200x1200 with 1 Axes>"
] ]
@@ -2147,8 +2147,8 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"CPU times: user 541 ms, sys: 5.34 ms, total: 546 ms\n", "CPU times: user 275 ms, sys: 2.39 ms, total: 278 ms\n",
"Wall time: 548 ms\n" "Wall time: 277 ms\n"
] ]
}, },
{ {
@@ -2186,7 +2186,7 @@
"outputs": [ "outputs": [
{ {
"data": { "data": {
"image/png": "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 truncated "image/png": "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 truncated
"text/plain": [ "text/plain": [
"<Figure size 700x700 with 1 Axes>" "<Figure size 700x700 with 1 Axes>"
] ]
@@ -2319,7 +2319,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 10.1: .0541 seconds, answer 441 correct" "Puzzle 10.1: .0242 seconds, answer 441 correct"
] ]
}, },
"execution_count": 73, "execution_count": 73,
@@ -2471,7 +2471,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 10.2: .1553 seconds, answer 18559 correct" "Puzzle 10.2: .0680 seconds, answer 18559 correct"
] ]
}, },
"execution_count": 77, "execution_count": 77,
@@ -2681,7 +2681,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 11.1: .0005 seconds, answer 574 correct" "Puzzle 11.1: .0001 seconds, answer 574 correct"
] ]
}, },
"execution_count": 83, "execution_count": 83,
@@ -2733,7 +2733,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 11.2: .0022 seconds, answer 306594217920240 correct" "Puzzle 11.2: .0010 seconds, answer 306594217920240 correct"
] ]
}, },
"execution_count": 85, "execution_count": 85,
@@ -2919,7 +2919,7 @@
"outputs": [ "outputs": [
{ {
"data": { "data": {
"image/png": "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 truncated "image/png": "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X355k8+3Zs2aWLFiRbUNAGi66jygpO6de+65J6ZNmxY33nhjPPvss0WLy/r164vjixYtKsLLxlq0aBEdOnQojm3K2LFjo127dlVb9+7d6/q0AYDG3MXzRc4888yqrw844IA48MADY8899yxaVY455phaPefIkSNj+PDhVfdTC4qQAgBNV71PM95jjz1i5513jrlz5xb309iUJUuWVCuzbt26YmbP5satpDEtacbPxhsA0HTVe0B59913izEoXbp0Ke73798/li1bFjNnzqwqM3369NiwYUP069evvk8HAGiKXTxpvZLK1pBk/vz58dprrxVjSNI2ZsyYOO2004rWkHnz5sWIESNir732ioqKiqJ8r169inEqQ4YMiYkTJ8batWtj6NChRdeQGTwAQK1aUF599dU4+OCDiy1JY0PS16NHj45tttkmXn/99fj2t78d++yzT7EAW9++feP5558vumkq3XvvvdGzZ89iTEqaXnzEEUfEnXfe6X8EAKhdC8qAAQOiVCpt9vhTTz31hc+RWlomT55c05cGAMqEz+IBALIjoAAA2RFQAIDsCCgAQHYEFAAgOwIKAJAdAQUAyI6AAgBkR0ABALIjoAAA2RFQAIDsCCgAQHYEFAAgOwIKAJAdAQUAyI6AAgBkR0ABALIjoAAA2RFQAIDsCCgAQHYEFAAgOwIKAJAdAQUAyI6AAgBkR0ABALIjoAAA2RFQAIDsCCgAQHYEFAAgOwIKAJAdAQUAyI6AAgBkR0ABALIjoAAA2RFQAIDsCCgAQHYEFAAgOwIKAJAdAQUAyI6AAgBkR0ABALIjoAAA2RFQAIDsCCgAQHYEFAAgOwIKAJAdAQUAyI6AAgBkR0ABALIjoAAA2RFQAIDsCCgAQHYEFAAgOwIKAJAdAQUAyI6AAgBkR0ABALIjoAAA2RFQAIDsCCgAQHYEFACg8QeU5557Lk466aTo2rVrNGvWLB5++OFqx0ulUowePTq6dOkSrVu3joEDB8bbb79drcyHH34Y55xzTrRt2zbat28fF110UaxcuXLrvxsAoDwDyqpVq6JPnz4xYcKETR4fN25c3HrrrTFx4sR4+eWXo02bNlFRURGrV6+uKpPCyaxZs2Lq1Knx2GOPFaHn4osv3rrvBABoMlrU9AHHH398sW1Kaj0ZP358jBo1Kr7zne8U++65557o1KlT0dJy5plnxuzZs+PJJ5+MV155JQ455JCizG233RYnnHBC3HTTTUXLDABQ3up0DMr8+fNj0aJFRbdOpXbt2kW/fv1ixowZxf10m7p1KsNJkso3b968aHHZlDVr1sSKFSuqbQBA01WnASWFkyS1mGws3a88lm47duxY7XiLFi2iQ4cOVWU+bezYsUXQqdyLine truncated
"text/plain": [ "text/plain": [
"<Figure size 640x480 with 1 Axes>" "<Figure size 640x480 with 1 Axes>"
] ]
@@ -3015,7 +3015,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"Puzzle 12.1: .0013 seconds, answer 454 correct" "Puzzle 12.1: .0006 seconds, answer 454 correct"
] ]
}, },
"execution_count": 92, "execution_count": 92,
@@ -3073,31 +3073,31 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Puzzle 1.1: .0006 seconds, answer 1182 correct\n", "Puzzle 1.1: .0002 seconds, answer 1182 correct\n",
"Puzzle 1.2: .0007 seconds, answer 6907 correct\n", "Puzzle 1.2: .0004 seconds, answer 6907 correct\n",
"Puzzle 2.1: .0003 seconds, answer 23560874270 correct\n", "Puzzle 2.1: .0001 seconds, answer 23560874270 correct\n",
"Puzzle 2.2: .0005 seconds, answer 44143124633 correct\n", "Puzzle 2.2: .0002 seconds, answer 44143124633 correct\n",
"Puzzle 3.1: .0006 seconds, answer 17085 correct\n", "Puzzle 3.1: .0003 seconds, answer 17085 correct\n",
"Puzzle 3.2: .0016 seconds, answer 169408143086082 correct\n", "Puzzle 3.2: .0008 seconds, answer 169408143086082 correct\n",
"Puzzle 4.1: .0376 seconds, answer 1569 correct\n", "Puzzle 4.1: .0194 seconds, answer 1569 correct\n",
"Puzzle 4.2: .0968 seconds, answer 9280 correct\n", "Puzzle 4.2: .0495 seconds, answer 9280 correct\n",
"Puzzle 5.1: .0071 seconds, answer 635 correct\n", "Puzzle 5.1: .0045 seconds, answer 635 correct\n",
"Puzzle 5.2: .0001 seconds, answer 369761800782619 correct\n", "Puzzle 5.2: .0000 seconds, answer 369761800782619 correct\n",
"Puzzle 6.1: .0017 seconds, answer 5877594983578 correct\n", "Puzzle 6.1: .0008 seconds, answer 5877594983578 correct\n",
"Puzzle 6.2: .0029 seconds, answer 11159825706149 correct\n", "Puzzle 6.2: .0013 seconds, answer 11159825706149 correct\n",
"Puzzle 7.1: .0008 seconds, answer 1681 correct\n", "Puzzle 7.1: .0003 seconds, answer 1681 correct\n",
"Puzzle 7.2: .0014 seconds, answer 422102272495018 correct\n", "Puzzle 7.2: .0007 seconds, answer 422102272495018 correct\n",
"Puzzle 8.1: .4600 seconds, answer 24360 correct\n", "Puzzle 8.1: .1981 seconds, answer 24360 correct\n",
"Puzzle 8.2: .5004 seconds, answer 2185817796 correct\n", "Puzzle 8.2: .2034 seconds, answer 2185817796 correct\n",
"Puzzle 9.1: .0267 seconds, answer 4772103936 correct\n", "Puzzle 9.1: .0187 seconds, answer 4772103936 correct\n",
"Puzzle 9.2: .0037 seconds, answer 1529675217 correct\n", "Puzzle 9.2: .0046 seconds, answer 1529675217 correct\n",
"Puzzle 10.1: .0541 seconds, answer 441 correct\n", "Puzzle 10.1: .0242 seconds, answer 441 correct\n",
"Puzzle 10.2: .1553 seconds, answer 18559 correct\n", "Puzzle 10.2: .0680 seconds, answer 18559 correct\n",
"Puzzle 11.1: .0005 seconds, answer 574 correct\n", "Puzzle 11.1: .0001 seconds, answer 574 correct\n",
"Puzzle 11.2: .0022 seconds, answer 306594217920240 correct\n", "Puzzle 11.2: .0010 seconds, answer 306594217920240 correct\n",
"Puzzle 12.1: .0013 seconds, answer 454 correct\n", "Puzzle 12.1: .0006 seconds, answer 454 correct\n",
"\n", "\n",
"Time in seconds: sum = 1.357, mean = .059, median = .002, max = .500\n" "Time in seconds: sum = .597, mean = .026, median = .001, max = .203\n"
] ]
} }
], ],
@@ -3110,7 +3110,7 @@
"id": "1098c017-2746-403c-bfb0-1a08cacc835d", "id": "1098c017-2746-403c-bfb0-1a08cacc835d",
"metadata": {}, "metadata": {},
"source": [ "source": [
"I solved all the puzzles and they run in well under 2 seconds of total run time. \n", "I solved all the puzzles. They run in well under a second of total run time, with Day 8 taking the longest time, at about 0.2 seconds per part.\n",
"\n", "\n",
"Happy Advent everyone, and thank you [Eric Wastl](https://was.tl/) for the interesting puzzles!\n", "Happy Advent everyone, and thank you [Eric Wastl](https://was.tl/) for the interesting puzzles!\n",
"\n", "\n",
@@ -3139,7 +3139,7 @@
"name": "python", "name": "python",
"nbconvert_exporter": "python", "nbconvert_exporter": "python",
"pygments_lexer": "ipython3", "pygments_lexer": "ipython3",
"version": "3.13.5" "version": "3.13.3"
} }
}, },
"nbformat": 4, "nbformat": 4,