|
- import Data.List
-
-
- main :: IO ()
- main = do
- input <- readFile "input"
- print . sum . map length . groups $ input
-
-
- -- Collect each group's answers
- groups :: String -> [String]
- groups = map (foldr1 union . lines) . dlfsplit
-
- -- Split a string into a list across all the double newlines in it
- dlfsplit :: String -> [String]
- dlfsplit str = a : case b of
- [] -> []
- b -> dlfsplit b
- where (a,b) = dlfsplitonce str
-
- -- Split a string into two across the first double newline found
- dlfsplitonce :: String -> (String, String)
- dlfsplitonce [] = ([], [])
- dlfsplitonce (ca:cb:rest)
- | ca == '\n' && cb == '\n' = ([], rest)
- | otherwise = (ca:before, after)
- where (before, after) = dlfsplitonce (cb : rest)
- dlfsplitonce c = (c, [])
|