import Control.Monad import Data.Char import Data.List parseLine :: String -> [[Int]] parseLine line = [parseAssignment $ takeWhile (/= ',') line, parseAssignment $ drop 1 $ dropWhile (',' /= ) line] parseAssignment :: String -> [Int] parseAssignment assignment = do let first = takeWhile ('-' /=) assignment let second = drop 1 $ dropWhile ('-' /=) assignment [(read first).. (read second)] coveredByPartner :: [[Int]] -> Bool coveredByPartner [first,second] = 0 /= (length $ intersect first second) main = do input <- readFile "four-input.txt" let lists= (map (parseLine) $ lines input) print $ length $ filter id $ map coveredByPartner lists