Knapsack problem/Continuous: Difference between revisions
Content added Content deleted
Line 373: | Line 373: | ||
(defn rob [items capacity] |
(defn rob [items capacity] |
||
(let [best-items (reverse (sort-by per-kg items))] |
(let [best-items (reverse (sort-by per-kg items))] |
||
(loop [items best-items |
(loop [items best-items cap capacity total 0 instr ""] |
||
(let [x (first items)] |
(let [x (first items)] |
||
(if (< (:weight x) |
(if (< (:weight x) cap) |
||
(recur (rest items) |
(recur (rest items) |
||
(- |
(- cap (:weight x)) |
||
(+ total (:price x)) |
(+ total (:price x)) |
||
(str instr "Take all " (:name x) "\n")) |
(str instr "Take all " (:name x) "\n")) |
||
(format "%sTake %.1f kg of %s\nTotal: %.2f" |
(format "%sTake %.1f kg of %s\nTotal: %.2f" |
||
instr |
instr cap (:name x) (+ total (* cap (per-kg x))))))))) |
||
(print (rob items 15)) |
(print (rob items 15)) |