Solve day 5 part 2

This commit is contained in:
George Thomas 2025-12-05 15:36:12 +00:00
parent 1429445efe
commit 67180c098f
2 changed files with 23 additions and 3 deletions

View File

@ -1,9 +1,8 @@
module Puzzles.Day5 (puzzle) where
import Control.Monad
import Data.Functor
import Data.List.Extra
import Data.Maybe
import Data.List
import Data.Ord
import Data.Text.Lazy qualified as TL
import Puzzle
import Text.Megaparsec hiding (some)
@ -25,6 +24,12 @@ puzzle =
. length
. filter (flip any ranges . isInRange)
$ vals
, TL.show
. sum
. map rangeLength
. foldr addInterval []
. sortOn (Down . (.lower))
. fst
]
, extraTests = mempty
}
@ -35,5 +40,19 @@ data Range = Range
}
deriving (Eq, Ord, Show)
rangeLength :: Range -> Int
rangeLength r = r.upper - r.lower + 1
isInRange :: Int -> Range -> Bool
isInRange n r = n >= r.lower && n <= r.upper
extend :: Int -> Range -> Range
extend upper r = r{upper = max r.upper upper}
addInterval :: Range -> [Range] -> [Range]
addInterval new = \case
[] -> [new]
(r : rs) ->
if isInRange new.lower r
then extend new.upper r : rs
else new : r : rs

1
outputs/real/5/2 Normal file
View File

@ -0,0 +1 @@
348548952146313