advent-of-code/four2.hs

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