+(defn produce-with [graph producing consuming cargo]
+ (println graph producing consuming cargo)
+ (let [cheapest-prod (get-in graph [producing 0])
+ exchange-rate (cheapest-prod consuming)
+ base-times (quot cargo exchange-rate)
+ extra-cargo (mod cargo exchange-rate)
+ extra-resources (assoc (->> cheapest-prod
+ (filter (comp neg? second))
+ (map (fn [[chem mole]]
+ [chem (* -1 base-times mole)]))
+ (into {})) consuming extra-cargo)
+ rewrite-with (into #{} (keys extra-resources))
+ second-chance (reduce-reaction graph producing rewrite-with)
+ recursive-times (map (fn [[chem ct]]
+ (let [er (- (get-in second-chance [producing 0 chem]))]
+ (println chem ct er)
+ (quot ct er)))
+ extra-resources)]
+ recursive-times))
+
+(defn maximize-output [graph producing consuming cargo]
+ (produce-with (reduce-reaction graph producing consuming)
+ producing consuming cargo))
+