Compare commits
4 Commits
d4300cb5af
...
5a24488608
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5a24488608 | ||
|
|
d058877d99 | ||
|
|
6a2ab5033f | ||
|
|
8c8f0cef1a |
@@ -4,7 +4,7 @@
|
|||||||
"cell_type": "markdown",
|
"cell_type": "markdown",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"source": [
|
"source": [
|
||||||
"<div align=\"right\">Peter Norvig, Nov. 2017</div>\n",
|
"<div align=\"right\"><i>Peter Norvig<br>Nov. 2017</i></div>\n",
|
||||||
"\n",
|
"\n",
|
||||||
"# Bad Grade, Good Experience\n",
|
"# Bad Grade, Good Experience\n",
|
||||||
"\n",
|
"\n",
|
||||||
@@ -12,11 +12,11 @@
|
|||||||
"\n",
|
"\n",
|
||||||
"> *As a student, did you ever get a bad grade on a programming assignment?* \n",
|
"> *As a student, did you ever get a bad grade on a programming assignment?* \n",
|
||||||
"\n",
|
"\n",
|
||||||
"I've forgotten most of my assignments, but there is one I do remember. It was something like this:\n",
|
"There is one that I do remember. It was in an introductory programming class where they wanted the students to get experience in a different language. It went something like this:\n",
|
||||||
"\n",
|
"\n",
|
||||||
"# The Concordance Assignment\n",
|
"# The Concordance Assignment\n",
|
||||||
"\n",
|
"\n",
|
||||||
"> *Using the [`Snobol`](http://www.snobol4.org/) language, read lines of text from the standard input and print a **concordance**, which is an alphabetized list of words in the text, with the line number(s) where each word appears. Words with different capitalization (like \"A\" and \"a\") should be merged into one entry.*\n",
|
"> *Using the [Snobol](http://www.snobol4.org/) language, read lines of text from the standard input and print a **concordance**, which is an alphabetized list of words in the text, with the line number(s) where each word appears. Words with different capitalization (like \"A\" and \"a\") should be merged into one entry.*\n",
|
||||||
"\n",
|
"\n",
|
||||||
"After studying Snobol a bit, I realized that the expected solution was along these lines:\n",
|
"After studying Snobol a bit, I realized that the expected solution was along these lines:\n",
|
||||||
"\n",
|
"\n",
|
||||||
@@ -28,28 +28,27 @@
|
|||||||
"\n",
|
"\n",
|
||||||
"That would be around 40 to 60 lines of code; an easy task. But I noticed three interesting things about Snobol:\n",
|
"That would be around 40 to 60 lines of code; an easy task. But I noticed three interesting things about Snobol:\n",
|
||||||
"\n",
|
"\n",
|
||||||
"* '`$`' is an *indirection* operator, so if the variable `'word'` has the value `\"A\"`, then `'$word = x'` is the same as `'A = x'`.\n",
|
"- '`$`' is an *indirection* operator, so if the variable `'word'` has the value `\"A\"`, then `'$word = x'` is the same as `'A = x'`.\n",
|
||||||
"* Uninitialized variables are treated as the empty string, so `'A = A + \"text\"'` works even if we haven't seen `'A'` before.\n",
|
"- Uninitialized variables are treated as the empty string, and coercion to string (e.g. from int) is automatic.\n",
|
||||||
"* When the program ends, the Snobol interpreter \n",
|
" - (For example, `A = A + 1 + \", \"'` sets `A` to `\"1, \"` if `A` was initially undefined.)\n",
|
||||||
|
"- When the program ends, the Snobol interpreter \n",
|
||||||
"prints out each variable (in sorted order), with its value, as a debugging aid.\n",
|
"prints out each variable (in sorted order), with its value, as a debugging aid.\n",
|
||||||
"\n",
|
"\n",
|
||||||
"That means I could use `$` to do away with the hash table and array data structures, eliminating steps 1, 3, 4, and 5, and just do step 2! \n",
|
"That means I could use `$` to do away with the hash table and array data structures, eliminating steps 1, 3, 4, and 5, and just do step 2! \n",
|
||||||
"\n",
|
"\n",
|
||||||
"# The Concordance Solution\n",
|
"# The Concordance Solution\n",
|
||||||
"\n",
|
"\n",
|
||||||
"I ended up with a program similar to the following (translated from Snobol to Python, but with `'$word'` indirection):"
|
"I ended up with a program similar to the following (translated from Snobol to Python, but using `'$word'` indirection):"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 1,
|
"execution_count": 1,
|
||||||
"metadata": {
|
"metadata": {},
|
||||||
"collapsed": true
|
|
||||||
},
|
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"program = \"\"\"\n",
|
"program = \"\"\"\n",
|
||||||
"for i, line in enumerate(input):\n",
|
"for i, line in enumerate(input, 1):\n",
|
||||||
" for word in re.findall(\"[A-Z]+\", line.upper()):\n",
|
" for word in re.findall(\"[A-Z]+\", line.upper()):\n",
|
||||||
" $word = $word + i + \", \"\n",
|
" $word = $word + i + \", \"\n",
|
||||||
"\"\"\""
|
"\"\"\""
|
||||||
@@ -61,12 +60,13 @@
|
|||||||
"source": [
|
"source": [
|
||||||
"That's just 3 lines, not 40 to 60! \n",
|
"That's just 3 lines, not 40 to 60! \n",
|
||||||
"\n",
|
"\n",
|
||||||
"To test the program, I'll write a mock Snobol/Python interpreter, which at heart is just a call to the Python interpreter, `exec(program)`, except that it handles the three things I mentioned about the Snobol interpreter, plus one more:\n",
|
"# The Snobol/Python Interpreter\n",
|
||||||
|
"\n",
|
||||||
|
"To test the program, I'll write a mock Snobol/Python interpreter, which calls the Python interpreter, `exec(program, _globals)`, except that it handles the three things I mentioned about the Snobol interpreter:\n",
|
||||||
"\n",
|
"\n",
|
||||||
"1. `$word` gets translated as `_globals[word]`.\n",
|
"1. `$word` gets translated as `_globals[word]`.\n",
|
||||||
"2. The interpreter calls `exec(program, _globals)`, where `_globals` is a `defaultdict` that makes variables default to the empty string.\n",
|
"2. Undefined variables default to an empty `Str` (a class that coerces for concatenation).\n",
|
||||||
"3. After the `exec` completes, the user-defined variables (but not the built-in ones) are printed.\n",
|
"4. After the `exec` completes, the user-defined variables (but not the built-in ones) are printed.\n"
|
||||||
"4. Concatenating a string with an integer coerces the `int` to `str` automatically. I'll handle that with a `Str` class.\n"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -79,23 +79,25 @@
|
|||||||
"import re\n",
|
"import re\n",
|
||||||
"\n",
|
"\n",
|
||||||
"def snobol(program, data=''):\n",
|
"def snobol(program, data=''):\n",
|
||||||
" \"\"\"A Python interpreter with four Snobol-ish features:\n",
|
" \"\"\"A Python interpreter with three Snobol-ish features:\n",
|
||||||
" 1. $word indirection; 2. variables default to empty string; \n",
|
" • $word indirection; \n",
|
||||||
" 3. post-mortem dump; 4. automatic coercing to string\"\"\"\n",
|
" • variables default to empty string and concatenation coerces to string\n",
|
||||||
" program = re.sub(r'\\$(\\w+)', r'_globals[\\1]', program) # 1. \n",
|
" • post-mortem dump of all user-defined variables\"\"\"\n",
|
||||||
" _globals = defaultdict(Str, vars(__builtins__)) # 4., 2.\n",
|
" program = re.sub(r'\\$(\\w+)', r'_globals[\\1]', program) # $ is indirection\n",
|
||||||
" _globals.update(re=re, input=data.splitlines(), _globals=_globals)\n",
|
" _globals = defaultdict(Str) # default var is empty Str\n",
|
||||||
|
" _globals.update(vars(__builtins__), _globals=_globals, # load builtin functions\n",
|
||||||
|
" input=data.splitlines(), re=re)\n",
|
||||||
" builtins = set(_globals) | {'__builtins__'}\n",
|
" builtins = set(_globals) | {'__builtins__'}\n",
|
||||||
" try:\n",
|
" try:\n",
|
||||||
" exec(program, _globals)\n",
|
" exec(program, _globals)\n",
|
||||||
" finally:\n",
|
" finally: # post-mortem dump\n",
|
||||||
" print('-' * 79) # 3. \n",
|
" print('-' * 79) \n",
|
||||||
" for name in sorted(_globals):\n",
|
" for name in sorted(_globals):\n",
|
||||||
" if name not in builtins:\n",
|
" if name not in builtins:\n",
|
||||||
" print('{:10} = {}'.format(name, _globals[name]))\n",
|
" print('{:10} = {}'.format(name, _globals[name]))\n",
|
||||||
" \n",
|
" \n",
|
||||||
"class Str(str):\n",
|
"class Str(str):\n",
|
||||||
" \"String class with automatic coercion for +\"\n",
|
" \"\"\"String subclass with automatic coercion for concatenation with +\"\"\"\n",
|
||||||
" def __add__(self, other): return Str(str(self) + str(other))\n",
|
" def __add__(self, other): return Str(str(self) + str(other))\n",
|
||||||
" def __radd__(self, other): return Str(str(other) + str(self))\n"
|
" def __radd__(self, other): return Str(str(other) + str(self))\n"
|
||||||
]
|
]
|
||||||
@@ -104,7 +106,7 @@
|
|||||||
"cell_type": "markdown",
|
"cell_type": "markdown",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"source": [
|
"source": [
|
||||||
"Now we can run the program on some data:"
|
"Now we can define some data and run the program on it:"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -113,7 +115,7 @@
|
|||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"data = \"\"\"\n",
|
"data = \"\"\"\\\n",
|
||||||
"There she was just a-walkin' down the street, \n",
|
"There she was just a-walkin' down the street, \n",
|
||||||
"Singin' \"Do wah diddy diddy dum diddy do\"\n",
|
"Singin' \"Do wah diddy diddy dum diddy do\"\n",
|
||||||
"Snappin' her fingers and shufflin' her feet, \n",
|
"Snappin' her fingers and shufflin' her feet, \n",
|
||||||
@@ -223,7 +225,7 @@
|
|||||||
],
|
],
|
||||||
"source": [
|
"source": [
|
||||||
"program = \"\"\"\n",
|
"program = \"\"\"\n",
|
||||||
"for i, line in enumerate(input):\n",
|
"for i, line in enumerate(input, 1):\n",
|
||||||
" for word in re.findall(\"[A-Z]+\", line.upper()):\n",
|
" for word in re.findall(\"[A-Z]+\", line.upper()):\n",
|
||||||
" $word = $word + i + \", \"\n",
|
" $word = $word + i + \", \"\n",
|
||||||
"del i, line, word\n",
|
"del i, line, word\n",
|
||||||
@@ -247,7 +249,7 @@
|
|||||||
"# TFW you flunk AI\n",
|
"# TFW you flunk AI\n",
|
||||||
"\n",
|
"\n",
|
||||||
"Here's another example that I had completely forgotten about until 2016, when I was cleaning out a filing cabinet and came across my old college transcript. It turns out that *I flunked an AI course!* (Or at least, didn't complete it.) This course was offered by Prof. Richard Millward in the Cognitive Science program. I certainly remember a lot of influential material from this class: we read David Marr, we read Winston's just-published *Psychology of Computer Vision*, we read a chapter from Duda and Hart which was then only a few years old. The things I learned in that course have stuck with me for decades, but one thing that didn't stick is that, according to my transcript, I never completed the course! I'm not sure what happened. I did an independent study with Ulf Grenander that semester; my best guess\n",
|
"Here's another example that I had completely forgotten about until 2016, when I was cleaning out a filing cabinet and came across my old college transcript. It turns out that *I flunked an AI course!* (Or at least, didn't complete it.) This course was offered by Prof. Richard Millward in the Cognitive Science program. I certainly remember a lot of influential material from this class: we read David Marr, we read Winston's just-published *Psychology of Computer Vision*, we read a chapter from Duda and Hart which was then only a few years old. The things I learned in that course have stuck with me for decades, but one thing that didn't stick is that, according to my transcript, I never completed the course! I'm not sure what happened. I did an independent study with Ulf Grenander that semester; my best guess\n",
|
||||||
"is that when I started doing the independent study that would have put me over some limit, and so I had to drop the AI course. \n",
|
"is that when I started doing the independent study that would have put me over some limit for number of credits taken, and so I had to drop the AI course. \n",
|
||||||
"\n",
|
"\n",
|
||||||
"So in both the concordance program and the Cognitive Science AI class, I had a great experience and I learned a lot, even if it wasn't well-reflected in official credit. The moral is: look for the good experiences, and don't worry about the official credit.\n"
|
"So in both the concordance program and the Cognitive Science AI class, I had a great experience and I learned a lot, even if it wasn't well-reflected in official credit. The moral is: look for the good experiences, and don't worry about the official credit.\n"
|
||||||
]
|
]
|
||||||
@@ -255,7 +257,7 @@
|
|||||||
],
|
],
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"kernelspec": {
|
"kernelspec": {
|
||||||
"display_name": "Python 3",
|
"display_name": "Python 3 (ipykernel)",
|
||||||
"language": "python",
|
"language": "python",
|
||||||
"name": "python3"
|
"name": "python3"
|
||||||
},
|
},
|
||||||
@@ -269,9 +271,9 @@
|
|||||||
"name": "python",
|
"name": "python",
|
||||||
"nbconvert_exporter": "python",
|
"nbconvert_exporter": "python",
|
||||||
"pygments_lexer": "ipython3",
|
"pygments_lexer": "ipython3",
|
||||||
"version": "3.5.3"
|
"version": "3.13.9"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nbformat": 4,
|
"nbformat": 4,
|
||||||
"nbformat_minor": 2
|
"nbformat_minor": 4
|
||||||
}
|
}
|
||||||
|
|||||||
212
ipynb/euler_data.py
Normal file
212
ipynb/euler_data.py
Normal file
@@ -0,0 +1,212 @@
|
|||||||
|
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
def read_data(filename) -> str:
|
||||||
|
"""Read a file from the data/ subdirectory and return the contents as a stripped string."""
|
||||||
|
return ("data" / Path(filename)).read_text().strip()
|
||||||
|
|
||||||
|
DATA = {
|
||||||
|
22: read_data("0022_names.txt"),
|
||||||
|
42: read_data("0042_words.txt"),
|
||||||
|
54: read_data("0054_poker.txt"),
|
||||||
|
59: read_data("0059_cipher.txt"),
|
||||||
|
67: read_data("0067_triangle.txt"),
|
||||||
|
79: read_data("0079_keylog.txt"),
|
||||||
|
81: read_data("0081_matrix.txt"),
|
||||||
|
82: read_data("0082_matrix.txt"),
|
||||||
|
83: read_data("0083_matrix.txt"),
|
||||||
|
89: read_data("0089_roman.txt"),
|
||||||
|
96: read_data("0096_sudoku.txt"),
|
||||||
|
98: read_data("0098_words.txt"),
|
||||||
|
99: read_data("0099_base_exp.txt"),
|
||||||
|
|
||||||
|
|
||||||
|
8: """
|
||||||
|
73167176531330624919225119674426574742355349194934
|
||||||
|
96983520312774506326239578318016984801869478851843
|
||||||
|
85861560789112949495459501737958331952853208805511
|
||||||
|
12540698747158523863050715693290963295227443043557
|
||||||
|
66896648950445244523161731856403098711121722383113
|
||||||
|
62229893423380308135336276614282806444486645238749
|
||||||
|
30358907296290491560440772390713810515859307960866
|
||||||
|
70172427121883998797908792274921901699720888093776
|
||||||
|
65727333001053367881220235421809751254540594752243
|
||||||
|
52584907711670556013604839586446706324415722155397
|
||||||
|
53697817977846174064955149290862569321978468622482
|
||||||
|
83972241375657056057490261407972968652414535100474
|
||||||
|
82166370484403199890008895243450658541227588666881
|
||||||
|
16427171479924442928230863465674813919123162824586
|
||||||
|
17866458359124566529476545682848912883142607690042
|
||||||
|
24219022671055626321111109370544217506941658960408
|
||||||
|
07198403850962455444362981230987879927244284909188
|
||||||
|
84580156166097919133875499200524063689912560717606
|
||||||
|
05886116467109405077541002256983155200055935729725
|
||||||
|
71636269561882670428252483600823257530420752963450
|
||||||
|
""",
|
||||||
|
|
||||||
|
11: """
|
||||||
|
08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
|
||||||
|
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
|
||||||
|
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
|
||||||
|
52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
|
||||||
|
22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
|
||||||
|
24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
|
||||||
|
32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70
|
||||||
|
67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21
|
||||||
|
24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72
|
||||||
|
21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95
|
||||||
|
78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92
|
||||||
|
16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57
|
||||||
|
86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58
|
||||||
|
19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40
|
||||||
|
04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66
|
||||||
|
88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69
|
||||||
|
04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
|
||||||
|
20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16
|
||||||
|
20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54
|
||||||
|
01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48
|
||||||
|
""",
|
||||||
|
|
||||||
|
18: """
|
||||||
|
75
|
||||||
|
95 64
|
||||||
|
17 47 82
|
||||||
|
18 35 87 10
|
||||||
|
20 04 82 47 65
|
||||||
|
19 01 23 75 03 34
|
||||||
|
88 02 77 73 07 63 67
|
||||||
|
99 65 04 28 06 16 70 92
|
||||||
|
41 41 26 56 83 40 80 70 33
|
||||||
|
41 48 72 33 47 32 37 16 94 29
|
||||||
|
53 71 44 65 25 43 91 52 97 51 14
|
||||||
|
70 11 33 28 77 73 17 78 39 68 17 57
|
||||||
|
91 71 52 38 17 14 91 43 58 50 27 29 48
|
||||||
|
63 66 04 68 89 53 67 30 73 16 69 87 40 31
|
||||||
|
04 62 98 27 23 09 70 98 73 93 38 53 60 04 23
|
||||||
|
""",
|
||||||
|
|
||||||
|
|
||||||
|
13: """
|
||||||
|
37107287533902102798797998220837590246510135740250
|
||||||
|
46376937677490009712648124896970078050417018260538
|
||||||
|
74324986199524741059474233309513058123726617309629
|
||||||
|
91942213363574161572522430563301811072406154908250
|
||||||
|
23067588207539346171171980310421047513778063246676
|
||||||
|
89261670696623633820136378418383684178734361726757
|
||||||
|
28112879812849979408065481931592621691275889832738
|
||||||
|
44274228917432520321923589422876796487670272189318
|
||||||
|
47451445736001306439091167216856844588711603153276
|
||||||
|
70386486105843025439939619828917593665686757934951
|
||||||
|
62176457141856560629502157223196586755079324193331
|
||||||
|
64906352462741904929101432445813822663347944758178
|
||||||
|
92575867718337217661963751590579239728245598838407
|
||||||
|
58203565325359399008402633568948830189458628227828
|
||||||
|
80181199384826282014278194139940567587151170094390
|
||||||
|
35398664372827112653829987240784473053190104293586
|
||||||
|
86515506006295864861532075273371959191420517255829
|
||||||
|
71693888707715466499115593487603532921714970056938
|
||||||
|
54370070576826684624621495650076471787294438377604
|
||||||
|
53282654108756828443191190634694037855217779295145
|
||||||
|
36123272525000296071075082563815656710885258350721
|
||||||
|
45876576172410976447339110607218265236877223636045
|
||||||
|
17423706905851860660448207621209813287860733969412
|
||||||
|
81142660418086830619328460811191061556940512689692
|
||||||
|
51934325451728388641918047049293215058642563049483
|
||||||
|
62467221648435076201727918039944693004732956340691
|
||||||
|
15732444386908125794514089057706229429197107928209
|
||||||
|
55037687525678773091862540744969844508330393682126
|
||||||
|
18336384825330154686196124348767681297534375946515
|
||||||
|
80386287592878490201521685554828717201219257766954
|
||||||
|
78182833757993103614740356856449095527097864797581
|
||||||
|
16726320100436897842553539920931837441497806860984
|
||||||
|
48403098129077791799088218795327364475675590848030
|
||||||
|
87086987551392711854517078544161852424320693150332
|
||||||
|
59959406895756536782107074926966537676326235447210
|
||||||
|
69793950679652694742597709739166693763042633987085
|
||||||
|
41052684708299085211399427365734116182760315001271
|
||||||
|
65378607361501080857009149939512557028198746004375
|
||||||
|
35829035317434717326932123578154982629742552737307
|
||||||
|
94953759765105305946966067683156574377167401875275
|
||||||
|
88902802571733229619176668713819931811048770190271
|
||||||
|
25267680276078003013678680992525463401061632866526
|
||||||
|
36270218540497705585629946580636237993140746255962
|
||||||
|
24074486908231174977792365466257246923322810917141
|
||||||
|
91430288197103288597806669760892938638285025333403
|
||||||
|
34413065578016127815921815005561868836468420090470
|
||||||
|
23053081172816430487623791969842487255036638784583
|
||||||
|
11487696932154902810424020138335124462181441773470
|
||||||
|
63783299490636259666498587618221225225512486764533
|
||||||
|
67720186971698544312419572409913959008952310058822
|
||||||
|
95548255300263520781532296796249481641953868218774
|
||||||
|
76085327132285723110424803456124867697064507995236
|
||||||
|
37774242535411291684276865538926205024910326572967
|
||||||
|
23701913275725675285653248258265463092207058596522
|
||||||
|
29798860272258331913126375147341994889534765745501
|
||||||
|
18495701454879288984856827726077713721403798879715
|
||||||
|
38298203783031473527721580348144513491373226651381
|
||||||
|
34829543829199918180278916522431027392251122869539
|
||||||
|
40957953066405232632538044100059654939159879593635
|
||||||
|
29746152185502371307642255121183693803580388584903
|
||||||
|
41698116222072977186158236678424689157993532961922
|
||||||
|
62467957194401269043877107275048102390895523597457
|
||||||
|
23189706772547915061505504953922979530901129967519
|
||||||
|
86188088225875314529584099251203829009407770775672
|
||||||
|
11306739708304724483816533873502340845647058077308
|
||||||
|
82959174767140363198008187129011875491310547126581
|
||||||
|
97623331044818386269515456334926366572897563400500
|
||||||
|
42846280183517070527831839425882145521227251250327
|
||||||
|
55121603546981200581762165212827652751691296897789
|
||||||
|
32238195734329339946437501907836945765883352399886
|
||||||
|
75506164965184775180738168837861091527357929701337
|
||||||
|
62177842752192623401942399639168044983993173312731
|
||||||
|
32924185707147349566916674687634660915035914677504
|
||||||
|
99518671430235219628894890102423325116913619626622
|
||||||
|
73267460800591547471830798392868535206946944540724
|
||||||
|
76841822524674417161514036427982273348055556214818
|
||||||
|
97142617910342598647204516893989422179826088076852
|
||||||
|
87783646182799346313767754307809363333018982642090
|
||||||
|
10848802521674670883215120185883543223812876952786
|
||||||
|
71329612474782464538636993009049310363619763878039
|
||||||
|
62184073572399794223406235393808339651327408011116
|
||||||
|
66627891981488087797941876876144230030984490851411
|
||||||
|
60661826293682836764744779239180335110989069790714
|
||||||
|
85786944089552990653640447425576083659976645795096
|
||||||
|
66024396409905389607120198219976047599490197230297
|
||||||
|
64913982680032973156037120041377903785566085089252
|
||||||
|
16730939319872750275468906903707539413042652315011
|
||||||
|
94809377245048795150954100921645863754710598436791
|
||||||
|
78639167021187492431995700641917969777599028300699
|
||||||
|
15368713711936614952811305876380278410754449733078
|
||||||
|
40789923115535562561142322423255033685442488917353
|
||||||
|
44889911501440648020369068063960672322193204149535
|
||||||
|
41503128880339536053299340368006977710650566631954
|
||||||
|
81234880673210146739058568557934581403627822703280
|
||||||
|
82616570773948327592232845941706525094512325230608
|
||||||
|
22918802058777319719839450180888072429661980811197
|
||||||
|
77158542502016545090413245809786882778948721859617
|
||||||
|
72107838435069186155435662884062257473692284509516
|
||||||
|
20849603980134001723930671666823555245252804609722
|
||||||
|
53503534226472524250874054075591789781264330331690
|
||||||
|
"""
|
||||||
|
}
|
||||||
|
|
||||||
|
EXPECTED = {
|
||||||
|
1: 233168, 2: 4613732, 3: 6857, 4: 906609, 5: 232792560, 6: 25164150,
|
||||||
|
7: 104743, 8: 23514624000, 9: 31875000, 10: 142913828922, 11: 70600674,
|
||||||
|
12: 76576500, 13: 5537376230, 14: 837799, 15: 137846528820, 16: 1366,
|
||||||
|
17: 21124, 18: 1074, 19: 171, 20: 648, 21: 31626, 22: 871198282,
|
||||||
|
23: 4179871, 24: 2783915460, 25: 4782, 26: 983, 27: -59231, 28: 669171001,
|
||||||
|
29: 9183, 30: 443839, 31: 73682, 32: 45228, 33: 100, 34: 40730, 35: 55,
|
||||||
|
36: 872187, 37: 748317, 38: 932718654, 39: 840, 40: 210, 41: 7652413,
|
||||||
|
42: 162, 43: 16695334890, 44: 5482660, 45: 1533776805, 46: 5777,
|
||||||
|
47: 134043, 48: 9110846700, 49: 296962999629, 50: 997651, 51: 121313,
|
||||||
|
52: 142857, 53: 4075, 54: 376, 55: 249, 56: 972, 57: 153, 58: 26241,
|
||||||
|
59: 107359, 60: 26033, 61: 28684, 62: 127035954683, 63: 49, 64: 1322,
|
||||||
|
65: 272, 66: 661, 67: 7273, 68: 6531031914842725, 69: 510510, 70: 8319823,
|
||||||
|
71: 428570, 72: 303963552391, 73: 7295372, 74: 402, 75: 161667,
|
||||||
|
76: 190569291, 77: 71, 78: 55374, 79: 73162890, 80: 40886, 81: 427337,
|
||||||
|
82: 260324, 83: 425185, 84: 101524, 85: 2772, 86: 1818, 87: 1097343,
|
||||||
|
88: 7587457, 89: 743, 90: 1217, 91: 14234, 92: 8581146, 93: 1258,
|
||||||
|
94: 518408346, 95: 14316, 96: 24702, 97: 8739992577, 98: 18769, 99: 709,
|
||||||
|
100: 756872327473,
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user