summaryrefslogtreecommitdiffstats
path: root/solutions/py/d14.py
blob: dc40da60b97470dac41b7cc3fc8e65aad33b957a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import math

class Chem(object):
    def __init__(self, name, created):
        self.name = name
        self.created = created

        self.amount = 0
        self.wants = 0
        self.left_over = 0
        self.producers = {}

    def add_producer(self, producer, amount):
        self.producers[producer] = amount

    def queue(self, amount):
        self.wants = amount
        for producer, amount in self.producers.items():
            #TODO
            pass

    def produce(self, amount):
        if self.name == "ORE":
            self.amount += amount
            return

        productions = math.ceil(amount / self.created)
        self.amount += productions * self.created
        for producer, amount in self.producers.items():
            producer.produce(productions * amount)

    def __repr__(self):
        return str((self.name, self.amount))

def pt1(input):
    chems = {"ORE": Chem("ORE", 1)}
    for line in input:
        output = line.strip().split(" => ")[1]
        chems[output.split(" ")[1]] = Chem(output.split(" ")[1], int(output.split(" ")[0]))

    for line in input:
        inputs = line.strip().split(" => ")[0]
        output = line.strip().split(" => ")[1]
        for i in inputs.split(", "):
            chems[output.split(" ")[1]] \
                    .add_producer(chems[i.split(" ")[1]], int(i.split(" ")[0]))

    chems["FUEL"].produce(1)
    return chems["ORE"]

def pt2(input):
    return