|
- import Data.List (nub, sort)
-
- 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, Eq a) => [a] -> [a] -> [a]
- match as bs = (sort . nub) $ filter (`elem` bs) as
-
- split :: Eq a => a -> [a] -> [[a]]
- split _ [] = []
- split v as = split' v as [] []
-
- split' :: Eq a => a -> [a] -> [a] -> [[a]] -> [[a]]
- split' _ [] a as = as ++ [a]
- split' v (b:bs) a as
- | b == v = split' v bs [] (as ++ [a])
- | otherwise = split' v bs (a ++ [b]) as
|