# Pastebin ijCxTrwy type Range = (Int, Int) type RangePair = (Range, Range) getInput :: FilePath -> IO [RangePair] getInput = parseFile (parseOne `endBy` "\n") where parseOne = ordered <$> range <* "," <*> range ordered a b = (min a b, max a b) range = (,) <$> L.decimal <* "-" <*> L.decimal part1 :: IO Int part1 = countIf contained <$> getInput "input/day4" where contained ((l1,h1), (l2,h2)) = h2 <= h1 || l1 == l2 part2 :: IO Int part2 = countIf overlap <$> getInput "input/day4" where overlap ((_,h1), (l2,_)) = l2 <= h1