32 lines
704 B
Haskell
32 lines
704 B
Haskell
|
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
|