(def maxW 15.0)
(def items
  {:beef    [3.8 36]
  :pork    [5.4 43]
  :ham     [3.6 90]
  :greaves [2.4 45]
  :flitch  [4.0 30]
  :brawn   [2.5 56]
  :welt    [3.7 67]
  :salami  [3.0 95]
  :sausage [5.9 98]})

(defn rob [items maxW]
  (let[ 
    val-item
        (fn[key]
          (- (/ (second (items key)) (first (items key )))))
    compare-items 
        (fn[key1 key2]  
          (compare (val-item key1) (val-item key2)))
    sorted (into (sorted-map-by compare-items) items)]

  (loop [current (first sorted) 
         array (rest sorted) 
         value 0 
         weight 0]
    (let[new-weight (first (val current)) 
         new-value (second (val current))]
    (if (> (- maxW weight new-weight) 0)
      (do 
        (println "Take all " (key current))
        (recur 
         (first array) 
         (rest array) 
         (+ value new-value)
         (+ weight new-weight)))
      (let [t (- maxW weight)] 
      (println 
       "Take " t " of " 
       (key current) "\n"
       "Total Value is:" 
       (+ value (* t (/ new-value new-weight))))))))))

(rob items maxW)