Skip to main content

Solution 10: Roman Numeral to Integer

Given a string containing a Roman numeral between I and MMMCMXCIX, return an integer of the value it represents.

def roman_to_int(s)
numeral = s
int = 0

while (numeral.length > 0)
(number, numeral) = get_int_from_string(numeral)
int += number
end

int
end

def get_int_from_string(numeral)
numerals = ['I', 'V', 'X', 'L', 'C', 'D', 'M']
examine = numeral.slice(0,2)
take_two = false
first = numerals.index examine[0]
second = numerals.index examine[1]
if (!second.nil? && first < second)
if examine[0] == 'C' && examine[1] == 'M'
number = 900
elsif examine[0] == 'C' && examine[1] == 'D'
number = 400
elsif examine[0] == 'X' && examine[1] == 'C'
number = 90
elsif examine[0] == 'X' && examine[1] == 'L'
number = 40
elsif examine[0] == 'I' && examine[1] == 'X'
number = 9
elsif examine[0] == 'I' && examine[1] == 'V'
number = 4
end
take_two = true
elsif examine[0] == 'M'
number = 1000
elsif examine[0] == 'D'
number = 500
elsif examine[0] == 'C'
number = 100
elsif examine[0] == 'L'
number = 50
elsif examine[0] == 'X'
number = 10
elsif examine[0] == 'V'
number = 5
elsif examine[0] == 'I'
number = 1
else
number = 0
end

string = take_two ? numeral.slice(2..) : numeral.slice(1..)

[number, string]
end