From 0863c640f7cb22d801bd39f73fdbafc7f5bdc3fa Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Mon, 1 Dec 2025 21:08:30 +0000 Subject: [PATCH] 2025: d01: ex2: add solution --- 2025/d01/ex2/ex2.py | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100755 2025/d01/ex2/ex2.py diff --git a/2025/d01/ex2/ex2.py b/2025/d01/ex2/ex2.py new file mode 100755 index 0000000..d47c5cd --- /dev/null +++ b/2025/d01/ex2/ex2.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python + +import itertools +import sys + + +def sign(n: int) -> int: + if n == 0: + return 0 + return n // abs(n) + + +def solve(input: list[str]) -> int: + def parse_turn(input: str) -> int: + direction = input[0] + clicks = int(input[1:]) + return clicks * (1 if direction == "R" else -1) + + def parse(input: list[str]) -> list[int]: + return [parse_turn(turn) for turn in input] + + def count_zeros(before: int, after: int) -> int: + delta = after - before + to_zero = (before % 100) * -sign(delta) + if to_zero <= 0: + to_zero += 100 + return (abs(delta) + 100 - to_zero) // 100 + + turns = parse(input) + positions = itertools.accumulate(turns, initial=50) + return sum(count_zeros(a, b) for a, b in itertools.pairwise(positions)) + + +def main() -> None: + input = sys.stdin.read().splitlines() + print(solve(input)) + + +if __name__ == "__main__": + main()