carolineartz
2/17/2014 - 7:03 AM

gist

gist

#in_words(821_713) # => "eight hundred twenty one thousand seven hundred thirteen"
#in_words(34_567_893) # => "thirty four million five hundred sixty seven thousand eight hundred ninety three"
# pseudocode
#

class NumbersWords
  WORD_LOOKUP = {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'}

  MAGNITUDE   = {3 => 'hundred', 4 => 'thousand', 6 => 'million', 9 => 'billion'}

  #def initialize(number)
  #  @number = number
  #  in_words_thousand
  #end

  def in_words(number)
    WORD_LOOKUP.fetch(number) do |num|
      digit_array = to_digit_array(num)
      "#{WORD_LOOKUP[digit_array[0]*10]} #{WORD_LOOKUP[digit_array[1]]}"
    end
  end


  def in_words_thousand(number)
    digit_array = to_digit_array(number)
    while digit_array.length > 2
      print "#{in_words(digit_array.shift)} hundred "
    end
    number = digit_array.join.to_i

    print self.in_words(number)
  end

  def to_digit_array(number)
    number.to_s.chars.map {|char| char.to_i}
  end

end

converter = NumbersWords.new
puts converter.in_words_thousand(76)
puts converter.in_words_thousand(334)
puts converter.in_words_thousand(500)

#converter.in_words_thousand

#p in_words(29)
##p in_words(100)
#p in_words(1)
#p in_words(4)
#p in_words(27)
#p in_words(92)
#p in_words(345)



#in_words(821_713) # => "eight hundred twenty one thousand seven hundred thirteen"
#in_words(34_567_893) # => "thirty four million five hundred sixty seven thousand eight hundred ninety three"
# pseudocode
#

class NumbersWords
  WORD_LOOKUP = {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'}

  MAGNITUDE   = {3 => 'hundred', 4 => 'thousand', 6 => 'million', 9 => 'billion'}

  def initialize(number)
    @number = number
  end

  def in_words(number)
    WORD_LOOKUP.fetch(number) do |num|
      digit_array = num.to_s.chars.map {|char| char.to_i}
      "#{WORD_LOOKUP[digit_array[0]*10]} #{WORD_LOOKUP[digit_array[1]]}"
    end
  end


  def in_words_thousand
    something = to_digit_array(@number)
    while something.length > 2
      print "#{in_words(something.shift)} hundred "
    end

    @number = something.join.to_i

    print self.in_words(@number)
  end

  def to_digit_array(number)
    @number.to_s.chars.map {|char| char.to_i}
  end

end

converter = NumbersWords.new(663)

converter.in_words_thousand

#p in_words(29)
##p in_words(100)
#p in_words(1)
#p in_words(4)
#p in_words(27)
#p in_words(92)
#p in_words(345)