import shared
from collections import Counter, defaultdict
from pprint import pp


class Lanternfish:
    def __init__(self, name):
        self.load(name)
        self.new = 0

    def load(self, name):
        with open(name, "r") as f:
            self.nums = list(map(int, f.read().split(",")))
        self.fish = defaultdict(int)
        self.fish.update(dict(Counter(self.nums)))

    def tick(self):
        self.new = self.fish[0]

        # could do for loop from 0-6 then handle 6 specially
        self.fish[0] = self.fish[1]
        self.fish[1] = self.fish[2]
        self.fish[2] = self.fish[3]
        self.fish[3] = self.fish[4]
        self.fish[4] = self.fish[5]
        self.fish[5] = self.fish[6]
        self.fish[6] = self.fish[7] + self.new
        self.fish[7] = self.fish[8]
        self.fish[8] = self.new

    def total(self):
        return sum([v for k, v in self.fish.items() if k > -1])


def main():
    l = Lanternfish(shared.get_fname(6))
    TIMES = 256
    for x in range(TIMES):
        l.tick()
    pp(l.total())


if __name__ == "__main__":
    main()
