aoc2022/day4/main.hs

32 lines
704 B
Haskell
Raw Permalink Normal View History

2022-12-07 14:00:49 +01:00
import System.IO
import Data.List.Split
parseGrp :: String -> [(Int, Int)]
parseGrp = map ((\ [s,e] -> (read s :: Int,read e :: Int)) . splitOn "-") . splitOn ","
contained :: [(Int, Int)] -> Bool
contained [(s1,e1),(s2,e2)]
| s1 <= s2 && e1 >= e2 = True
| s1 >= s2 && e1 <= e2 = True
| otherwise = False
overlapping :: [(Int, Int)] -> Bool
overlapping [(s1,e1),(s2,e2)]
| e1 < s2 = False
| s1 > e2 = False
| otherwise = True
handler :: String -> String
handler s = (show $ length $ filter contained groups) ++ "\n" ++
(show $ length $ filter overlapping groups) ++ "\n"
where groups = map parseGrp $ lines s
main :: IO ()
main = do
interact handler