/ Haskell / 2022 / 04.hs
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