Guest User

Untitled

a guest
Apr 25th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.78 KB | None | 0 0
  1. ;Defined in terms of pennies to avoid float error
  2. (def xkcd
  3. (sorted-map-by
  4. (comp - compare)
  5. 215 :fruit
  6. 275 :fries
  7. 335 :salad
  8. 355 :wings
  9. 420 :cheeze
  10. 580 :sampler))
  11.  
  12. ;Assume seq-utils is used
  13. (defn order
  14. ([amt menu] (distinct (flatten (vector (order amt menu {})))))
  15. ([amt menu items]
  16. (let [affordable (keys-pred drop-while #(< amt %) menu)
  17. exact-entry? (affordable amt)]
  18. (cond
  19. (empty? affordable) {}
  20. exact-entry? (merge-with + items {exact-entry? 1})
  21. true
  22. (remove empty?
  23. (set
  24. (map
  25. #(let [next-amt (- amt (key %))
  26. next-items (merge-with + items {(val %) 1})]
  27. (order next-amt affordable next-items))
  28. affordable)))))))
  29.  
  30. user=>(order 1505 xkcd)
  31. ({:fruit 1, :wings 2, :sampler 1} {:fruit 7})
Add Comment
Please, Sign In to add comment