24 lines
598 B
Haskell
24 lines
598 B
Haskell
|
#!/usr/bin/env stack
|
||
|
-- stack --resolver lts-12.5 script
|
||
|
|
||
|
module Day5A where
|
||
|
import Data.Char
|
||
|
import qualified Data.Foldable as F
|
||
|
|
||
|
invertCase :: Char -> Char
|
||
|
invertCase c
|
||
|
| isUpper c = toLower c
|
||
|
| otherwise = toUpper c
|
||
|
|
||
|
calcLength :: String -> String -> Int
|
||
|
calcLength ys (x:y:xs)
|
||
|
| x == invertCase y = case length ys of
|
||
|
0 -> calcLength ys xs
|
||
|
_ -> calcLength (tail ys) (head ys:xs)
|
||
|
| otherwise = calcLength (x:ys) (y:xs)
|
||
|
calcLength ys [x] = calcLength (x:ys) []
|
||
|
calcLength ys [] = length ys
|
||
|
|
||
|
main :: IO ()
|
||
|
main = interact $ show . calcLength "" . filter (/= '\n')
|