Skip to content

Instantly share code, notes, and snippets.

@paf31 paf31/water.hs Secret
Last active Apr 1, 2019

What would you like to do?
> import Control.Monad.Tardis
> :{
let levels hs = evalTardis (traverse
(\h -> do x <- min <$> getFuture <*> getPast -- Get the height of the enclosing walls
modifyBackwards (`max` h) -- Send the right max back to the past
modifyForwards (`max` h) -- Send the left max into the future
pure (max 0 (x - h)) -- Calculate the height of the water itself
) hs) (0, 0)
> sum $ levels [5,3,7,2,6,4,5,9,1,2]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.