This commit is contained in:
George Thomas 2025-12-02 11:15:49 +00:00
parent 3601933bd0
commit bd4d350e76

View File

@ -55,27 +55,25 @@ puzzle1 =
{ number = 1 { number = 1
, parser = flip sepEndBy newline $ (,) <$> ((char 'L' $> L) <|> (char 'R' $> R)) <*> (Inc <$> Lex.decimal) , parser = flip sepEndBy newline $ (,) <$> ((char 'L' $> L) <|> (char 'R' $> R)) <*> (Inc <$> Lex.decimal)
, parts = , parts =
[ [ T.show
T.show . sum
. sum . flip evalState 50
. flip evalState 50 . traverse \(d, i) -> state \p ->
. traverse \(d, i) -> state \p -> let (_, p') = step i d p
let (_, p') = step i d p in (Count if p' == 0 then 1 else 0, p')
in (Count if p' == 0 then 1 else 0, p') , T.show
, . sum
T.show . flip evalState 50
. sum . traverse \(d, i) -> state \p ->
. flip evalState 50 let (c, p') = step i d p
. traverse \(d, i) -> state \p -> c' = case d of
let (c, p') = step i d p R -> abs c
c' = case d of L ->
R -> abs c if
L -> | p == 0 -> abs c - 1
if | p' == 0 -> abs c + 1
| p == 0 -> abs c - 1 | otherwise -> abs c
| p' == 0 -> abs c + 1 in (c', p')
| otherwise -> abs c
in (c', p')
] ]
} }
@ -102,11 +100,10 @@ puzzle2 =
{ number = 2 { number = 2
, parser = (<* newline) $ flip sepBy (char ',') $ (,) <$> (Lex.decimal <* char '-') <*> Lex.decimal , parser = (<* newline) $ flip sepBy (char ',') $ (,) <$> (Lex.decimal <* char '-') <*> Lex.decimal
, parts = , parts =
[ [ T.show
T.show . sum
. sum . concatMap
. concatMap (mapMaybe (\n -> guard (isRepetition n) $> n) . uncurry enumFromTo)
(mapMaybe (\n -> guard (isRepetition n) $> n) . uncurry enumFromTo)
] ]
} }