Solve day 5 part 2
This commit is contained in:
parent
1429445efe
commit
67180c098f
@ -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
1
outputs/real/5/2
Normal file
@ -0,0 +1 @@
|
||||
348548952146313
|
||||
Loading…
x
Reference in New Issue
Block a user