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
|
module Day03
|
||||||
( day03_1,
|
( day03_1,
|
||||||
|
day03_2
|
||||||
)
|
)
|
||||||
where
|
where
|
||||||
|
|
||||||
getBankJoltage :: String -> Int
|
getBankJoltage :: String -> Int -> String -> Int
|
||||||
getBankJoltage bank = read [x, y]
|
getBankJoltage value 0 _ = read value
|
||||||
where x = maximum $ init bank
|
getBankJoltage value n bank =
|
||||||
y = maximum bank'
|
let l = length bank
|
||||||
bank' = drop 1 $ dropWhile (/= x) 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 :: [String] -> Int -> Int
|
||||||
getTotalJoltage banks = sum $ map getBankJoltage banks
|
getTotalJoltage banks n = sum $ map (getBankJoltage "" n) banks
|
||||||
|
|
||||||
parseInput :: IO [String]
|
parseInput :: IO [String]
|
||||||
parseInput = do
|
parseInput = do
|
||||||
@@ -19,7 +22,15 @@ parseInput = do
|
|||||||
day03_1 :: IO ()
|
day03_1 :: IO ()
|
||||||
day03_1 = do
|
day03_1 = do
|
||||||
banks <- parseInput
|
banks <- parseInput
|
||||||
let joltage = getTotalJoltage banks
|
let joltage = getTotalJoltage banks 2
|
||||||
putStrLn $
|
putStrLn $
|
||||||
"Day 3, Puzzle 1 solution: "
|
"Day 3, Puzzle 1 solution: "
|
||||||
++ show joltage
|
++ show joltage
|
||||||
|
|
||||||
|
day03_2 :: IO ()
|
||||||
|
day03_2 = do
|
||||||
|
banks <- parseInput
|
||||||
|
let joltage = getTotalJoltage banks 12
|
||||||
|
putStrLn $
|
||||||
|
"Day 3, Puzzle 2 solution: "
|
||||||
|
++ show joltage
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ module Main (main) where
|
|||||||
|
|
||||||
import Day01 (day01_1, day01_2)
|
import Day01 (day01_1, day01_2)
|
||||||
import Day02 (day02_1, day02_2)
|
import Day02 (day02_1, day02_2)
|
||||||
import Day03 (day03_1)
|
import Day03 (day03_1, day03_2)
|
||||||
import System.Environment (getArgs)
|
import System.Environment (getArgs)
|
||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
@@ -20,12 +20,15 @@ main = do
|
|||||||
day02_1
|
day02_1
|
||||||
day02_2
|
day02_2
|
||||||
"3" : "1" : _ -> day03_1
|
"3" : "1" : _ -> day03_1
|
||||||
|
"3" : "2" : _ -> day03_2
|
||||||
"3" : _ -> do
|
"3" : _ -> do
|
||||||
day03_1
|
day03_1
|
||||||
|
day03_2
|
||||||
"all" : _ -> do
|
"all" : _ -> do
|
||||||
day01_1
|
day01_1
|
||||||
day01_2
|
day01_2
|
||||||
day02_1
|
day02_1
|
||||||
day02_2
|
day02_2
|
||||||
day03_1
|
day03_1
|
||||||
|
day03_2
|
||||||
_ -> error "Not implemented"
|
_ -> error "Not implemented"
|
||||||
|
|||||||
Reference in New Issue
Block a user