26 lines
701 B
Haskell
26 lines
701 B
Haskell
|
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
|