-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path11_1.py
44 lines (36 loc) · 1.45 KB
/
11_1.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
def main():
blink_count = 25
with open('input/11_1.txt') as f:
stones = list(map(int, f.read().splitlines()[0].split()))
stone_counts = {}
for stone in stones:
if stone not in stone_counts:
stone_counts[stone] = 0
stone_counts[stone] += 1
for _ in range(blink_count):
for stone, count in {stone: count for stone, count in stone_counts.items() if count > 0}.items():
for _ in range(count):
stone_counts[stone] -= 1
if stone == 0:
if 1 not in stone_counts:
stone_counts[1] = 0
stone_counts[1] += 1
elif len(str(stone)) % 2 == 0:
half = len(str(stone)) // 2
left = int(str(stone)[:half])
right = int(str(stone)[half:])
if left not in stone_counts:
stone_counts[left] = 0
stone_counts[left] += 1
if right not in stone_counts:
stone_counts[right] = 0
stone_counts[right] += 1
else:
multiple = stone * 2024
if multiple not in stone_counts:
stone_counts[multiple] = 0
stone_counts[multiple] += 1
total = sum([count for count in stone_counts.values()])
print(total)
if __name__ == "__main__":
main()