[[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