From faed266557e4a91a1b21dbb6ca980103fcbbb02a Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Mon, 24 Oct 2022 19:58:57 -0400 Subject: add support for down sets --- repgoal.hs | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) (limited to 'repgoal.hs') diff --git a/repgoal.hs b/repgoal.hs index 31cfdcf..be91712 100755 --- a/repgoal.hs +++ b/repgoal.hs @@ -14,6 +14,7 @@ {-# language OverloadedStrings #-} {-# language DeriveGeneric #-} {-# language DerivingVia #-} +{-# language TupleSections #-} import Rebase.Prelude hiding (toList, on, (<+>), Max) import qualified Rebase.Prelude as Prelude import qualified Data.Set as Set @@ -138,33 +139,32 @@ makeLenses ''St -- TODO: Event for inotify on edited text file (as input interface) data CustomEvent = CustomEvent -data SetScheme = SetScheme { ratioMax :: Rational, numberOfReps :: Integer } +data SetScheme = SetScheme { ratioMax :: Rational, numberOfReps :: Integer, amrap :: Bool } setScheme :: Rational -> Integer -> SetScheme -setScheme percentage reps = SetScheme (percentage / 100) reps +setScheme percentage reps = SetScheme (percentage / 100) reps False +setSchemeAMRAP percentage reps = SetScheme (percentage / 100) reps True data SetOption = Fresher | Heavier warmup :: [SetScheme] warmup = [setScheme 40 5, setScheme 50 5, setScheme 60 3] +downSets :: [SetScheme] +downSets = take 5 $ repeat $ setScheme 75 5 + liftScheme :: SetOption -> WeekSelection -> [SetScheme] -liftScheme Fresher Week1 = warmup ++ [setScheme 65 5, setScheme 75 5, setScheme 85 5] -liftScheme Heavier Week1 = warmup ++ [setScheme 75 5, setScheme 80 5, setScheme 85 5] -liftScheme Fresher Week2 = warmup ++ [setScheme 70 3, setScheme 80 3, setScheme 90 3] -liftScheme Heavier Week2 = warmup ++ [setScheme 80 3, setScheme 85 3, setScheme 90 3] -liftScheme _______ Week3 = warmup ++ [setScheme 75 5, setScheme 85 3, setScheme 95 1] +liftScheme Fresher Week1 = warmup ++ [setScheme 65 5, setScheme 75 5, setSchemeAMRAP 85 5] ++ downSets +liftScheme Heavier Week1 = warmup ++ [setScheme 75 5, setScheme 80 5, setSchemeAMRAP 85 5] ++ downSets +liftScheme Fresher Week2 = warmup ++ [setScheme 70 3, setScheme 80 3, setSchemeAMRAP 90 3] ++ downSets +liftScheme Heavier Week2 = warmup ++ [setScheme 80 3, setScheme 85 3, setSchemeAMRAP 90 3] ++ downSets +liftScheme _______ Week3 = warmup ++ [setScheme 75 5, setScheme 85 3, setSchemeAMRAP 95 1] ++ downSets -data ListPosition = FirstInList | LastInList | MiddleInList deriving (Eq) +data ListPosition = FirstInList | NotFirstInList deriving (Eq) annotatePosition :: [a] -> [(ListPosition, a)] annotatePosition [] = undefined -annotatePosition [x] = [(LastInList, x)] -annotatePosition (x:xs) = (FirstInList, x) : annotateRest xs - where - annotateRest [] = undefined - annotateRest [x] = [(LastInList, x)] - annotateRest (x:xs) = (MiddleInList, x) : annotateRest xs +annotatePosition (x:xs) = (FirstInList, x) : map (NotFirstInList,) xs drawUI :: St -> [Widget ()] drawUI 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 toLiftRows :: WeekSelection -> LiftRecord -> [[Widget n]] toLiftRows week lift = (flip map) (annotatePosition $ liftScheme Fresher week) $ toLiftRow lift toLiftRow :: LiftRecord -> (ListPosition, SetScheme) -> [Widget n] - toLiftRow LiftRecord{..} (position, (SetScheme targetRatio targetReps)) = + toLiftRow LiftRecord{..} (position, (SetScheme targetRatio targetReps amrap)) = let best = bestPerformance stats computedTarget = targetRatio * (90 % 100) * computeOneRepMax best targetWeight = ceilingN 5 computedTarget @@ -196,11 +196,11 @@ drawUI st = [vCenter $ vBox [hCenter oneRepMaxTable, header, withVScrollBarHandl map (padLeftRight 2) [ -- txt $ if position == FirstInList then liftName else " ", - txt $ case position of FirstInList -> liftName; LastInList -> " \n "; _ -> " ", - str $ printf "%2d%s @ %d%s" targetReps (if position == LastInList then "+" else "" :: Text) targetWeight (if position == LastInList then "\n " else "" :: String), - str $ if position /= LastInList then " " else showGoal repGoal ++ "\n" ++ showGoal (repGoal + 1), - txt $ if position /= LastInList then " " else " \n ", - txt $ if position /= LastInList then " " else " \n " + txt $ case position of FirstInList -> liftName; NotFirstInList -> if amrap then " \n " else " ", + str $ printf "%2d%s @ %d%s" targetReps (if amrap then "+" else "" :: Text) targetWeight (if amrap then "\n " else "" :: String), + str $ if amrap then showGoal repGoal ++ "\n" ++ showGoal (repGoal + 1) else " ", + txt $ if amrap then " \n " else " ", + txt $ if amrap then " \n " else " " ] ceilingN :: Integer -> Rational -> Integer @@ -252,7 +252,8 @@ jerk = pushPress / 100 * 85 routine :: NonEmpty (Set Text) routine = NonEmpty.cycle $ Set.fromList ["Deadlift", "Press"] :| - [Set.fromList ["Front Squat", "Left-Arm Snatch", "Right-Arm Snatch"] + [Set.fromList ["Front Squat"] + , Set.fromList ["Left-Arm Snatch", "Right-Arm Snatch"] , Set.fromList ["Squat", "Bench"] , Set.fromList ["Push Press", "Power Clean"] ] -- cgit v1.2.3