advent24-llm / day11 /solution_jerpint.py
jerpint's picture
Add solution files
a4da721
raw
history blame
1.46 kB
def load_data(file):
with open(file) as f:
data = f.read()
return list(data.split())
def update_stone(stone):
if stone == "0":
return ["1"]
elif len(stone) % 2 == 0:
L = len(stone)
first_half = str(int(stone[:L//2]))
second_half = str(int(stone[L//2:]))
return [first_half, second_half]
else:
return [str(int(stone)*2024)]
def blink(stones):
new_stones = []
for stone in stones:
next_stones = update_stone(stone)
new_stones.extend(next_stones)
return new_stones
stones = load_data("input.txt")
blinks = 25
for i in range(blinks):
stones = blink(stones)
print(len(stones))
## Part two
# Use a dict to keep track instead of a list
def get_counts(stones):
counts = {}
for stone in stones:
counts[stone] = counts.get(stone, 0) + 1
return counts
def blink(stone_counts):
new_counts = {}
for stone, count in stone_counts.items():
new_stones = update_stone(stone)
for s in new_stones:
new_counts[s] = new_counts.get(s, 0) + 1 * count
return new_counts
def get_total_stones(stone_counts):
total = 0
for stone, count in stone_counts.items():
total += count
return total
stones = load_data("input.txt")
stone_counts = get_counts(stones)
blinks = 75
for idx in range(blinks):
stone_counts = blink(stone_counts)
print(get_total_stones(stone_counts))