mirror of
https://github.com/thib8956/advent-of-code.git
synced 2024-12-25 21:36:29 +00:00
2024 day 11
This commit is contained in:
parent
71352d95d0
commit
6aa70c6ff1
37
2024/day11/:
Normal file
37
2024/day11/:
Normal 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
42
2024/day11/day11.py
Normal 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)
|
||||
|
Loading…
Reference in New Issue
Block a user