Add Day 3, Puzzle 2 solution
- Implement generalized function for Puzzle 2
- Use generalized function also for Puzzle 1
This commit is contained in:
27
src/Day03.hs
27
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
|
||||
|
||||
Reference in New Issue
Block a user