"血をもって書け。そうすればあなたは、血が精神だということを経験するだろう。"

Problem17

1 から 5 までの数字を英単語で書けば one, two, three, four, five であり、全部で 3 + 3 + 4 + 4 + 5 = 19 の文字が使われている。

では 1 から 1000 (one thousand) までの数字をすべて英単語で書けば、全部で何文字になるか。

注: 空白文字やハイフンを数えないこと。例えば、342 (three hundred and forty-two) は 23 文字、115 (one hundred and fifteen) は20文字と数える。なお、"and" を使用するのは英国の慣習。

役に立ちそうにないけど面白い問題。

Haskell

main=print $ 3+8+ (sum $ map threedigits [1..999])
threedigits n
 |n<100        =twodigits n
 |mod n 100==0 =lower (div n 100) +7 -- 100,200,..,900
 |otherwise    =lower (div n 100) +7+3+ twodigits (mod n 100)
twodigits n
 |n<20        =lower n
 |otherwise   =upper (div n 10)+lower (mod n 10)
upper n=last $ take (n-1) [6,6,6,5,4,7,6,6] -- 20,30,..,90
lower n=last $ take (n+1) [0,3,3,5,4,4,3,5,5,4,3,6,6,8,8,7,6,9,8,8] -- 0-19

answer

21114

合ってるのやらどうなのやら。