Compare commits
2 Commits
b6b02ac5a2
...
8828c9fe7f
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8828c9fe7f
|
||
|
|
7a68416c24
|
@@ -6,5 +6,5 @@
|
|||||||
|02 |★ ★ |08 | |
|
|02 |★ ★ |08 | |
|
||||||
|03 |★ ★ |09 | |
|
|03 |★ ★ |09 | |
|
||||||
|04 |★ ★ |10 | |
|
|04 |★ ★ |10 | |
|
||||||
|05 | |11 | |
|
|05 |★ |11 | |
|
||||||
|06 | |12 | |
|
|06 | |12 | |
|
||||||
|
|||||||
@@ -34,3 +34,4 @@ executable adventofcode2025
|
|||||||
Day02
|
Day02
|
||||||
Day03
|
Day03
|
||||||
Day04
|
Day04
|
||||||
|
Day05
|
||||||
|
|||||||
28
src/Day02.hs
28
src/Day02.hs
@@ -1,6 +1,6 @@
|
|||||||
module Day02
|
module Day02
|
||||||
( day02_1,
|
( day02_1,
|
||||||
day02_2
|
day02_2,
|
||||||
)
|
)
|
||||||
where
|
where
|
||||||
|
|
||||||
@@ -9,25 +9,25 @@ import Data.List.Split (splitOn)
|
|||||||
|
|
||||||
sumInvalid :: [Int] -> Int
|
sumInvalid :: [Int] -> Int
|
||||||
sumInvalid = foldl addInvalid 0
|
sumInvalid = foldl addInvalid 0
|
||||||
where
|
where
|
||||||
addInvalid acc n
|
addInvalid acc n
|
||||||
| odd (length (show n)) = acc
|
| odd (length (show n)) = acc
|
||||||
| let l2 = length (show n) `div` 2, take l2 (show n) == drop l2 (show n) = acc + n
|
| let l2 = length (show n) `div` 2, take l2 (show n) == drop l2 (show n) = acc + n
|
||||||
| otherwise = acc
|
| otherwise = acc
|
||||||
|
|
||||||
sumInvalid' :: [Int] -> Int
|
sumInvalid' :: [Int] -> Int
|
||||||
sumInvalid' = foldl addInvalid 0
|
sumInvalid' = foldl addInvalid 0
|
||||||
where addInvalid acc n
|
where
|
||||||
| let s = drop 1 $ show n ++ show n, show n `isInfixOf` take (length s - 1) s = acc + n
|
addInvalid acc n
|
||||||
| otherwise = acc
|
| let s = drop 1 $ show n ++ show n, show n `isInfixOf` take (length s - 1) s = acc + n
|
||||||
|
| otherwise = acc
|
||||||
|
|
||||||
getRange :: String -> [Int]
|
getRange :: String -> [Int]
|
||||||
getRange r = [read (takeWhile (/= '-') r)..read $ drop 1 (dropWhile (/= '-') r)]
|
getRange r = [read (takeWhile (/= '-') r) .. read $ drop 1 (dropWhile (/= '-') r)]
|
||||||
|
|
||||||
parseInput :: IO [Int]
|
parseInput :: IO [Int]
|
||||||
parseInput = do
|
parseInput = do
|
||||||
concatMap getRange . splitOn "," <$> readFile "input/day2.txt"
|
concatMap getRange . splitOn "," <$> readFile "input/day2.txt"
|
||||||
|
|
||||||
day02_1 :: IO ()
|
day02_1 :: IO ()
|
||||||
day02_1 = do
|
day02_1 = do
|
||||||
@@ -35,7 +35,7 @@ day02_1 = do
|
|||||||
let result = sumInvalid values
|
let result = sumInvalid values
|
||||||
putStrLn $
|
putStrLn $
|
||||||
"Day 2, Puzzle 1 solution: "
|
"Day 2, Puzzle 1 solution: "
|
||||||
++ show result
|
++ show result
|
||||||
|
|
||||||
day02_2 :: IO ()
|
day02_2 :: IO ()
|
||||||
day02_2 = do
|
day02_2 = do
|
||||||
@@ -43,4 +43,4 @@ day02_2 = do
|
|||||||
let result = sumInvalid' values
|
let result = sumInvalid' values
|
||||||
putStrLn $
|
putStrLn $
|
||||||
"Day 2, Puzzle 1 solution: "
|
"Day 2, Puzzle 1 solution: "
|
||||||
++ show result
|
++ show result
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
module Day03
|
module Day03
|
||||||
( day03_1,
|
( day03_1,
|
||||||
day03_2
|
day03_2,
|
||||||
)
|
)
|
||||||
where
|
where
|
||||||
|
|
||||||
getBankJoltage :: String -> Int -> String -> Int
|
getBankJoltage :: String -> Int -> String -> Int
|
||||||
getBankJoltage value 0 _ = read value
|
getBankJoltage value 0 _ = read value
|
||||||
getBankJoltage value n bank =
|
getBankJoltage value n bank =
|
||||||
let l = length bank
|
let l = length bank
|
||||||
bank' = take (l - n + 1) bank
|
bank' = take (l - n + 1) bank
|
||||||
x = maximum bank'
|
x = maximum bank'
|
||||||
in getBankJoltage (value ++ [x]) (n - 1) (drop 1 (dropWhile (/= x) bank))
|
in getBankJoltage (value ++ [x]) (n - 1) (drop 1 (dropWhile (/= x) bank))
|
||||||
|
|
||||||
getTotalJoltage :: [String] -> Int -> Int
|
getTotalJoltage :: [String] -> Int -> Int
|
||||||
getTotalJoltage banks n = sum $ map (getBankJoltage "" n) banks
|
getTotalJoltage banks n = sum $ map (getBankJoltage "" n) banks
|
||||||
|
|||||||
34
src/Day05.hs
Normal file
34
src/Day05.hs
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{-# OPTIONS_GHC -Wno-x-partial #-}
|
||||||
|
|
||||||
|
module Day05
|
||||||
|
( day05_1,
|
||||||
|
)
|
||||||
|
where
|
||||||
|
|
||||||
|
import Data.List.Split (splitOn)
|
||||||
|
|
||||||
|
getRange :: String -> (Int, Int)
|
||||||
|
getRange [] = (0, 0)
|
||||||
|
getRange r =
|
||||||
|
let x = read . head $ splitOn "-" r
|
||||||
|
y = read . last $ splitOn "-" r
|
||||||
|
in (x, y)
|
||||||
|
|
||||||
|
isFresh :: Int -> [(Int, Int)] -> Bool
|
||||||
|
isFresh _ [] = False
|
||||||
|
isFresh ingredient (r : rs)
|
||||||
|
| ingredient >= fst r && ingredient <= snd r = True
|
||||||
|
| otherwise = isFresh ingredient rs
|
||||||
|
|
||||||
|
parseInput :: IO [String]
|
||||||
|
parseInput = do
|
||||||
|
lines <$> readFile "input/day5.txt"
|
||||||
|
|
||||||
|
day05_1 :: IO ()
|
||||||
|
day05_1 = do
|
||||||
|
input <- parseInput
|
||||||
|
let ranges = map getRange $ takeWhile (/= "") input
|
||||||
|
freshIngredients = filter (`isFresh` ranges) . map read . drop 1 $ dropWhile (/= "") input :: [Int]
|
||||||
|
putStrLn $
|
||||||
|
"Day 5, Puzzle 1 solution: "
|
||||||
|
++ show (length freshIngredients)
|
||||||
@@ -4,6 +4,7 @@ import Day01 (day01_1, day01_2)
|
|||||||
import Day02 (day02_1, day02_2)
|
import Day02 (day02_1, day02_2)
|
||||||
import Day03 (day03_1, day03_2)
|
import Day03 (day03_1, day03_2)
|
||||||
import Day04 (day04_1, day04_2)
|
import Day04 (day04_1, day04_2)
|
||||||
|
import Day05 (day05_1)
|
||||||
import System.Environment (getArgs)
|
import System.Environment (getArgs)
|
||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
@@ -30,6 +31,9 @@ main = do
|
|||||||
"4" : _ -> do
|
"4" : _ -> do
|
||||||
day04_1
|
day04_1
|
||||||
day04_2
|
day04_2
|
||||||
|
"5" : "1" : _ -> day05_1
|
||||||
|
"5" : _ -> do
|
||||||
|
day05_1
|
||||||
"all" : _ -> do
|
"all" : _ -> do
|
||||||
day01_1
|
day01_1
|
||||||
day01_2
|
day01_2
|
||||||
@@ -39,4 +43,5 @@ main = do
|
|||||||
day03_2
|
day03_2
|
||||||
day04_1
|
day04_1
|
||||||
day04_2
|
day04_2
|
||||||
|
day05_1
|
||||||
_ -> error "Not implemented"
|
_ -> error "Not implemented"
|
||||||
|
|||||||
Reference in New Issue
Block a user