view optim.py @ 3:c683f80bc858 draft

parseinput: also save the maximum possible profit for each machine
author Jordi Gutiérrez Hermoso <jordigh@octave.org>
date Tue, 10 Mar 2015 21:17:54 -0400 (2015-03-11)
parents 3632502b8af1
children 14c8b6dad88a
line wrap: on
line source
#!/usr/bin/env python

from collections import namedtuple

Machine = namedtuple("Machine", ["day", "buy", "sell", "profit", "maxprofit"])
Case = namedtuple("Case", ["machines", "days", "capital"])

def parseinput(fname):
    """
    Parse the input file, forget about input validation
    """
    cases = []
    with open(fname) as f:
        while True:
            header = [int(x) for x in f.readline().split()]
            if header == [0, 0, 0]:
                return cases
            N = header[0]
            case = Case([], header[1], header[2])
            for i in range(0, N):
                machine = Machine(*[int(x) for x in f.readline().split()],
                                  maxprofit = None)
                # Maximum profit possible from each machine
                maxprofit = ((case.days - machine.day)*machine.profit
                             - machine.buy + machine.sell)
                machine = machine._replace(maxprofit = maxprofit)
                case.machines.append(machine)

            cases.append(case)

def main():
    cases = parseinput("input.txt")
    for case in cases:
        print "Next case:", case["header"]
        for machine in case["machines"]:
            print machine

if __name__ == "__main__":
    main()