Skip to content

Instantly share code, notes, and snippets.

@webdevlasse
Created October 10, 2012 23:41
Show Gist options
  • Save webdevlasse/3869249 to your computer and use it in GitHub Desktop.
Save webdevlasse/3869249 to your computer and use it in GitHub Desktop.
solution for words_in_numbers
@ones = {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"}
@tens = {10 => "ten", 20 => "twenty", 30 => "thirty",40 => "forty", 50 => "fifty",
60 => "sixty", 70 => "seventy", 80 => "eighty", 90 => "ninety"}
@hundreds = {1 => "one hundred", 2 => "two hundred", 3 => "three hundred",
4 => "four hundred", 5 => "five hundred", 6 => "six hundred",
7 => "seven hundred", 8 => "eight hundred", 9 => "nine hundred"}
def in_words(num)
result = []
if num == 0
return ""
elsif num < 20
result << @ones.fetch(num)
elsif num < 100 && num > 19
factored = num.divmod(10)
result << @tens.fetch(factored[0] * 10) + " #{in_words(factored[1])}"
elsif num < 1000 && num > 99
factored = num.divmod(100)
result << @hundreds.fetch(factored[0]) + " #{in_words(factored[1])}"
elsif num < 1_000_000 && num > 999
factored = num.divmod(1000)
result << in_words(factored[0]) + " thousand" + " #{in_words(factored[1])}"
elsif num < 1_000_000_000 && num > 999_999
factored = num.divmod(1_000_000)
result << in_words(factored[0]) + " million" + " #{in_words(factored[1])}"
elsif num < 1_000_000_000_000 && num > 999_999_999
factored = num.divmod(1_000_000_000)
result << in_words(factored[0]) + " billion" + " #{in_words(factored[1])}"
elsif num == 1_000_000_000_000
result << "one trillion"
end
result.join
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment