Files
aoc-2025/src/Day2.purs
orion kindel 1d23bef4bd day 2
2025-12-02 15:33:01 -06:00

35 lines
1.5 KiB
Plaintext

module Day2 where
import Prelude
import Data.String as String
import Control.Monad.Error.Class (liftEither)
import Data.Bifunctor (lmap)
import Data.Filterable (filter)
import Data.Foldable (sum)
import Day2.Id as Id
import Effect (Effect)
import Effect.Console as Console
import Effect.Exception (error)
main :: Effect Unit
main = do
Console.log "=== Day 2 ==="
run exampleInput <#> ("[exampl] " <> _) >>= Console.log
run fullInput <#> ("[actual] " <> _) >>= Console.log
Console.log ""
run :: String -> Effect String
run input = do
idRanges <- liftEither $ lmap (error <<< show) $ Id.parseIds input
let
ids = Id.flat idRanges
invalidIds = filter (not Id.isValid) ids
pure $ show $ sum invalidIds
exampleInput :: String
exampleInput = """11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124"""
fullInput :: String
fullInput = String.trim """385350926-385403705,48047-60838,6328350434-6328506208,638913-698668,850292-870981,656-1074,742552-796850,4457-6851,138-206,4644076-4851885,3298025-3353031,8594410816-8594543341,396-498,1558-2274,888446-916096,12101205-12154422,2323146444-2323289192,37-57,101-137,46550018-46679958,79-96,317592-341913,495310-629360,33246-46690,14711-22848,1-17,2850-4167,3723700171-3723785996,190169-242137,272559-298768,275-365,7697-11193,61-78,75373-110112,425397-451337,9796507-9899607,991845-1013464,77531934-77616074"""