DEV Community

Discussion on: Daily Challenge #270 - Fix String Case

Collapse
 
cipharius profile image
Valts Liepiņš

Haskell solution:

import Data.List (foldl')
import Data.Char (toLower, toUpper, isLower)

solve :: String -> String
solve str =
  if fromIntegral nLower / nTotal >= 0.5
    then toLower <$> str
    else toUpper <$> str
  where
    (nLower, nTotal) = foldl' counter (0,0) str
    counter (nLower, nTotal) ch =
      if isLower ch
        then (nLower+1, nTotal+1)
        else (nLower, nTotal+1)