Advertisement
Guest User

Untitled

a guest
Sep 8th, 2015
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.84 KB | None | 0 0
  1. (def asym-hobbit-body-parts [{:name "head" :size 3}
  2. {:name "left-eye" :size 1}
  3. {:name "left-ear" :size 1}
  4. {:name "mouth" :size 1}
  5. {:name "nose" :size 1}
  6. {:name "neck" :size 2}
  7. {:name "left-shoulder" :size 3}
  8. {:name "left-upper-arm" :size 3}
  9. {:name "chest" :size 10}
  10. {:name "back" :size 10}
  11. {:name "left-forearm" :size 3}
  12. {:name "abdomen" :size 6}
  13. {:name "left-kidney" :size 1}
  14. {:name "left-hand" :size 2}
  15. {:name "left-knee" :size 2}
  16. {:name "left-thigh" :size 4}
  17. {:name "left-lower-leg" :size 3}
  18. {:name "left-achilles" :size 1}
  19. {:name "left-foot" :size 2}])
  20.  
  21. (defn needs-matching-part?
  22. [part]
  23. (re-find #"^left-" (:name part)))
  24.  
  25. (defn make-matching-part
  26. [part]
  27. {:name (clojure.string/replace (:name part) #"^left-" "right-")
  28. :size (:size part)})
  29.  
  30. (defn symmetrize-body-parts
  31. "Expects a seq of maps which have a :name and :size"
  32. [asym-body-parts]
  33. (loop [remaining-asym-parts asym-body-parts
  34. final-body-parts []]
  35. (if (empty? remaining-asym-parts)
  36. final-body-parts
  37. (let [[part & remaining] remaining-asym-parts
  38. final-body-parts (conj final-body-parts part)]
  39. (if (needs-matching-part? part)
  40. (recur remaining (conj final-body-parts (make-matching-part part)))
  41. (recur remaining final-body-parts))))))
  42.  
  43. (symmetrize-body-parts asym-hobbit-body-parts)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement