mirror of
https://github.com/thib8956/advent-of-code.git
synced 2024-12-26 13:56:29 +00:00
43 lines
1.0 KiB
Python
43 lines
1.0 KiB
Python
|
from collections import Counter
|
||
|
|
||
|
def main(data):
|
||
|
part1 = run(data, 25)
|
||
|
print("Part 1: ", part1)
|
||
|
part2 = run(data, 75)
|
||
|
print("Part 2: ", part2)
|
||
|
|
||
|
|
||
|
def run(data, steps):
|
||
|
data = Counter(data)
|
||
|
for _ in range(steps):
|
||
|
data = blink(data)
|
||
|
return data.total()
|
||
|
|
||
|
|
||
|
def blink(data):
|
||
|
new_counter = Counter()
|
||
|
for stone, count in data.items():
|
||
|
s = str(stone)
|
||
|
if stone == 0:
|
||
|
new_counter[1] += count
|
||
|
elif len(s) % 2 == 0:
|
||
|
first, second = int(s[:len(s)//2]), int(s[len(s)//2:])
|
||
|
new_counter[first] += count
|
||
|
new_counter[second] += count
|
||
|
else:
|
||
|
new_counter[2024*stone] += count
|
||
|
return new_counter
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
res = run((125, 17), 25)
|
||
|
assert res == 55312, f"expected 55312, but was {res}"
|
||
|
|
||
|
import sys
|
||
|
if len(sys.argv) > 1:
|
||
|
infile = sys.argv[1]
|
||
|
with open(infile) as f:
|
||
|
data = tuple(map(int, f.read().rstrip().split()))
|
||
|
main(data)
|
||
|
|