diff --git a/src/Day03.hs b/src/Day03.hs index 4ce0093..fc4adb4 100644 --- a/src/Day03.hs +++ b/src/Day03.hs @@ -1,16 +1,19 @@ module Day03 ( day03_1, + day03_2 ) where -getBankJoltage :: String -> Int -getBankJoltage bank = read [x, y] - where x = maximum $ init bank - y = maximum bank' - bank' = drop 1 $ dropWhile (/= x) bank +getBankJoltage :: String -> Int -> String -> Int +getBankJoltage value 0 _ = read value +getBankJoltage value n bank = + let l = length bank + bank' = take (l - n + 1) bank + x = maximum bank' + in getBankJoltage (value ++ [x]) (n - 1) (drop 1 (dropWhile (/= x) bank)) -getTotalJoltage :: [String] -> Int -getTotalJoltage banks = sum $ map getBankJoltage banks +getTotalJoltage :: [String] -> Int -> Int +getTotalJoltage banks n = sum $ map (getBankJoltage "" n) banks parseInput :: IO [String] parseInput = do @@ -19,7 +22,15 @@ parseInput = do day03_1 :: IO () day03_1 = do banks <- parseInput - let joltage = getTotalJoltage banks + let joltage = getTotalJoltage banks 2 putStrLn $ "Day 3, Puzzle 1 solution: " ++ show joltage + +day03_2 :: IO () +day03_2 = do + banks <- parseInput + let joltage = getTotalJoltage banks 12 + putStrLn $ + "Day 3, Puzzle 2 solution: " + ++ show joltage diff --git a/src/Main.hs b/src/Main.hs index c694ada..441a795 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -2,7 +2,7 @@ module Main (main) where import Day01 (day01_1, day01_2) import Day02 (day02_1, day02_2) -import Day03 (day03_1) +import Day03 (day03_1, day03_2) import System.Environment (getArgs) main :: IO () @@ -20,12 +20,15 @@ main = do day02_1 day02_2 "3" : "1" : _ -> day03_1 + "3" : "2" : _ -> day03_2 "3" : _ -> do day03_1 + day03_2 "all" : _ -> do day01_1 day01_2 day02_1 day02_2 day03_1 + day03_2 _ -> error "Not implemented"