Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2019
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.19 KB | None | 0 0
  1. (ns gym.core)
  2.  
  3. (def db
  4. {:equipment {:dumbells {:equipment :dumbells
  5. :weights (vec (range 10 40 2))}
  6. :barbell {:equipment :barbell
  7. :weights (vec (range 20 300 2.5))}
  8. :barbell2 {:equipment :barbell
  9. :weights (vec (range 20 300 5))}}
  10.  
  11. :exercises {:bench {:exercise :bench
  12. :equipment :barbell}
  13. :squat {:exercise :squat
  14. :equipment :barbell2}
  15. :press {:exercise :press
  16. :equipment :barbell}
  17. :deadlift {:exercise :deadlift
  18. :equipment :barbell2}}
  19.  
  20. :ranges {:t1 {:range :t1
  21. :reps (vec (range 3 6))}
  22. :t2 {:range :t2
  23. :reps (vec (range 6 10))}
  24. :t3 {:range :t3
  25. :reps (vec (range 8 12))}}
  26.  
  27. :percentages {1 {:reps 1
  28. :pc 100}
  29. 2 {:reps 2
  30. :pc 95}
  31. 3 {:reps 3
  32. :pc 92.5}
  33. 4 {:reps 4
  34. :pc 90}
  35. 5 {:reps 5
  36. :pc 87.5}
  37. 6 {:reps 6
  38. :pc 85}
  39. 7 {:reps 7
  40. :pc 82.5}
  41. 8 {:reps 8
  42. :pc 80}
  43. 9 {:reps 9
  44. :pc 77.5}
  45. 10 {:reps 10
  46. :pc 75}
  47. 11 {:reps 11
  48. :pc 75}
  49. 12 {:reps 12
  50. :pc 70}
  51. 13 {:reps 13
  52. :pc 68}
  53. 14 {:reps 14
  54. :pc 66}
  55. 15 {:reps 15
  56. :pc 65}}})
  57.  
  58. (defn normalise
  59. "Normalise the rep max"
  60. [opts]
  61. (let [{:keys [weight reps]} opts
  62. {:keys [pc]} (get-in db [:percentages reps])]
  63. (.divide (bigdec weight) (* (bigdec pc) 0.01M) 3 BigDecimal/ROUND_HALF_UP)))
  64.  
  65. (defn recommend
  66. "Return a few options to increase the rep max for an exercise, given the equipment"
  67. [opts]
  68. (let [{:keys [exercise range reps weight]} opts
  69. {:keys [equipment]} (get-in db [:exercises exercise])
  70. {:keys [weights]} (get-in db [:equipment equipment])
  71. rm (normalise {:weight weight :reps reps})]
  72. (->> (for [w weights
  73. r (get-in db [:ranges range :reps])
  74. :let [m (normalise {:reps r :weight w})
  75. percent-increase (* (- (.divide m rm 3 BigDecimal/ROUND_HALF_UP) 1) 100M)]
  76. :when (< 0 percent-increase 10)]
  77. {:weight w
  78. :reps r
  79. :percent-increase (format "%.1f" percent-increase)})
  80. (sort-by :percent-increase))))
  81.  
  82. (recommend {:exercise :bench
  83. :range :t1
  84. :reps 5
  85. :weight 65})
  86. ; =>
  87. ({:weight 67.5, :reps 4, :percent-increase "1.0"}
  88. {:weight 70.0, :reps 3, :percent-increase "1.9"}
  89. {:weight 67.5, :reps 5, :percent-increase "3.8"}
  90. {:weight 70.0, :reps 4, :percent-increase "4.7"}
  91. {:weight 72.5, :reps 3, :percent-increase "5.5"}
  92. {:weight 70.0, :reps 5, :percent-increase "7.7"}
  93. {:weight 72.5, :reps 4, :percent-increase "8.4"}
  94. {:weight 75.0, :reps 3, :percent-increase "9.1"})
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement