Skip to content

Commit d4f9131

Browse files
committed
feat(2025-05/haskell): solve Part One
1 parent 61a32d4 commit d4f9131

File tree

3 files changed

+56
-1
lines changed

3 files changed

+56
-1
lines changed

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2025.4.2.1
1+
2025.5.1.0

package.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -617,6 +617,9 @@ executables:
617617
main: AdventOfCode.Year2025.Day04
618618
dependencies:
619619
- linear
620+
aoc-2025-day05:
621+
<<: *executable
622+
main: AdventOfCode.Year2025.Day05
620623
_benchmark: &benchmark
621624
ghc-options:
622625
- -threaded

src/AdventOfCode/Year2025/Day05.hs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
{-# LANGUAGE BlockArguments #-}
2+
{-# LANGUAGE NoImplicitPrelude #-}
3+
4+
module AdventOfCode.Year2025.Day05 where
5+
6+
import AdventOfCode.Input (parseInputAoC, parseString)
7+
import AdventOfCode.Puzzle
8+
import AdventOfCode.TH (defaultMainPuzzle)
9+
import AdventOfCode.Util (count)
10+
import Data.Ix (inRange)
11+
import Relude
12+
import Text.Trifecta (Parser, char, decimal, newline, sepEndBy)
13+
14+
database :: Parser ([(Integer, Integer)], [Integer])
15+
database = do
16+
idRange <- some $ do
17+
from <- decimal <* char '-'
18+
to <- decimal <* newline
19+
pure (from, to)
20+
ingredients <- newline *> decimal `sepEndBy` newline
21+
pure (idRange, ingredients)
22+
23+
getExample :: IO ([(Integer, Integer)], [Integer])
24+
getExample = parseString database example
25+
26+
example :: String
27+
example =
28+
"3-5\n\
29+
\10-14\n\
30+
\16-20\n\
31+
\12-18\n\
32+
\\n\
33+
\1\n\
34+
\5\n\
35+
\8\n\
36+
\11\n\
37+
\17\n\
38+
\32"
39+
40+
getInput :: IO ([(Integer, Integer)], [Integer])
41+
getInput = parseInputAoC 2025 5 database
42+
43+
partOne :: SimplePuzzle ([(Integer, Integer)], [Integer]) Int
44+
partOne =
45+
asks \(ranges, ingredients) ->
46+
count (flip any ranges . flip inRange) ingredients
47+
48+
partTwo :: SimplePuzzle ([(Integer, Integer)], [Integer]) ()
49+
partTwo = fail "not yet implemented"
50+
51+
main :: IO ()
52+
main = $(defaultMainPuzzle)

0 commit comments

Comments
 (0)