Module: Nuggets::Integer::RomanMixin

Included in:
Integer
Defined in:
lib/nuggets/integer/roman_mixin.rb

Constant Summary collapse

NUMERAL =
{
  1000 => 'M',
  500  => 'D',
  100  => 'C',
  50   => 'L',
  10   => 'X',
  5    => 'V',
  1    => 'I'
}
COMPACT =
NUMERAL.values.each_cons(3).to_a.values_at(0, 2, 4).flat_map { |*a, b|
  a.push(nil).each_cons(2).map { |x, y| [/#{y}#{b}{4}/, "#{b}#{x}"] }
}

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.to_roman(int, num = '') ⇒ Object

call-seq:

to_roman(int) => aString

Converts positive integer int to Roman numerals.



49
50
51
52
53
54
55
56
57
# File 'lib/nuggets/integer/roman_mixin.rb', line 49

def self.to_roman(int, num = '')
  NUMERAL.each { |key, val|
    until int < key; int -= key; num << val; end
  }

  COMPACT.each { |key, val| num.gsub!(key, val) }

  num
end

Instance Method Details

#to_romanObject

call-seq:

int.to_roman => aString

Converts int to Roman numerals.



63
64
65
66
# File 'lib/nuggets/integer/roman_mixin.rb', line 63

def to_roman
  self == 0 ? 'N' : self < 0 ?
    RomanMixin.to_roman(-self, '-') : RomanMixin.to_roman(self)
end