Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

26 lines
719B

  1. import Data.List (nub, sort)
  2. main :: IO ()
  3. main = do
  4. raw <- readFile "day6.txt"
  5. let ls = map concat $ split "" $ lines raw
  6. ms = split "" $ lines raw
  7. ansA = sum $ map (length . nub) ls
  8. ansB = sum $ map (length . (foldr match ['a'..'z'])) ms
  9. in do
  10. putStrLn $ "day6a: " ++ (show ansA)
  11. putStrLn $ "day6b: " ++ (show ansB)
  12. match :: (Ord a, Eq a) => [a] -> [a] -> [a]
  13. match as bs = (sort . nub) $ filter (`elem` bs) as
  14. split :: Eq a => a -> [a] -> [[a]]
  15. split _ [] = []
  16. split v as = split' v as [] []
  17. split' :: Eq a => a -> [a] -> [a] -> [[a]] -> [[a]]
  18. split' _ [] a as = as ++ [a]
  19. split' v (b:bs) a as
  20. | b == v = split' v bs [] (as ++ [a])
  21. | otherwise = split' v bs (a ++ [b]) as