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
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
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 |