04.hs
1 import Lib 2 import Text.Regex.TDFA 3 4 type Assignment = (Int, Int) 5 6 type Input = [(Assignment, Assignment)] 7 8 main :: IO () 9 main = aoc 2022 4 setup solve1 solve2 ["1"] 10 11 solve1 :: Input -> Int 12 solve1 = length . filter (\(a, b) -> contains a b || contains b a) 13 14 solve2 :: Input -> Int 15 solve2 = length . filter (uncurry overlaps) 16 17 setup :: String -> Input 18 setup = map ((\[a, b, c, d] -> ((a, b), (c, d))) . (map read . getAllTextMatches . (=~ "[0-9]+"))) . lines 19 20 contains :: Assignment -> Assignment -> Bool 21 contains (a, b) (c, d) = a <= c && d <= b 22 23 overlaps :: Assignment -> Assignment -> Bool 24 overlaps (a, b) (c, d) = not $ b < c || d < a