Add Day 3, Puzzle 2 solution

- Implement generalized function for Puzzle 2
    - Use generalized function also for Puzzle 1
This commit is contained in:
Daniele Fucini
2025-12-03 21:42:31 +01:00
parent c93dbadb5a
commit 63c60509df
2 changed files with 23 additions and 9 deletions

View File

@@ -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

View File

@@ -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"