From 649a1b97fdf87bfd8a3f1c47ea51cd67a83a902b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Kope=C4=87?= <3338226+mkopec87@users.noreply.github.com> Date: Wed, 11 Dec 2024 06:26:03 +0100 Subject: [PATCH] Solution day 11 from 2024 (#18) --- src/2024/11/2024_11.py | 49 ++++++++++++++++++++++++++++++++++++ src/2024/11/sample_input.txt | 1 + 2 files changed, 50 insertions(+) create mode 100644 src/2024/11/2024_11.py create mode 100644 src/2024/11/sample_input.txt diff --git a/src/2024/11/2024_11.py b/src/2024/11/2024_11.py new file mode 100644 index 0000000..bc15daa --- /dev/null +++ b/src/2024/11/2024_11.py @@ -0,0 +1,49 @@ +from collections import Counter + +from src.utils.data import load_data +from src.utils.submission import submit_or_print + + +def main(debug: bool) -> None: + input_data = load_data(debug) + + stone_counter = parse_input(input_data) + + result_part1 = sum(blink(stone_counter, 25).values()) + result_part2 = sum(blink(stone_counter, 75).values()) + + submit_or_print(result_part1, result_part2, debug) + + +def parse_input(input_data: str) -> Counter[int]: + return Counter([int(n) for n in input_data.split(" ")]) + + +def blink(initial_state: Counter[int], blinks: int) -> Counter[int]: + current_state = Counter(initial_state) + for _ in range(blinks): + next_state = Counter(current_state) + + for number, count in current_state.items(): + next_state[number] -= count + if number == 0: + next_state[1] += count + elif len(str(number)) % 2 == 0: + s = str(number) + split_point = len(s) // 2 + first = int(s[:split_point]) + second = int(s[split_point:]) + next_state[first] += count + next_state[second] += count + else: + next_state[2024 * number] += count + + current_state = next_state + + return current_state + + +if __name__ == "__main__": + debug_mode = True + # debug_mode = False + main(debug_mode) diff --git a/src/2024/11/sample_input.txt b/src/2024/11/sample_input.txt new file mode 100644 index 0000000..265e403 --- /dev/null +++ b/src/2024/11/sample_input.txt @@ -0,0 +1 @@ +131 1200 \ No newline at end of file