2024 day 11

This commit is contained in:
Thibaud Gasser 2024-12-11 09:28:02 +01:00
parent 71352d95d0
commit 6aa70c6ff1
2 changed files with 79 additions and 0 deletions

37
2024/day11/: Normal file
View File

@ -0,0 +1,37 @@
from collections import Counter
def blink(data, steps):
counter = Counter(data)
for i in range(steps):
new_counter = Counter()
#data = tuple(x for y in (blink_stone(s) for s in data) for x in y)
for stone, count in counter.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
counter = new_counter
print(len(counter.items()))
return counter.total()
if __name__ == "__main__":
res = blink((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()))
part1 = blink(data, 25)
print("Part 1: ", part1)
part2 = blink(data, 75)
print("Part 2: ", part2)

42
2024/day11/day11.py Normal file
View File

@ -0,0 +1,42 @@
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)