module Day03 ( day03_1, day03_2, ) where 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 -> Int getTotalJoltage banks n = sum $ map (getBankJoltage "" n) banks parseInput :: IO [String] parseInput = do lines <$> readFile "input/day3.txt" day03_1 :: IO () day03_1 = do banks <- parseInput 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