35 lines
1.5 KiB
Plaintext
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"""
|