Solve day 5 part 2
This commit is contained in:
parent
1429445efe
commit
67180c098f
@ -1,9 +1,8 @@
|
|||||||
module Puzzles.Day5 (puzzle) where
|
module Puzzles.Day5 (puzzle) where
|
||||||
|
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
import Data.Functor
|
import Data.List
|
||||||
import Data.List.Extra
|
import Data.Ord
|
||||||
import Data.Maybe
|
|
||||||
import Data.Text.Lazy qualified as TL
|
import Data.Text.Lazy qualified as TL
|
||||||
import Puzzle
|
import Puzzle
|
||||||
import Text.Megaparsec hiding (some)
|
import Text.Megaparsec hiding (some)
|
||||||
@ -25,6 +24,12 @@ puzzle =
|
|||||||
. length
|
. length
|
||||||
. filter (flip any ranges . isInRange)
|
. filter (flip any ranges . isInRange)
|
||||||
$ vals
|
$ vals
|
||||||
|
, TL.show
|
||||||
|
. sum
|
||||||
|
. map rangeLength
|
||||||
|
. foldr addInterval []
|
||||||
|
. sortOn (Down . (.lower))
|
||||||
|
. fst
|
||||||
]
|
]
|
||||||
, extraTests = mempty
|
, extraTests = mempty
|
||||||
}
|
}
|
||||||
@ -35,5 +40,19 @@ data Range = Range
|
|||||||
}
|
}
|
||||||
deriving (Eq, Ord, Show)
|
deriving (Eq, Ord, Show)
|
||||||
|
|
||||||
|
rangeLength :: Range -> Int
|
||||||
|
rangeLength r = r.upper - r.lower + 1
|
||||||
|
|
||||||
isInRange :: Int -> Range -> Bool
|
isInRange :: Int -> Range -> Bool
|
||||||
isInRange n r = n >= r.lower && n <= r.upper
|
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