From 0ce9ae7665d45675348f1943d8966ac4b7245a8f Mon Sep 17 00:00:00 2001 From: Jonathan Chan Date: Sun, 17 Dec 2017 16:10:39 -0800 Subject: [PATCH] Day 5 - added some strict evaluation for performance --- 05.hs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/05.hs b/05.hs index 56de949..9dcf8ab 100644 --- a/05.hs +++ b/05.hs @@ -1,4 +1,5 @@ -import Data.IntMap (IntMap, insert, fromList, findWithDefault) +{-# LANGUAGE BangPatterns #-} +import Data.IntMap.Strict (IntMap, insert, fromList, findWithDefault) type State = (Int, Int, IntMap Int) type Update = Int -> Int @@ -9,12 +10,12 @@ next f (steps, i, jumps) = in (steps + 1, i + value, insert i (f value) jumps) getExitSteps :: Int -> Update -> State -> Int -getExitSteps len f (steps, i, jumps) = - if i >= len then steps else getExitSteps len f $! next f (steps, i, jumps) +getExitSteps len f (!steps, i, jumps) = + if i >= len then steps else getExitSteps len f $ next f (steps, i, jumps) main :: IO () main = do - jumpsList <- fmap (map read . lines) $ readFile "5.txt" + jumpsList <- fmap (map read . lines) $ readFile "05.txt" let jumpsMap = fromList $ zip [0..] jumpsList print $ getExitSteps (length jumpsList) (+1) (0, 0, jumpsMap) print $ getExitSteps (length jumpsList) (\v -> if v >= 3 then v - 1 else v + 1) (0, 0, jumpsMap) \ No newline at end of file