diff --git a/2021/06/README.md b/2021/06/README.md new file mode 100644 index 0000000..2a762d2 --- /dev/null +++ b/2021/06/README.md @@ -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. + +
+ Solutions +
    +
  1. 352195
  2. +
  3. 1600306001288
  4. +
+
diff --git a/2021/06/input.txt b/2021/06/input.txt new file mode 100644 index 0000000..ef29799 --- /dev/null +++ b/2021/06/input.txt @@ -0,0 +1,2 @@ +4,1,1,1,5,1,3,1,5,3,4,3,3,1,3,3,1,5,3,2,4,4,3,4,1,4,2,2,1,3,5,1,1,3,2,5,1,1,4,2,5,4,3,2,5,3,3,4,5,4,3,5,4,2,5,5,2,2,2,3,5,5,4,2,1,1,5,1,4,3,2,2,1,2,1,5,3,3,3,5,1,5,4,2,2,2,1,4,2,5,2,3,3,2,3,4,4,1,4,4,3,1,1,1,1,1,4,4,5,4,2,5,1,5,4,4,5,2,3,5,4,1,4,5,2,1,1,2,5,4,5,5,1,1,1,1,1,4,5,3,1,3,4,3,3,1,5,4,2,1,4,4,4,1,1,3,1,3,5,3,1,4,5,3,5,1,1,2,2,4,4,1,4,1,3,1,1,3,1,3,3,5,4,2,1,1,2,1,2,3,3,5,4,1,1,2,1,2,5,3,1,5,4,3,1,5,2,3,4,4,3,1,1,1,2,1,1,2,1,5,4,2,2,1,4,3,1,1,1,1,3,1,5,2,4,1,3,2,3,4,3,4,2,1,2,1,2,4,2,1,5,2,2,5,5,1,1,2,3,1,1,1,3,5,1,3,5,1,3,3,2,4,5,5,3,1,4,1,5,2,4,5,5,5,2,4,2,2,5,2,4,1,3,2,1,1,4,4,1,5 + diff --git a/2021/06/python/main.py b/2021/06/python/main.py new file mode 100644 index 0000000..f319e31 --- /dev/null +++ b/2021/06/python/main.py @@ -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)}') diff --git a/2021/06/test.txt b/2021/06/test.txt new file mode 100644 index 0000000..55129f1 --- /dev/null +++ b/2021/06/test.txt @@ -0,0 +1 @@ +3,4,3,1,2