2017/5.hs

27 lines
951 B
Haskell
Raw Normal View History

import Data.IntMap (IntMap, insert, size, fromList, findWithDefault)
2017-12-05 07:07:09 +00:00
type Length = Int
2017-12-05 07:07:09 +00:00
type Index = Int
type Steps = Int
type State = (Steps, Index, IntMap Int)
2017-12-05 07:07:09 +00:00
type Update = Int -> Int
next :: Update -> State -> State
next f (steps, i, jumps) =
let value = findWithDefault undefined i jumps
2017-12-05 07:07:09 +00:00
nextI = i + value
nextJumps = insert i (f value) jumps
2017-12-05 07:07:09 +00:00
in (steps + 1, nextI, nextJumps)
getExitSteps :: Length -> Update -> State -> Int
getExitSteps len f (steps, i, jumps) =
if i >= len then steps else getExitSteps len f $ next f (steps, i, jumps)
2017-12-05 07:07:09 +00:00
main :: IO ()
main = do
input <- readFile "5.txt"
let jumpsList = map read $ lines input
jumpsMap = fromList $ zip [0..] jumpsList
len = length jumpsList
print $ getExitSteps len (+1) (0, 0, jumpsMap)
print $ getExitSteps len (\v -> if v >= 3 then v - 1 else v + 1) (0, 0, jumpsMap)