Class: Integer

Inherits:
Object
  • Object
show all
Defined in:
src/ruby/include/hack.rb

Overview

Constant Summary collapse

@@values =
{
  1=>"I",
  4=>"IV",
  5=>"V",
  9=>"IX",
  10=>"X",
  40=>"XL",
  50=>"L",
  90=>"XC",
  100=>"C",
  400=>"CD",
  500=>"D",
  900=>"CM",
  1000=>"M"
}

Instance Method Summary collapse

Instance Method Details

#next_lower_key(integer) ⇒ Object



52
53
54
55
56
# File 'src/ruby/include/hack.rb', line 52

def next_lower_key(integer)
  arabics = @@values.keys
  next_lower_index = (arabics.push(integer).sort.index(integer))-1
  arabics[next_lower_index]
end

#to_romanObject



37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'src/ruby/include/hack.rb', line 37

def to_roman
  integer = self
  roman = ""

  while integer > 0
    if @@values[integer]
      roman += @@values[integer]
      return roman
    end

    roman += @@values[next_lower_key(integer)] # increment the roman numeral string here
    integer -= next_lower_key(integer) # decrement the arabic integer here
  end
end

#to_roman_descendingObject

this one requires numeral-arabic pairs in descending order, i.e. 1000=>“M” on down



23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'src/ruby/include/hack.rb', line 23

def to_roman_descending #this one requires numeral-arabic pairs in descending order, i.e. 1000=>"M" on down
  return 0 if self == 0

  roman = ""
  integer = self
  @@values.each do |k,v|
    until integer < k
      roman << v
      integer -= k
    end
  end
  roman
end