This commit is contained in:
cupcakearmy 2021-12-07 12:56:54 +01:00
parent a743be9875
commit d3427a2651
2 changed files with 77 additions and 0 deletions

11
2021/06/README.md Normal file
View File

@ -0,0 +1,11 @@
# 06
The naive way to do it would be to keep a list. A way more performant ways way to do this is just having an array with 9 entries (0-8) which count the states of the fish. Then you actually just rotate the array each day and add the `0` entry to the `6` additionally.
<details>
<summary>Solutions</summary>
<ol>
<li>352195</li>
<li>1600306001288</li>
</ol>
</details>

66
2021/06/python/main.py Normal file
View File

@ -0,0 +1,66 @@
#!/usr/bin/env python
from os.path import join, dirname
from typing import Dict, List
# Day 06
# Common
def read_input(filename):
data = join(dirname(__file__), '..', filename)
with open(data) as f:
return f.read().strip()
test = read_input('test.txt')
data = read_input('input.txt')
class School:
def __init__(self, fishes: List[int]) -> None:
self.fishes = [0] * 9
for fish in fishes:
self.fishes[fish] += 1
@staticmethod
def parse(raw: str):
return School([int(x) for x in raw.split(',')])
def __len__(self) -> int:
return sum(self.fishes)
def tick(self):
born, *rest = self.fishes.copy()
self.fishes = rest + [born]
self.fishes[6] += born
def simulate(self, days: int):
for _ in range(days):
self.tick()
# 1
print('1.')
school = School.parse(test)
school.simulate(18)
print(len(school))
school.simulate(80)
print(f'Test: {len(school)}')
school = School.parse(data)
school.simulate(80)
print(f'Data: {len(school)}')
# 2
print('\n2.')
school = School.parse(test)
school.simulate(256)
print(f'Test: {len(school)}')
school = School.parse(data)
school.simulate(256)
print(f'Data: {len(school)}')