import Data.List (nub) main :: IO () main = do raw <- readFile "day6.txt" let ls = map concat $ split "" $ lines raw ms = split "" $ lines raw ansA = sum $ map (length . nub) ls ansB = sum $ map (length . (foldr match ['a'..'z'])) ms in do putStrLn $ "day6a: " ++ (show ansA) putStrLn $ "day6b: " ++ (show ansB) match :: Ord a => [a] -> [a] -> [a] match as bs = nub $ filter (`elem` bs) as split :: Eq a => a -> [a] -> [[a]] split _ [] = [] split d as = chunk : (split d rest) where chunk = takeWhile (/= d) as rest = drop 1 $ dropWhile (/= d) as