pretty pretty pretty
Haldean Brown
3 years ago
0 | 0 | import Control.Arrow |
1 | 1 | import Data.Char |
2 | 2 | import Data.Function |
3 | import qualified Data.List as L | |
4 | import qualified Data.Set as S | |
5 | import System.Environment | |
3 | 6 | |
4 | 7 | collapse1 (a:b:ss) |
5 | 8 | | toLower a == toLower b && a /= b = collapse1 ss |
6 | 9 | | otherwise = a:(collapse1 $ b:ss) |
7 | 10 | collapse1 s = s |
8 | 11 | collapse s = let cs = collapse1 s in if cs == s then s else collapse cs |
9 | main = readFile "input.txt" >>= (collapse >>> length >>> subtract 1 >>> print) | |
12 | main1 = readFile "input.txt" >>= (collapse >>> length >>> subtract 1 >>> print) | |
13 | ||
14 | minimize s = | |
15 | let units = S.fromList $ map toLower s | |
16 | in S.map (\u -> filter ((u /=) . toLower) s & collapse & length) units | |
17 | & S.toList & L.minimum & subtract 1 | |
18 | main2 = readFile "input.txt" >>= (collapse >>> minimize >>> print) | |
19 | ||
20 | main = fmap head getArgs >>= \a -> if a == "1" then main1 else main2 |