
import Data.Char
import Data.List
import System
import Text.Printf

summit c
    | ('A' <= c) && (c <= 'Z') = ord c - ord 'A' + 1
    | ('a' <= c) && (c <= 'z') = ord c - ord 'a' + 1
    | otherwise = 0

main = do
    args <- getArgs
    case sort args of
        [word] -> print . sum . map summit $ word
        ["-v", word] -> do
            mapM_ (\c -> printf " %c       %4d\n" c (summit c)) word
            printf " total   %4d\n" . sum . map summit $ word
            printf " average %8.3f\n" $
                (fromIntegral (sum  . map summit $ word) / fromIntegral
                (length word) :: Double)
        _ -> do
            putStrLn "Usage: summit [-v] WORD"
            exitFailure

