diff --git a/5/5.hs b/5/5.hs index 37ccc1a..754a6df 100644 --- a/5/5.hs +++ b/5/5.hs @@ -25,20 +25,20 @@ simplify acc s then simplify acc (S.drop 2 s) else simplify (acc |> x) (S.drop 1 s) -collapse :: S.Seq Char -> Int +collapse :: S.Seq Char -> S.Seq Char collapse s = let simplified = simplify S.empty s in if S.length simplified == S.length s - then S.length s + then s else collapse simplified -betterCollapse :: S.Seq Char -> (Char, Int) +betterCollapse :: S.Seq Char -> S.Seq Char betterCollapse s = - minimumBy (compare `on` snd) - . map (\c -> (c, collapse $ S.filter (\c' -> toLower c' /= toLower c) s)) + minimumBy (compare `on` S.length) + . map (\c -> collapse $ S.filter (\c' -> toLower c' /= toLower c) s) $ ['a' .. 'z'] main = do input <- S.fromList . filter (/= '\n') <$> getContents - putStrLn $ "Size = " ++ show (collapse input) - putStrLn $ "Better Size = " ++ show (betterCollapse input) \ No newline at end of file + putStrLn $ "Size = " ++ show (S.length $ collapse input) + putStrLn $ "Better Size = " ++ show (S.length $ betterCollapse (collapse input)) \ No newline at end of file