25 lines
764 B
Haskell
Executable File
25 lines
764 B
Haskell
Executable File
#! /usr/bin/env stack
|
|
-- stack --resolver lts-12.20 --install-ghc script
|
|
{-# LANGUAGE FlexibleContexts, LambdaCase #-}
|
|
module Main where
|
|
|
|
import Data.Function (fix, on)
|
|
import qualified Data.Char as C
|
|
import qualified Data.List as L
|
|
|
|
main :: IO ()
|
|
main = interact $ \input -> show $ L.minimumBy (compare `on` snd) $
|
|
[ react $ filter (\c -> C.isAlpha c && c /= r && c /= C.toUpper r) input
|
|
| r <- ['a'..'z']
|
|
]
|
|
|
|
react input =
|
|
let scan (x:y:zs) = if x `reactsWith` y then scan zs else (x : scan (y:zs))
|
|
scan zs = zs
|
|
input' = scan input
|
|
result = (input', length input')
|
|
in if input' == input then result else react input'
|
|
|
|
x `reactsWith` y = (C.isUpper x && C.toLower x == y) ||
|
|
(C.isLower x && C.toUpper x == y)
|