Day 11
This commit is contained in:
parent
4602f77e0c
commit
589696266b
1 changed files with 50 additions and 0 deletions
50
day11.py
Normal file
50
day11.py
Normal file
|
@ -0,0 +1,50 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import functools
|
||||
|
||||
stones = []
|
||||
with open("day11") as f:
|
||||
l = f.read().split(' ')
|
||||
stones = list(map(int, l))
|
||||
|
||||
# 1
|
||||
def part1():
|
||||
for i in range(25):
|
||||
s = 0
|
||||
while s < len(stones):
|
||||
match stones[s]:
|
||||
case 0:
|
||||
stones[s] = 1
|
||||
s += 1
|
||||
case num if len(str(num))%2==0:
|
||||
l = len(str(num))
|
||||
stones[s] = int(str(num)[:l//2])
|
||||
stones.insert(s+1, int(str(num)[-l//2:]))
|
||||
s += 2
|
||||
case _:
|
||||
stones[s] = stones[s] * 2024
|
||||
s += 1
|
||||
|
||||
print(len(stones))
|
||||
|
||||
# 2
|
||||
@functools.cache
|
||||
def memo_me(stone, its):
|
||||
if its == 0: return 1
|
||||
|
||||
if stone == 0:
|
||||
return memo_me(1, its-1)
|
||||
if len(str(stone))%2==0:
|
||||
l = len(str(stone))
|
||||
return memo_me(int(str(stone)[:l//2]), its-1) + memo_me(int(str(stone)[-l//2:]), its-1)
|
||||
else:
|
||||
return memo_me(stone*2024, its-1)
|
||||
|
||||
|
||||
def part2():
|
||||
num_stones = 0
|
||||
for stone in stones:
|
||||
num_stones += memo_me(stone, 75)
|
||||
print(num_stones)
|
||||
|
||||
part2()
|
Loading…
Reference in a new issue