diff --git a/Makefile b/Makefile index f3b3462..8fe2140 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -DAY = 3 +DAY = 4 DIR = day$(DAY) diff --git a/day4/main.hs b/day4/main.hs new file mode 100644 index 0000000..d7347bc --- /dev/null +++ b/day4/main.hs @@ -0,0 +1,31 @@ +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