func arabic2roman(num, roman='') { static lookup = [ :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 ]; lookup.each { |pair| while (num >= pair.second) { roman += pair.first; num -= pair.second; } } return roman; } say("1990 in roman is " + arabic2roman(1990)); say("2008 in roman is " + arabic2roman(2008)); say("1666 in roman is " + arabic2roman(1666));