37 lines
837 B
Haskell
37 lines
837 B
Haskell
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
|