Add Day 2 solutions
This commit is contained in:
@@ -3,7 +3,7 @@
|
|||||||
|Day|Stars|Day|Stars|
|
|Day|Stars|Day|Stars|
|
||||||
|---|-----|---|-----|
|
|---|-----|---|-----|
|
||||||
|01 |★ ★ |07 | |
|
|01 |★ ★ |07 | |
|
||||||
|02 | |08 | |
|
|02 |★ |08 | |
|
||||||
|03 | |09 | |
|
|03 | |09 | |
|
||||||
|04 | |10 | |
|
|04 | |10 | |
|
||||||
|05 | |11 | |
|
|05 | |11 | |
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ executable adventofcode2025
|
|||||||
main-is: Main.hs
|
main-is: Main.hs
|
||||||
default-language: Haskell2010
|
default-language: Haskell2010
|
||||||
build-depends: base >= 4.7 && < 5
|
build-depends: base >= 4.7 && < 5
|
||||||
|
, split
|
||||||
ghc-options: -Wall
|
ghc-options: -Wall
|
||||||
-Wcompat
|
-Wcompat
|
||||||
-Widentities
|
-Widentities
|
||||||
@@ -30,3 +31,4 @@ executable adventofcode2025
|
|||||||
-Wredundant-constraints
|
-Wredundant-constraints
|
||||||
other-modules:
|
other-modules:
|
||||||
Day01
|
Day01
|
||||||
|
Day02
|
||||||
|
|||||||
46
src/Day02.hs
Normal file
46
src/Day02.hs
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
module Day02
|
||||||
|
( day02_1,
|
||||||
|
day02_2
|
||||||
|
)
|
||||||
|
where
|
||||||
|
|
||||||
|
import Data.List (isInfixOf)
|
||||||
|
import Data.List.Split (splitOn)
|
||||||
|
|
||||||
|
sumInvalid :: [Int] -> Int
|
||||||
|
sumInvalid = foldl addInvalid 0
|
||||||
|
where
|
||||||
|
addInvalid acc n
|
||||||
|
| odd (length (show n)) = acc
|
||||||
|
| let l2 = length (show n) `div` 2, take l2 (show n) == drop l2 (show n) = acc + n
|
||||||
|
| otherwise = acc
|
||||||
|
|
||||||
|
sumInvalid' :: [Int] -> Int
|
||||||
|
sumInvalid' = foldl addInvalid 0
|
||||||
|
where addInvalid acc n
|
||||||
|
| let s = drop 1 $ show n ++ show n, show n `isInfixOf` take (length s - 1) s = acc + n
|
||||||
|
| otherwise = acc
|
||||||
|
|
||||||
|
|
||||||
|
getRange :: String -> [Int]
|
||||||
|
getRange r = [read (takeWhile (/= '-') r)..read $ drop 1 (dropWhile (/= '-') r)]
|
||||||
|
|
||||||
|
parseInput :: IO [Int]
|
||||||
|
parseInput = do
|
||||||
|
concatMap getRange . splitOn "," <$> readFile "input/day2.txt"
|
||||||
|
|
||||||
|
day02_1 :: IO ()
|
||||||
|
day02_1 = do
|
||||||
|
values <- parseInput
|
||||||
|
let result = sumInvalid values
|
||||||
|
putStrLn $
|
||||||
|
"Day 2, Puzzle 1 solution: "
|
||||||
|
++ show result
|
||||||
|
|
||||||
|
day02_2 :: IO ()
|
||||||
|
day02_2 = do
|
||||||
|
values <- parseInput
|
||||||
|
let result = sumInvalid' values
|
||||||
|
putStrLn $
|
||||||
|
"Day 2, Puzzle 1 solution: "
|
||||||
|
++ show result
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
module Main (main) where
|
module Main (main) where
|
||||||
|
|
||||||
import Day01 (day01_1, day01_2)
|
import Day01 (day01_1, day01_2)
|
||||||
|
import Day02 (day02_1, day02_2)
|
||||||
import System.Environment (getArgs)
|
import System.Environment (getArgs)
|
||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
@@ -12,7 +13,14 @@ main = do
|
|||||||
"1" : _ -> do
|
"1" : _ -> do
|
||||||
day01_1
|
day01_1
|
||||||
day01_2
|
day01_2
|
||||||
|
"2" : "1" : _ -> day02_1
|
||||||
|
"2" : "2" : _ -> day02_2
|
||||||
|
"2" : _ -> do
|
||||||
|
day02_1
|
||||||
|
day02_2
|
||||||
"all" : _ -> do
|
"all" : _ -> do
|
||||||
day01_1
|
day01_1
|
||||||
day01_2
|
day01_2
|
||||||
|
day02_1
|
||||||
|
day02_2
|
||||||
_ -> error "Not implemented"
|
_ -> error "Not implemented"
|
||||||
|
|||||||
Reference in New Issue
Block a user