From 743966c7b803612cf17df95c19c039ba4d229e4e Mon Sep 17 00:00:00 2001 From: felixm Date: Thu, 28 Sep 2023 23:23:55 +0200 Subject: [PATCH] Solve e816 because I have to get easy ones for my Euler goal. --- python/e816.py | 39 ++++++++++++++++++++++++++++++++++ python/lib_create_templates.py | 17 +++++++++------ 2 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 python/e816.py diff --git a/python/e816.py b/python/e816.py new file mode 100644 index 0000000..60e0d4a --- /dev/null +++ b/python/e816.py @@ -0,0 +1,39 @@ +from math import sqrt + + +def distance(p1, p2) -> float: + return (p1[0] - p2[0]) ** 2 + (p1[1] - p2[1]) ** 2 + + +def points(k: int): + s = 290797 + mod = 50515093 + # s = 5 + # mod = 23 + points = [] + for _ in range(k): + sn = (s ** 2) % mod + p = (s, sn) + points.append(p) + s = (sn ** 2) % mod + return points + + +def euler_816(): + ps = sorted(points(2000000), key=lambda p: p[0]) + d_min = float("inf") + sweep_dist = 5 # heuristic + for i in range(len(ps)): + for j in range(i, min(i + sweep_dist, len(ps))): + if i == j: + continue + d = distance(ps[i], ps[j]) + if d < d_min: + d_min = d + return round(sqrt(d_min), 9) + + +if __name__ == "__main__": + solution = euler_816() + print("e816.py: " + str(solution)) + assert(solution == 20.880613018) diff --git a/python/lib_create_templates.py b/python/lib_create_templates.py index 54ad75e..7a4b82e 100644 --- a/python/lib_create_templates.py +++ b/python/lib_create_templates.py @@ -1,5 +1,4 @@ -FROM = 100 -TILL = 100 +import sys TEMPLATE = """ def euler_XXX(): @@ -14,13 +13,17 @@ if __name__ == "__main__": """ -for i in range(FROM, TILL + 1): - if i < 100: - e = "0" + str(i) - else: - e = str(i) +def main(): + try: + e = sys.argv[1] + except IndexError: + print("Provide Euler problem number for which to create template.") + return filename = "e" + e + ".py" with open(filename, "w") as f: s = TEMPLATE.replace("XXX", e) f.write(s) + +if __name__ == "__main__": + main()