Advertisement
Guest User

Untitled

a guest
Jan 18th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.55 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.  
  22. (defn matching-part
  23. [part]
  24. (if (re-find #"^left-" (:name part))
  25. #{ {:name (clojure.string/replace (:name part) #"^left-" "right-")
  26. :size (:size part)}
  27. {:name (clojure.string/replace (:name part) #"^left-" "top-")
  28. :size (:size part)}
  29. {:name (clojure.string/replace (:name part) #"^left-" "bottom-")
  30. :size (:size part)}
  31. }))
  32.  
  33. (defn better-symmetrize-body-parts
  34. "Expects a seq of maps that have a :name and :size"
  35. [asym-body-parts]
  36. (reduce (fn [final-body-parts part]
  37. (into final-body-parts (set (into (into [] (matching-part part)) #{part}))))
  38. []
  39. asym-body-parts))
  40.  
  41. (pprint (better-symmetrize-body-parts asym-hobbit-body-parts))
  42.  
  43. ;; Result:
  44. ;;[{:name "head", :size 3}
  45. ;; {:name "left-eye", :size 1}
  46. ;; {:name "right-eye", :size 1}
  47. ;; {:name "bottom-eye", :size 1}
  48. ;; {:name "top-eye", :size 1}
  49. ;; {:name "left-ear", :size 1}
  50. ;; {:name "right-ear", :size 1}
  51. ;; {:name "bottom-ear", :size 1}
  52. ;; {:name "top-ear", :size 1}
  53. ;; {:name "mouth", :size 1}
  54. ;; {:name "nose", :size 1}
  55. ;; {:name "neck", :size 2}
  56. ;; {:name "top-shoulder", :size 3}
  57. ;; {:name "left-shoulder", :size 3}
  58. ;; {:name "right-shoulder", :size 3}
  59. ;; {:name "bottom-shoulder", :size 3}
  60. ;; {:name "bottom-upper-arm", :size 3}
  61. ;; {:name "right-upper-arm", :size 3}
  62. ;; {:name "left-upper-arm", :size 3}
  63. ;; {:name "top-upper-arm", :size 3}
  64. ;; {:name "chest", :size 10}
  65. ;; {:name "back", :size 10}
  66. ;; {:name "top-forearm", :size 3}
  67. ;; {:name "bottom-forearm", :size 3}
  68. ;; {:name "left-forearm", :size 3}
  69. ;; {:name "right-forearm", :size 3}
  70. ;; {:name "abdomen", :size 6}
  71. ;; {:name "left-kidney", :size 1}
  72. ;; {:name "bottom-kidney", :size 1}
  73. ;; {:name "top-kidney", :size 1}
  74. ;; {:name "right-kidney", :size 1}
  75. ;; {:name "left-hand", :size 2}
  76. ;; {:name "top-hand", :size 2}
  77. ;; {:name "right-hand", :size 2}
  78. ;; {:name "bottom-hand", :size 2}
  79. ;; {:name "right-knee", :size 2}
  80. ;; {:name "top-knee", :size 2}
  81. ;; {:name "bottom-knee", :size 2}
  82. ;; {:name "left-knee", :size 2}
  83. ;; {:name "top-thigh", :size 4}
  84. ;; {:name "right-thigh", :size 4}
  85. ;; {:name "bottom-thigh", :size 4}
  86. ;; {:name "left-thigh", :size 4}
  87. ;; {:name "bottom-lower-leg", :size 3}
  88. ;; {:name "right-lower-leg", :size 3}
  89. ;; {:name "left-lower-leg", :size 3}
  90. ;; {:name "top-lower-leg", :size 3}
  91. ;; {:name "right-achilles", :size 1}
  92. ;; {:name "top-achilles", :size 1}
  93. ;; {:name "left-achilles", :size 1}
  94. ;; {:name "bottom-achilles", :size 1}
  95. ;; {:name "bottom-foot", :size 2}
  96. ;; {:name "top-foot", :size 2}
  97. ;; {:name "right-foot", :size 2}
  98. ;; {:name "left-foot", :size 2}]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement