From 4ade0bee05951107958b8d1ae296bc32d428687b Mon Sep 17 00:00:00 2001 From: Unknown <53575465+EndlessEevee@users.noreply.github.com> Date: Wed, 11 Dec 2024 10:33:18 -0700 Subject: [PATCH] day 11 --- src/data/input_11.txt | 1 + src/solution_11.py | 45 +++++++++++++++++++++++++++++-------------- 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/src/data/input_11.txt b/src/data/input_11.txt index e69de29..05f0acb 100644 --- a/src/data/input_11.txt +++ b/src/data/input_11.txt @@ -0,0 +1 @@ +8069 87014 98 809367 525 0 9494914 5 \ No newline at end of file diff --git a/src/solution_11.py b/src/solution_11.py index e033b00..7f39f28 100644 --- a/src/solution_11.py +++ b/src/solution_11.py @@ -1,28 +1,45 @@ import sys import os from pathlib import Path +from collections import defaultdict sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) import AOC_Helpers as utils -import re -import itertools -import collections -import math + +def transform_stone(stone): + if stone == 0: + return [1] + elif len(str(stone)) % 2 == 0: + half_len = len(str(stone)) // 2 + left_half = int(str(stone)[:half_len]) + right_half = int(str(stone)[half_len:]) + return [left_half, right_half] + else: + return [stone * 2024] + +def count_stones_after_blinks(initial_stones, num_blinks): + stone_counts = defaultdict(int) + for stone in initial_stones: + stone_counts[stone] += 1 + + for _ in range(num_blinks): + new_stone_counts = defaultdict(int) + for stone, count in stone_counts.items(): + transformed_stones = transform_stone(stone) + for new_stone in transformed_stones: + new_stone_counts[new_stone] += count + stone_counts = new_stone_counts + + return sum(stone_counts.values()) def problem1(input: str) -> int | str: - output: int = 0 - lines = utils.read_lines(input) - # Add your solution logic here - - return output + stones = list(map(int, utils.read_lines(input)[0].split())) + return count_stones_after_blinks(stones, 25) def problem2(input: str) -> int | str: - output: int = 0 - lines = utils.read_lines(input) - # Add your solution logic here - - return output + stones = list(map(int, utils.read_lines(input)[0].split())) + return count_stones_after_blinks(stones, 75) if __name__ == "__main__": input_path = utils.get_input_file(Path(__file__).resolve().parent / "data", 11)