Module: ToChitanda::Kansuuji

Extended by:
Kansuuji
Included in:
Kansuuji
Defined in:
lib/to_chitanda/kansuuji.rb

Constant Summary collapse

KANJI_NUMBERS =
%w(         )
LOWER_RANKS =
[nil] + %w(  )
UPPER_RANKS =
[nil] + %w(  )
MAX_NUMBER =
1_0000_0000_0000_0000

Instance Method Summary collapse

Instance Method Details

#kansuuji(number) ⇒ Object

Raises:

  • (ArgumentError)


12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/to_chitanda/kansuuji.rb', line 12

def kansuuji(number)
  raise ArgumentError, "can't calculate negative number" if number < 0
  raise ArgumentError, "can't calculate gte #{MAX_NUMBER}" if number >= MAX_NUMBER
  return KANJI_NUMBERS[0] if number == 0

  ranks   = UPPER_RANKS.dup
  results = []

  while number > 0
    number, lower = number.divmod(10000)
    results << "#{kansuuji_lower(lower, ranks.shift)}"
  end

  results.reverse.join
end