Skip to content

Instantly share code, notes, and snippets.

@flakyfilibuster
Created October 15, 2012 02:18
Show Gist options
  • Save flakyfilibuster/3890501 to your computer and use it in GitHub Desktop.
Save flakyfilibuster/3890501 to your computer and use it in GitHub Desktop.
Numbers to words
$numbers_hash = {1 => "one", 2 => "two", 3 => "three", 4 => "four", 5 => "five", 6 => "six", 7 => "seven", 8 => "eigth", 9 => "nine", 10 => "ten",
10 => "ten", 11 => "eleven", 12 => "twelve", 13 => "thirteen", 14 => "forteen", 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 => "ninty", 100 => "hundred", 1_000 => "thousand", 1_000_000 => "million", 1_000_000_000 => "billion",
1_000_000_000_000 => "trillion"}
def ransom_below_100(number,modifier,result)
quotient,remainder = number.divmod(10)
result << in_words(quotient*10)+" "
result << in_words(remainder)
result
end
def high_ransom_sum(number,modifier,result)
quotient,remainder = number.divmod(modifier)
result << in_words(quotient)+" "
result << in_words(modifier)+" "
result << in_words(remainder)
result
end
def in_words(number)
result = ""
if $numbers_hash.include?(number)
return $numbers_hash[number]
elsif number < 100
ransom_below_100(number,10,result)
elsif number < 10**3
high_ransom_sum(number,100,result)
elsif number < 10**6
high_ransom_sum(number,1000,result)
elsif number < 10**9
high_ransom_sum(number,10**6,result)
elsif number < 10**12
high_ransom_sum(number,10**9,result)
elsif number < 10**14
high_ransom_sum(number,10**12,result)
end
result
end
puts in_words(21_869_453_544_329)
# puts in_words(5242)
# puts in_words(4348)
# puts in_words(7552)
# puts in_words(9768)
# puts in_words(2891)
# puts in_words(3939)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment