Spaces:
Running
Running
| def read_input(filename): | |
| with open(filename, 'r') as f: | |
| return [int(x) for x in f.read().strip().split()] | |
| def has_even_digits(n): | |
| return len(str(n)) % 2 == 0 | |
| def split_number(n): | |
| s = str(n) | |
| mid = len(s) // 2 | |
| left = int(s[:mid]) | |
| right = int(s[mid:]) | |
| return [left, right] | |
| def transform_stones(stones): | |
| new_stones = [] | |
| for stone in stones: | |
| if stone == 0: | |
| new_stones.append(1) | |
| elif has_even_digits(stone): | |
| new_stones.extend(split_number(stone)) | |
| else: | |
| new_stones.append(stone * 2024) | |
| return new_stones | |
| def simulate_blinks(stones, blinks): | |
| current_stones = stones[:] | |
| for _ in range(blinks): | |
| current_stones = transform_stones(current_stones) | |
| return len(current_stones) | |
| # Read input | |
| stones = read_input("./input.txt") | |
| # Part 1: 25 blinks | |
| result1 = simulate_blinks(stones, 25) | |
| print(str(result1)) | |
| # Part 2: 75 blinks | |
| result2 = simulate_blinks(stones, 75) | |
| print(str(result2)) |