If the numbers 1 to 5 are written out in words: one, two, three, four, five, then there are 3 + 3 + 5 + 4 + 4 = 19 letters used in total.
If all the numbers from 1 to 1000 (one thousand) inclusive were written out in words, how many letters would be used?
NOTE: Do not count spaces or hyphens. For example, 342 (three hundred and forty-two) contains 23 letters and 115 (one hundred and fifteen) contains 20 letters. The use of "and" when writing out numbers is in compliance with British usage.
p17()->io:format("~w~n",[lists:sum(lists:map(fun(X)->p17(X) end,lists:seq(1,1000)))]).
p17(0)->0;
p17(1)->3; %"one"
p17(2)->3; %"two"
p17(3)->5; %"three"
p17(4)->4; %"four"
p17(5)->4; %"five"
p17(6)->3; %"six"
p17(7)->5; %"seven"
p17(8)->5; %"eight"
p17(9)->4; %"nine"
p17(10)->3; %"ten"
p17(11)->6; %"eleven"
p17(12)->6; %"twelve"
p17(13)->8; %"thirteen"
p17(14)->8; %"fourteen"
p17(15)->7; %"fifteen"
p17(16)->7; %"sixteen"
p17(17)->9; %"seventeen"
p17(18)->8; %"eighteen"
p17(19)->8; %"nineteen"
p17(1000)->11; %"one thousand"
p17(N) when N<40 -> 6+p17(N rem 10); %"twenty","thirty"
p17(N) when N<70 -> 5+p17(N rem 10); %"forty","fifty","sixty"
p17(N) when N<80 -> 7+p17(N rem 10); %"seventy"
p17(N) when N<100 -> 6+p17(N rem 10); %"eighty","ninety"
p17(N) when N rem 100 == 0-> p17(N div 100)+7;
p17(N) -> p17(N div 100) + 10 + p17(N rem 100).
#Enumerable def p17write_num(n) return "" if n==0 return "onethousand" if n==1000 return (["one","two","three","four","five","six","seven","eight","nine"])[n-1] if n<10 return p17write_num(n/100)+"hundred" if n%100==0 return p17write_num(n/100)+"hundredand"+p17write_num(n%100) if n>100 return (["ten", "eleven", "twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"])[n-10] if n<20 (['twenty','thirty','forty','fifty','sixty','seventy','eighty','ninety'])[n/10 - 2]+p17write_num(n%10) end def p17 puts (1..1000).map{|i|p17write_num(i).length}.sum end