Roman Numerals (Arrgh!)

On Nov 11, 2009, at 11:59 AM, Benoit D. wrote:

]

You just need to manage how to save this in your String at each step.
(You can multiply a String by “X” * 3, and concatenate using << (or +=))

Give us your script when you’ll got one working :wink:

In case you have missed it from yesterday, a slightly modified original
solution was:

def roman_numeral(number)
$numerals.inject(["", number]) { |(result, number), (order, roman)|
[ result + roman * (number / order), number % order ]
}.first
end

It works with shortened numerals for 4, 9, 40, 90, 400, 900 as well.

Gennady.

Benoit D. wrote:

I didn’t miss it at all, it’s quite cool, but very not easy to find
directly
and to explain for an homework …

But I admit it’s quite a nice solution, not that hard to understand.

2009/11/11 Gennady B. [email protected]

I’m going to assume the assignment has long been completed, so here is
how I would have written the function. Not as elegant as the inject
version above, but simpler for someone new to Ruby (like myself) to
understand.

def roman_numeral(number)
result, numerals = “”, [
[1000, “M”], [900, “CM”], [500, “D”], [400, “CD”],
[100, “C”], [90, “XC”], [50, “L”], [40, “XL”],
[10, “X”], [9, “IX”], [5, “V”], [4, “IV”],
[1, “I”]
]
numerals.each do |order, roman|
result << roman * (number / order)
number %= order
end
result
end