From d65743eeb2daa5b33aabdddc59730902cbe10a11 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 5 Dec 2024 12:00:30 -0800 Subject: [PATCH] 2024 Dec 05th --- Python/2024/05/main.py | 47 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 Python/2024/05/main.py diff --git a/Python/2024/05/main.py b/Python/2024/05/main.py new file mode 100644 index 0000000..8673a69 --- /dev/null +++ b/Python/2024/05/main.py @@ -0,0 +1,47 @@ +input = open("input", 'r').read().split("\n\n") + +# d = [line for line in input] +rl = [line.split("|") for line in input[0].split("\n")] +d = [[int(v) for v in line.split(",") if v != ""] for line in input[1].split("\n") if line != ""] + +r = {} + +for rule in rl: + f,s = rule + f,s = int(f),int(s) + if s in r: + r[s].add(f) + else: + r[s] = {f} + +def run(p2=False): + sm = 0 + for p in d: + sp = set(p) + seen = set() + if p2: + while len(seen) != len(sp): + seen = set() + for i, v in enumerate(p): + reqs = sp & (r[v] if v in r else set()) + if reqs > seen: + ind = max([p.index(j) for j in reqs]) + p[i], p[ind] = p[ind], p[i] + break + seen.add(v) + sm += p[(len(p)//2)] + else: + for v in p: + reqs = sp & (r[v] if v in r else set()) + if reqs > seen: + break + seen.add(v) + if len(seen) == len(sp): + sm += p[(len(p)//2)] + return sm + + +p1 = run() +p2 = run(True) +print(p1) +print(p2 - p1)