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()