Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def parse_roman(roman)
- roman_numerals = [ ['M', 1000], ['CM', 900], ['D', 500], ['CD', 400], ['C', 100], ['XC', 90],
- ['L', 50], ['XL', 40], ['X', 10], ['IX', 9], ['V', 5], ['IV', 4], ['I', 1] ]
- roman = roman.upcase
- result = 0
- roman_numerals.each do |sym, val|
- while roman.sub!(/^#{sym}/, "")
- result += val
- end
- end
- result
- end
- # "CM" = 900, which we get by "M" (1000) + "C" (100) + "CM" (-200)
- # much easier code than otherwise
- def parse_roman_2(roman)
- roman_numerals = [
- ['M', 1000], ['CM', -200],
- ['D', 500], ['CD', -200],
- ['C', 100], ['XC', -20],
- ['L', 50], ['XL', -20],
- ['X', 10], ['IX', -2],
- ['V', 5], ['IV', -2],
- ['I', 1]
- ]
- roman = roman.upcase
- roman_numerals.map{|sym, val| val * roman.scan(sym).size}.inject(0, &:+)
- end
- ["MCMXC", "MMVIII", "MDCLXVI"].each {|r| puts "%8s :%5d :%5d " % [r, parse_roman(r), parse_roman_2(r)]}
Advertisement
Add Comment
Please, Sign In to add comment