summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Cady <d@jerkface.net>2022-10-24 19:58:57 -0400
committerAndrew Cady <d@jerkface.net>2022-10-24 19:58:57 -0400
commitfaed266557e4a91a1b21dbb6ca980103fcbbb02a (patch)
tree278622a773706aa4185258db57dbdcfac1d68315
parent5f536504393b216f1ee59ac38991c88e59dd511e (diff)
add support for down sets
-rwxr-xr-xrepgoal.hs43
1 files changed, 22 insertions, 21 deletions
diff --git a/repgoal.hs b/repgoal.hs
index 31cfdcf..be91712 100755
--- a/repgoal.hs
+++ b/repgoal.hs
@@ -14,6 +14,7 @@
14{-# language OverloadedStrings #-} 14{-# language OverloadedStrings #-}
15{-# language DeriveGeneric #-} 15{-# language DeriveGeneric #-}
16{-# language DerivingVia #-} 16{-# language DerivingVia #-}
17{-# language TupleSections #-}
17import Rebase.Prelude hiding (toList, on, (<+>), Max) 18import Rebase.Prelude hiding (toList, on, (<+>), Max)
18import qualified Rebase.Prelude as Prelude 19import qualified Rebase.Prelude as Prelude
19import qualified Data.Set as Set 20import qualified Data.Set as Set
@@ -138,33 +139,32 @@ makeLenses ''St
138-- TODO: Event for inotify on edited text file (as input interface) 139-- TODO: Event for inotify on edited text file (as input interface)
139data CustomEvent = CustomEvent 140data CustomEvent = CustomEvent
140 141
141data SetScheme = SetScheme { ratioMax :: Rational, numberOfReps :: Integer } 142data SetScheme = SetScheme { ratioMax :: Rational, numberOfReps :: Integer, amrap :: Bool }
142 143
143setScheme :: Rational -> Integer -> SetScheme 144setScheme :: Rational -> Integer -> SetScheme
144setScheme percentage reps = SetScheme (percentage / 100) reps 145setScheme percentage reps = SetScheme (percentage / 100) reps False
146setSchemeAMRAP percentage reps = SetScheme (percentage / 100) reps True
145 147
146data SetOption = Fresher | Heavier 148data SetOption = Fresher | Heavier
147 149
148warmup :: [SetScheme] 150warmup :: [SetScheme]
149warmup = [setScheme 40 5, setScheme 50 5, setScheme 60 3] 151warmup = [setScheme 40 5, setScheme 50 5, setScheme 60 3]
150 152
153downSets :: [SetScheme]
154downSets = take 5 $ repeat $ setScheme 75 5
155
151liftScheme :: SetOption -> WeekSelection -> [SetScheme] 156liftScheme :: SetOption -> WeekSelection -> [SetScheme]
152liftScheme Fresher Week1 = warmup ++ [setScheme 65 5, setScheme 75 5, setScheme 85 5] 157liftScheme Fresher Week1 = warmup ++ [setScheme 65 5, setScheme 75 5, setSchemeAMRAP 85 5] ++ downSets
153liftScheme Heavier Week1 = warmup ++ [setScheme 75 5, setScheme 80 5, setScheme 85 5] 158liftScheme Heavier Week1 = warmup ++ [setScheme 75 5, setScheme 80 5, setSchemeAMRAP 85 5] ++ downSets
154liftScheme Fresher Week2 = warmup ++ [setScheme 70 3, setScheme 80 3, setScheme 90 3] 159liftScheme Fresher Week2 = warmup ++ [setScheme 70 3, setScheme 80 3, setSchemeAMRAP 90 3] ++ downSets
155liftScheme Heavier Week2 = warmup ++ [setScheme 80 3, setScheme 85 3, setScheme 90 3] 160liftScheme Heavier Week2 = warmup ++ [setScheme 80 3, setScheme 85 3, setSchemeAMRAP 90 3] ++ downSets
156liftScheme _______ Week3 = warmup ++ [setScheme 75 5, setScheme 85 3, setScheme 95 1] 161liftScheme _______ Week3 = warmup ++ [setScheme 75 5, setScheme 85 3, setSchemeAMRAP 95 1] ++ downSets
157 162
158data ListPosition = FirstInList | LastInList | MiddleInList deriving (Eq) 163data ListPosition = FirstInList | NotFirstInList deriving (Eq)
159 164
160annotatePosition :: [a] -> [(ListPosition, a)] 165annotatePosition :: [a] -> [(ListPosition, a)]
161annotatePosition [] = undefined 166annotatePosition [] = undefined
162annotatePosition [x] = [(LastInList, x)] 167annotatePosition (x:xs) = (FirstInList, x) : map (NotFirstInList,) xs
163annotatePosition (x:xs) = (FirstInList, x) : annotateRest xs
164 where
165 annotateRest [] = undefined
166 annotateRest [x] = [(LastInList, x)]
167 annotateRest (x:xs) = (MiddleInList, x) : annotateRest xs
168 168
169drawUI :: St -> [Widget ()] 169drawUI :: St -> [Widget ()]
170drawUI st = [vCenter $ vBox [hCenter oneRepMaxTable, header, withVScrollBarHandles $ withVScrollBars OnRight $ viewport () Vertical $ hCenter lastSetTable]] 170drawUI st = [vCenter $ vBox [hCenter oneRepMaxTable, header, withVScrollBarHandles $ withVScrollBars OnRight $ viewport () Vertical $ hCenter lastSetTable]]
@@ -185,7 +185,7 @@ drawUI st = [vCenter $ vBox [hCenter oneRepMaxTable, header, withVScrollBarHandl
185 toLiftRows :: WeekSelection -> LiftRecord -> [[Widget n]] 185 toLiftRows :: WeekSelection -> LiftRecord -> [[Widget n]]
186 toLiftRows week lift = (flip map) (annotatePosition $ liftScheme Fresher week) $ toLiftRow lift 186 toLiftRows week lift = (flip map) (annotatePosition $ liftScheme Fresher week) $ toLiftRow lift
187 toLiftRow :: LiftRecord -> (ListPosition, SetScheme) -> [Widget n] 187 toLiftRow :: LiftRecord -> (ListPosition, SetScheme) -> [Widget n]
188 toLiftRow LiftRecord{..} (position, (SetScheme targetRatio targetReps)) = 188 toLiftRow LiftRecord{..} (position, (SetScheme targetRatio targetReps amrap)) =
189 let best = bestPerformance stats 189 let best = bestPerformance stats
190 computedTarget = targetRatio * (90 % 100) * computeOneRepMax best 190 computedTarget = targetRatio * (90 % 100) * computeOneRepMax best
191 targetWeight = ceilingN 5 computedTarget 191 targetWeight = ceilingN 5 computedTarget
@@ -196,11 +196,11 @@ drawUI st = [vCenter $ vBox [hCenter oneRepMaxTable, header, withVScrollBarHandl
196 map (padLeftRight 2) 196 map (padLeftRight 2)
197 [ 197 [
198 -- txt $ if position == FirstInList then liftName else " ", 198 -- txt $ if position == FirstInList then liftName else " ",
199 txt $ case position of FirstInList -> liftName; LastInList -> " \n "; _ -> " ", 199 txt $ case position of FirstInList -> liftName; NotFirstInList -> if amrap then " \n " else " ",
200 str $ printf "%2d%s @ %d%s" targetReps (if position == LastInList then "+" else "" :: Text) targetWeight (if position == LastInList then "\n " else "" :: String), 200 str $ printf "%2d%s @ %d%s" targetReps (if amrap then "+" else "" :: Text) targetWeight (if amrap then "\n " else "" :: String),
201 str $ if position /= LastInList then " " else showGoal repGoal ++ "\n" ++ showGoal (repGoal + 1), 201 str $ if amrap then showGoal repGoal ++ "\n" ++ showGoal (repGoal + 1) else " ",
202 txt $ if position /= LastInList then " " else " \n ", 202 txt $ if amrap then " \n " else " ",
203 txt $ if position /= LastInList then " " else " \n " 203 txt $ if amrap then " \n " else " "
204 ] 204 ]
205 205
206ceilingN :: Integer -> Rational -> Integer 206ceilingN :: Integer -> Rational -> Integer
@@ -252,7 +252,8 @@ jerk = pushPress / 100 * 85
252routine :: NonEmpty (Set Text) 252routine :: NonEmpty (Set Text)
253routine = NonEmpty.cycle $ 253routine = NonEmpty.cycle $
254 Set.fromList ["Deadlift", "Press"] :| 254 Set.fromList ["Deadlift", "Press"] :|
255 [Set.fromList ["Front Squat", "Left-Arm Snatch", "Right-Arm Snatch"] 255 [Set.fromList ["Front Squat"]
256 , Set.fromList ["Left-Arm Snatch", "Right-Arm Snatch"]
256 , Set.fromList ["Squat", "Bench"] 257 , Set.fromList ["Squat", "Bench"]
257 , Set.fromList ["Push Press", "Power Clean"] 258 , Set.fromList ["Push Press", "Power Clean"]
258 ] 259 ]