ProjectEular

-- Problem 17

module Main (main) where

main :: IO ()
main = print $ problem17

problem17 :: Int
problem17 = sum $ map (length . to_word) [1..1000]

to_word :: Int -> String
to_word n
    | n >  1000   = ""
    | n <  1      = ""
    | n == 1      = "One"
    | n == 2      = "Two"
    | n == 3      = "Three"
    | n == 4      = "Four"
    | n == 5      = "Five"
    | n == 6      = "Six"
    | n == 7      = "Seven"
    | n == 8      = "Eight"
    | n == 9      = "Nine"
    | n == 10     = "Ten"
    | n == 11     = "Eleven"
    | n == 12     = "Twelve"
    | n == 13     = "Thirteen"
    | n == 14     = "Fourteen"
    | n == 15     = "Fifteen"
    | n == 16     = "Sixteen"
    | n == 17     = "Seventeen"
    | n == 18     = "Eighteen"
    | n == 19     = "Nineteen"
    | n == 20     = "Twenty"
    | n == 30     = "Thirty"
    | n == 40     = "Forty"
    | n == 50     = "Fifty"
    | n == 60     = "Sixty"
    | n == 70     = "Seventy"
    | n == 80     = "Eighty"
    | n == 90     = "Ninety"
    | n == 1000   = "OneThousand"
    | n <  100    = to_word (n - mod10) ++ to_word mod10
    | mod100 == 0 = to_word div100 ++ "Hundred"
    | otherwise   = to_word div100 ++ "HundredAnd" ++ to_word mod100
    where
        mod10 = mod n 10
        (div100, mod100) = divMod n 100

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS