Module: NumeriRomani

Defined in:
lib/numeri_romani.rb,
lib/numeri_romani/digits.rb,
lib/numeri_romani/version.rb

Constant Summary collapse

DIGITS =
{
  'M'  => 1_000,
  'CM' => 900,
  'D'  => 500,
  'CD' => 400,
  'C'  => 100,
  'XC' => 90,
  'L'  => 50,
  'XL' => 40,
  'X'  => 10,
  'IX' => 9,
  'V'  => 5,
  'IV' => 4,
  'I'  => 1
}.freeze
VERSION =
'0.1.0'

Class Method Summary collapse

Class Method Details

.to_decimal(roman_number) ⇒ Object

Raises:

  • (ArgumentError)


14
15
16
17
# File 'lib/numeri_romani.rb', line 14

def to_decimal(roman_number)
  raise ArgumentError unless roman_number.match?(/^(M{0,3})(D?C{0,3}|C[DM])(L?X{0,3}|X[LC])(V?I{0,3}|I[VX])$/)
  roman_number.scan(/#{DIGITS.keys.join('|')}/).sum { |let| DIGITS[let] }
end

.to_roman(decimal_number) ⇒ Object

Raises:

  • (ArgumentError)


6
7
8
9
10
11
12
# File 'lib/numeri_romani.rb', line 6

def to_roman(decimal_number)
  raise ArgumentError unless decimal_number.between?(1, 3_999)
  DIGITS.map do |letter, value|
    count, decimal_number = decimal_number.divmod(value)
    [letter * count]
  end.join
end