From 4528397adeec0bbd990081c2e78b6778e1ef70e6 Mon Sep 17 00:00:00 2001 From: StarlitGhost <679547+StarlitGhost@users.noreply.github.com> Date: Fri, 13 Dec 2024 10:39:48 +0000 Subject: [PATCH] [2024/13] p1 & p2 solved --- .aoc_tiles/tiles/2024/13.png | Bin 0 -> 5065 bytes 2024/13/example | 15 +++++++++++ 2024/13/script.py | 48 +++++++++++++++++++++++++++++++++++ README.md | 7 +++-- 4 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 .aoc_tiles/tiles/2024/13.png create mode 100644 2024/13/example create mode 100644 2024/13/script.py diff --git a/.aoc_tiles/tiles/2024/13.png b/.aoc_tiles/tiles/2024/13.png new file mode 100644 index 0000000000000000000000000000000000000000..1bf2f0a5c72a49d2c937a25de7151e3890b4b18f GIT binary patch literal 5065 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 literal 0 HcmV?d00001 diff --git a/2024/13/example b/2024/13/example new file mode 100644 index 0000000..912f482 --- /dev/null +++ b/2024/13/example @@ -0,0 +1,15 @@ +Button A: X+94, Y+34 +Button B: X+22, Y+67 +Prize: X=8400, Y=5400 + +Button A: X+26, Y+66 +Button B: X+67, Y+21 +Prize: X=12748, Y=12176 + +Button A: X+17, Y+86 +Button B: X+84, Y+37 +Prize: X=7870, Y=6450 + +Button A: X+69, Y+23 +Button B: X+27, Y+71 +Prize: X=18641, Y=10279 diff --git a/2024/13/script.py b/2024/13/script.py new file mode 100644 index 0000000..282781b --- /dev/null +++ b/2024/13/script.py @@ -0,0 +1,48 @@ +from GhostyUtils import aoc +from GhostyUtils.vec2 import Vec2 + + +def solve(machine: list[list[tuple], tuple], offset: int = 0): + a, b = [Vec2(button) for button in machine[0]] + p = Vec2(machine[1]) + Vec2(offset, offset) + + if aoc.args.progress or aoc.args.verbose: + print(f"A vec: {a}, B vec: {b}, Prize location: {p}") + + det = (a.x * b.y - a.y * b.x) + + a_presses = int((p.x * b.y - p.y * b.x) / det) + b_presses = int((p.y * a.x - p.x * a.y) / det) + + if a * a_presses + b * b_presses == p: + if aoc.args.progress or aoc.args.verbose: + print(f"> A: {a_presses}x, B: {b_presses}x, Tokens: {a_presses * 3 + b_presses}") + return a_presses * 3 + b_presses + else: + if aoc.args.progress or aoc.args.verbose: + print("> Misses") + return 0 + + +def main(): + inputs = aoc.read_sections() + + machines = [] + for mch in inputs: + mch = mch.splitlines() + buttons = [tuple(int(coord[2:]) + for coord in btn.split(': ')[1].split(', ')) + for btn in mch[:2]] + prize = tuple(int(coord[2:]) for coord in mch[2].split(': ')[1].split(', ')) + + machines.append([buttons, prize]) + + if aoc.args.verbose: + print(f"buttons: {buttons}, prize: {prize}") + + print(f"p1: {sum(solve(machine) for machine in machines)}") + print(f"p2: {sum(solve(machine, offset=10000000000000) for machine in machines)}") + + +if __name__ == "__main__": + main() diff --git a/README.md b/README.md index fd0c468..26c0322 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,10 @@ My solutions to the yearly Advents of Code

- Advent of Code - 185/476 ⭐ + Advent of Code - 187/476 ⭐

- 2024 - 24 ⭐ - Python + 2024 - 26 ⭐ - Python

@@ -44,6 +44,9 @@ My solutions to the yearly Advents of Code + + +

2023 - 47 ⭐ - Python