The Masseuse


In [1]:
import Data.List

In [2]:
optimalTotalTime :: (Num a, Ord a) => [a] -> a
optimalTotalTime ts =
    let computeState (bestTime, previousBestTime) nextTime = 
            (max bestTime (previousBestTime + nextTime), bestTime)
    in fst $ foldl' computeState (0, 0) ts

In [3]:
optimalTotalTime [30, 15, 60, 75, 45, 15, 15, 45]


180