Mercurial > hg > problem6
changeset 7:af2598b58791 draft
brute_force: new function, O(2^N) solution (exponential time)
author | Jordi Gutiérrez Hermoso <jordigh@octave.org> |
---|---|
date | Tue, 10 Mar 2015 22:22:02 -0400 |
parents | d4be13772b01 |
children | b5cbd6bdb611 |
files | optim.py |
diffstat | 1 files changed, 27 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/optim.py +++ b/optim.py @@ -87,12 +87,35 @@ capital += slot.sell return capital + +def brute_force(case): + """Form all possible plans, and just try them all.""" + machines = case.machines + + # Just count in binary to enumerate all plans + N = len(machines) + if N > 0: + plans = [[y == "1" for y in format(x, "0%db" % N)] for x in range(0, 2**N)] + else: + plans = [] + + maxcapital = case.capital + maxplan = None + for plan in plans: + try: + plancapital = final_capital(case, machines, plan) + if plancapital > maxcapital: + maxcapital = plancapital + maxplan = plan + except InvalidPlan: + pass + + return maxcapital def main(): cases = parseinput("input.txt") - for case in cases: - print "Next case:", case["header"] - for machine in case["machines"]: - print machine + for (number, case) in enumerate(cases): + maxcapital = brute_force(case) + print "Case %d: %d" % (number + 1, maxcapital) if __name__ == "__main__": main()