Class: NumbersInWords::NumberGroup

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/numbers_in_words/number_group.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(number) ⇒ NumberGroup

Returns a new instance of NumberGroup.



12
13
14
# File 'lib/numbers_in_words/number_group.rb', line 12

def initialize(number)
  @number = number
end

Instance Attribute Details

#numberObject

Returns the value of attribute number.



6
7
8
# File 'lib/numbers_in_words/number_group.rb', line 6

def number
  @number
end

Class Method Details

.groups_of(number, size) ⇒ Object



8
9
10
# File 'lib/numbers_in_words/number_group.rb', line 8

def self.groups_of(number, size)
  new(number).groups(size)
end

Instance Method Details

#groups(size) ⇒ Object

split into groups this gives us 1234567 => 123 456 7 so we need to reverse first in stages



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/numbers_in_words/number_group.rb', line 19

def groups(size)
  # 1234567   => %w(765 432 1)
  @array = in_groups_of(@number.to_s.reverse.split(''), size)
  # %w(765 432 1) => %w(1 432 765)
  @array.reverse!

  # %w(1 432 765) => [1, 234, 567]
  @array.map! { |group| group.reverse.join('').to_i }
  @array.reverse! # put in ascending order of power of ten

  power = 0

  # [1, 234, 567] => {6 => 1, 3 => 234, 0 => 567}
  @array.each_with_object({}) do |digits, o|
    o[power] = digits
    power += size
  end
end

#split_decimalsObject



38
39
40
41
42
43
44
# File 'lib/numbers_in_words/number_group.rb', line 38

def split_decimals
  return unless @number.is_a? Float

  int, decimal = @number.to_s.split '.'

  [int.to_i, decimal.split(//).map(&:to_i)]
end

#split_googolsObject



46
47
48
49
50
# File 'lib/numbers_in_words/number_group.rb', line 46

def split_googols
  googols   = @number.to_s[0..-LENGTH_OF_GOOGOL].to_i
  remainder = @number.to_s[(1 - LENGTH_OF_GOOGOL)..-1].to_i
  [googols, remainder]
end