Problem 17
http://projecteuler.net/index.php?section=problems&id=17
1から1000までを全て英語表記したら何文字になるのか?(スペースとハイフンは除く)
そのまま解いた。
1〜99 の文字数は、100から199の文字数に使えるけどやめた。
main = print $ length $ concat $ map toLetter [1..1000] toLetter 0 = "" toLetter 1 = "one" toLetter 2 = "two" toLetter 3 = "three" toLetter 4 = "four" toLetter 5 = "five" toLetter 6 = "six" toLetter 7 = "seven" toLetter 8 = "eight" toLetter 9 = "nine" toLetter 10 = "ten" toLetter 11 = "eleven" toLetter 12 = "twelve" toLetter 13 = "thirteen" toLetter 14 = "fourteen" toLetter 15 = "fifteen" toLetter 16 = "sixteen" toLetter 17 = "seventeen" toLetter 18 = "eighteen" toLetter 19 = "nineteen" toLetter 20 = "twenty" toLetter 30 = "thirty" toLetter 40 = "forty" toLetter 50 = "fifty" toLetter 60 = "sixty" toLetter 70 = "seventy" toLetter 80 = "eighty" toLetter 90 = "ninety" toLetter 1000 = "one" ++ "thousand" toLetter i | i <= 99 = ten ++ one | i `mod` 100 == 0 = hundred | i <= 999 = hundred ++ "and" ++ toLetter (i `mod` 100) where hundred = toLetter (i `div` 100) ++ "hundred" ten = toLetter ((i `mod` 100) `div` 10 * 10) one = toLetter (i `mod` 10)