diff --git a/day4.hs b/day4.hs index b0bcec3..228d851 100644 --- a/day4.hs +++ b/day4.hs @@ -9,7 +9,7 @@ import Data.List (sort, nub) main :: IO () main = do raw <- readFile "day4.txt" - let ls = parse $ lines raw + let ls = map (concat . (map words)) $ split "" $ lines raw ansA = length $ filter (== True) $ map solveA ls ansB = length $ filter (== True) $ map solveB ls in do @@ -96,12 +96,9 @@ hgtValid s' = s = drop 1 $ dropWhile (/= ':') s' (val,unit) = head $ (reads s :: [(Int,String)]) -parse :: [String] -> [[String]] -parse [] = [] -parse s = parse' s [] [] - -parse' :: [String] -> [String] -> [[String]] -> [[String]] -parse' [] as bs = bs ++ [as] -parse' (s:ss) as bs - | s == "" = parse' ss [] $ bs ++ [as] - | otherwise = parse' ss (as ++ (words s)) bs +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