Create a gist now

Instantly share code, notes, and snippets.

@paf31 /water.hs Secret
Last active May 14, 2017

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]
14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment