From a1a69d7114a6ba02c29a4670f96106ade1f8447c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20Engl=C3=B6f=20Ytterstr=C3=B6m?= Date: Wed, 6 Dec 2023 07:08:59 +0100 Subject: [PATCH] Solve 2023:06 "Wait for it" --- 2023-python/output/day_06.py | 51 ++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 2023-python/output/day_06.py diff --git a/2023-python/output/day_06.py b/2023-python/output/day_06.py new file mode 100644 index 0000000..2f604cf --- /dev/null +++ b/2023-python/output/day_06.py @@ -0,0 +1,51 @@ +from math import prod, sqrt, ceil, floor +from output import answer, puzzleinput + +n = 6 +title = "Wait For It" + + +@answer(1, "The product of all record times for all races is {}") +def part_1(presolved): + return presolved[0] + + +@answer(2, "The product of all record times for the single long race is {}") +def part_2(presolved): + return presolved[1] + + +@puzzleinput(n) +def parse_input(data): + return data + + +def presolve(data): + values = data.split() + l = len(values) // 2 + races = list( + map( + lambda x: (int(x[0]), int(x[1])), list(zip(values[: l + 1], values[l:]))[1:] + ) + ) + p1 = prod(sum(bpt * (t - bpt) > d for bpt in range(t)) for t, d in races) + t = int("".join(values[1:l])) + d = int("".join(values[l + 1 :])) + # quadratic formula: + # https://en.wikipedia.org/wiki/Quadratic_formula + l = ceil((-t + sqrt(t**2 - 4 * d)) / -2) + h = floor((-t - sqrt(t**2 - 4 * d)) / -2) + p2 = h - l + 1 + return p1, p2 + + +if __name__ == "__main__": + inp = parse_input() + + inp = presolve(inp) + + a = part_1(inp) + b = part_2(inp) + + assert a == 1083852 + assert b == 23501589