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