From 98782c2506bc60e176239d0a1dcbffe53ced068b Mon Sep 17 00:00:00 2001 From: Jonathan Chan Date: Tue, 12 Dec 2017 09:29:11 -0800 Subject: [PATCH] Removed alternate solution for day 2; minor adjustments to day 5 alternate solution (Vector still slower than IntMap...) --- 2.hs | 13 +++---------- 2_alt.hs | 28 ---------------------------- 5_alt.hs | 12 +++--------- 3 files changed, 6 insertions(+), 47 deletions(-) delete mode 100644 2_alt.hs diff --git a/2.hs b/2.hs index f03b638..611c9a1 100644 --- a/2.hs +++ b/2.hs @@ -3,12 +3,6 @@ import Data.List (find) import Data.Maybe (catMaybes) -checksum :: [[Int]] -> Int -checksum = sum . map (\line -> maximum line - minimum line) - -divsum :: [[Int]] -> Int -divsum = sum . map divline - divline :: [Int] -> Int divline ns = uncurry div . head . catMaybes . map (\x -> Just (x,) <*> find (greaterAndDivisible x) ns) $ ns @@ -16,7 +10,6 @@ divline ns = main :: IO () main = do - input <- readFile "2.txt" - let grid = map (map read . words) $ lines input :: [[Int]] - print $ checksum grid - print $ divsum grid \ No newline at end of file + grid <- fmap (map (map read . words) . lines) $ readFile "2.txt" + print $ sum . map (\line -> maximum line - minimum line) $ grid + print $ sum . map divline $ grid \ No newline at end of file diff --git a/2_alt.hs b/2_alt.hs deleted file mode 100644 index 22cfa7f..0000000 --- a/2_alt.hs +++ /dev/null @@ -1,28 +0,0 @@ -import Data.List - -checksum :: [[Int]] -> Int -checksum = sum . map (\line -> maximum line - minimum line) - -divsum :: [[Int]] -> Int -divsum = sum . map divline - -divline :: [Int] -> Int -divline ns = - let (n, m) = catTupleMaybes $ map (\x -> (x, find (greaterAndDivisible x) ns)) ns - in n `div` m - where - greaterAndDivisible :: Int -> Int -> Bool - greaterAndDivisible n m = n > m && n `mod` m == 0 - -catTupleMaybes :: [(Int, Maybe Int)] -> (Int, Int) -catTupleMaybes [] = (0, 1) -catTupleMaybes ((t1, mt2):ts) = case mt2 of - Just t2 -> (t1, t2) - Nothing -> catTupleMaybes ts - -main :: IO () -main = do - input <- readFile "2.txt" - let grid = map (map read . words) $ lines input :: [[Int]] - print $ checksum grid - print $ divsum grid \ No newline at end of file diff --git a/5_alt.hs b/5_alt.hs index 1cced97..8ec5a96 100644 --- a/5_alt.hs +++ b/5_alt.hs @@ -1,18 +1,13 @@ import Data.Vector.Unboxed (Vector, fromList, (!), (//)) import qualified Data.Vector.Unboxed as V (length) -type Length = Int -type Index = Int -type Steps = Int -type State = (Steps, Index, Vector Int) +type State = (Int, Int, Vector Int) type Update = Int -> Int next :: Update -> State -> State next f (steps, i, jumps) = let value = jumps ! i - nextI = i + value - nextJumps = jumps // [(i, f value)] - in (steps + 1, nextI, nextJumps) + in (steps + 1, i + value, jumps // [(i, f value)]) getExitSteps :: Update -> State -> Int getExitSteps f (steps, i, jumps) = @@ -20,7 +15,6 @@ getExitSteps f (steps, i, jumps) = main :: IO () main = do - input <- readFile "5.txt" - let jumpsList = fromList $ map read $ lines input + jumpsList <- fmap (fromList . map read . lines) $ readFile "5.txt" print $ getExitSteps (+1) (0, 0, jumpsList) print $ getExitSteps (\v -> if v >= 3 then v - 1 else v + 1) (0, 0, jumpsList) \ No newline at end of file