Skip to content

Instantly share code, notes, and snippets.

@curiousleo
Last active December 10, 2021 08:35
Show Gist options
  • Save curiousleo/16090ba718ed58317260f20da993ba3c to your computer and use it in GitHub Desktop.
Save curiousleo/16090ba718ed58317260f20da993ba3c to your computer and use it in GitHub Desktop.
Advent of Code 2021 Day 6 in Python
from collections import deque
import itertools
def init(fish):
"""
>>> init([3, 4, 3, 1, 2])
[0, 1, 1, 2, 1, 0, 0, 0, 0]
"""
result = [0] * 9
for day, fish in itertools.groupby(sorted(fish)):
result[day] = len(list(fish))
return result
def step(state):
"""
>>> step(deque([0, 1, 1, 2, 1, 0, 0, 0, 0]))
deque([1, 1, 2, 1, 0, 0, 0, 0, 0])
>>> step(deque([1, 1, 2, 1, 0, 0, 0, 0, 0]))
deque([1, 2, 1, 0, 0, 0, 1, 0, 1])
"""
spawning = state.popleft()
state.append(spawning) # new fish
state[6] += spawning # old fish
return state
def multistep(state, days):
"""
>>> sum(multistep(deque([0, 1, 1, 2, 1, 0, 0, 0, 0]), 18))
26
>>> sum(multistep(deque([0, 1, 1, 2, 1, 0, 0, 0, 0]), 80))
5934
>>> sum(multistep(deque([0, 1, 1, 2, 1, 0, 0, 0, 0]), 256))
26984457539
"""
for day in range(days):
step(state)
return state
if __name__ == "__main__":
from doctest import testmod
testmod()
state = init([int(i) for i in open("day06.txt").read().split(",")])
print(sum(multistep(deque(state), 256)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment