Class: WordsToNumberPattern

Inherits:
Object
  • Object
show all
Defined in:
lib/solvers/wordstonumberpattern.rb

Instance Method Summary collapse

Instance Method Details

#solve(question) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/solvers/wordstonumberpattern.rb', line 3

def solve(question)
  answer = nil

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

  multipliers =   {
      'thousand' => 1000, 'million' => 1000000, 'hundred' => 100
    }


  tokens = question.gsub(/[^\w\d\s]/,"").downcase.split
  if tokens.include?("digits") || tokens.include?("number")
    nums = []

    for i in (0..tokens.size)
      if numbers.include?(tokens[i]) && !multipliers.include?(tokens[i+1]) && !multipliers.include?(tokens[i+2])
        nums << numbers[tokens[i]]

      elsif numbers.include?(tokens[i]) && !multipliers.include?(tokens[i+1]) && multipliers.include?(tokens[i+2])
        temp = numbers[tokens[i]] + numbers[tokens[i+1]]
        temp = temp * multipliers[tokens[i+2]]
        tokens[i+1] = ""
        tokens[i+1] = ""
        nums << temp
      elsif numbers.include?(tokens[i]) && multipliers.include?(tokens[i+1])
        nums << (numbers[tokens[i]] * multipliers[tokens[i+1]])
      end
    end
    answer = nums.inject(:+)
  end
  answer
end