Skip to content

Instantly share code, notes, and snippets.

@dgamboa
Created October 5, 2012 03:44
Show Gist options
  • Select an option

  • Save dgamboa/3837950 to your computer and use it in GitHub Desktop.

Select an option

Save dgamboa/3837950 to your computer and use it in GitHub Desktop.
### Ancient Roman Numerals
def to_roman(integer, numeral="")
return numeral if integer == 0
if integer/1000 >= 1
numeral << 'M' * ( integer/1000 )
remainder = integer % 1000
elsif integer/500 >= 1
numeral << 'D' * ( integer/500 )
remainder = integer % 100
elsif integer/100 >= 1
numeral << 'C' * ( integer/100 )
remainder = integer % 100
elsif integer/50 >= 1
numeral << 'L' * ( integer/50 )
remainder = integer % 50
elsif integer/10 >= 1
numeral << 'X' * ( integer/10 )
remainder = integer % 10
elsif integer/5 >= 1
numeral << 'V' * ( integer/5 )
remainder = integer % 5
else
numeral << 'I' * ( integer )
remainder = 0
end
to_roman(remainder,numeral)
end
### Modern Roman Numerals
def to_roman_modern(integer, numeral="")
return numeral if integer == 0
if integer/1000 >= 1
numeral << 'M' * ( integer/1000 )
remainder = integer%1000
elsif integer/500 >= 1
integer/900 == 1 ? numeral << 'CM' : numeral << 'D' * ( integer/500 )
integer/900 == 1 ? remainder = integer%900 : remainder = integer%500
elsif integer/100 >= 1
integer/100 > 3 ? numeral << 'CD' : numeral << 'C' * ( integer/100 )
remainder = integer%100
elsif integer/50 >= 1
integer/90 == 1 ? numeral << 'XC' : numeral << 'L' * ( integer/50 )
integer/90 == 1 ? remainder = integer%90 : remainder = integer%50
elsif integer/10 >= 1
integer/10 > 3 ? numeral << 'XL' : numeral << 'X' * ( integer/10 )
remainder = integer % 10
elsif integer/5 >= 1
integer/9 == 1 ? numeral << 'IX' : numeral << 'V' * ( integer/5 )
integer/9 == 1 ? remainder = 0 : remainder = integer%5
else
integer > 3 ? numeral << 'IV' : numeral << 'I' * ( integer )
remainder = 0
end
to_roman_modern(remainder,numeral)
end
puts to_roman_modern(49)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment