Add files via upload
This commit is contained in:
4739
ipynb/Euler-Fable.ipynb
Normal file
4739
ipynb/Euler-Fable.ipynb
Normal file
File diff suppressed because it is too large
Load Diff
4801
ipynb/Euler-Kimi.ipynb
Normal file
4801
ipynb/Euler-Kimi.ipynb
Normal file
File diff suppressed because it is too large
Load Diff
5191
ipynb/Euler-Opus.ipynb
Normal file
5191
ipynb/Euler-Opus.ipynb
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,68 @@
|
||||
#### Project Euler: data and problem running harness
|
||||
#### Used by Euler.ipynb and Euler-LLM.upynb
|
||||
|
||||
from pathlib import Path
|
||||
from statistics import mean, median
|
||||
import time
|
||||
|
||||
#### Harness: `run(euler_1)` to record and data and `runs()` to display it
|
||||
|
||||
RUNS = {}
|
||||
|
||||
class run:
|
||||
"""Verify that calling `euler_n()` computes the `EXPECTED` result.
|
||||
Store run objects in `RUNS`."""
|
||||
def __init__(self, euler_n):
|
||||
n = int(euler_n.__name__.split('_')[1])
|
||||
self.n = n
|
||||
RUNS[n] = self
|
||||
self.title = (euler_n.__doc__ or '?:').split(':')[0]
|
||||
start = time.perf_counter()
|
||||
self.got = euler_n()
|
||||
self.msecs = round((time.perf_counter() - start) * 1000)
|
||||
|
||||
def __repr__(self) -> str:
|
||||
expected = EXPECTED[self.n]
|
||||
check = ('✅' if (self.got == expected) else f'❌ (expected {expected})')
|
||||
speed = ('🐌' if self.msecs > 1000 else '') # Snail icon for run times over a second
|
||||
return f'{self.n:3}: {self.title:40} {self.msecs:6,d} msec ⇒ {self.got:<16} {check} {speed}'
|
||||
|
||||
def runs() -> None:
|
||||
"""Summary report on all the runs."""
|
||||
T = [answer.msecs / 1000 for answer in RUNS.values()]
|
||||
print(f'Problems: {len(T)}\n'
|
||||
f'Run time in seconds: total: {sum(T):.1f}, max: {max(T):.1f}, '
|
||||
f'mean: {mean(T):.3f}, median: {median(T):.3f}\n')
|
||||
for i in sorted(RUNS):
|
||||
print(RUNS[i])
|
||||
|
||||
#### Expected answers
|
||||
|
||||
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,
|
||||
}
|
||||
|
||||
#### Data
|
||||
|
||||
#### 13 problems have data from a file
|
||||
#### 4 problems have data mentioned in the problem description and copied here
|
||||
|
||||
def read_data(filename) -> str:
|
||||
"""Read a file from the data/ subdirectory and return the contents as a stripped string."""
|
||||
@@ -189,24 +252,3 @@ DATA = {
|
||||
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