Project Euler Problem 17 Solution

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.

My solution in Ruby:

@@words = { 1 => "one",2 => "two",3 => "three",4 => "four",5 => "five",
6 => "six",7 => "seven",8 => "eight",9 => "nine",10 => "ten",11 => "eleven",12 => "twelve",
13 => "thirteen",14 => "fourteen",15 => "fifteen",16 => "sixteen",17 => "seventeen",
18 => "eighteen",19 => "nineteen",20 => "twenty",30 => "thirty",40 => "forty",50 => "fifty",
60 => "sixty",70 => "seventy",80 => "eighty",90 => "ninety",100 => "hundred",
1000 => "thousand",0 => "" }
count = 0;

def one_to_ninetynine(base)
  icount = 0
  for i in 1..19 do
    icount += base + @@words[i].length
  end
  j = 10
  until j == 90
    j += 10
    icount += base + @@words[j].length
    for k in 1..9 do
      icount += base + @@words[j].length + @@words[k].length
    end
  end
  icount
end

count += one_to_ninetynine(0)

for l in 1..9 do
  count += @@words [l].length + (@@words[100].length)
  count += one_to_ninetynine(@@words[l].length + (@@words[100].length) + 3)
end
count += @@words[1].length + @@words[1000].length

puts count

Leave a Reply

Your email address will not be published. Required fields are marked *