ate: 03/31/2005 title: spqr - convert from roman numerals author: Ralf Elfinger email: ralf at ixos dot de comments: inspired by ruby quiz #22, but this rather robust ... will not decode badformed romans as IIII, IVI, XVIIII, IL, XIXX. Now plays by rules #1 and #4 :) code: def spqr r r="/#{r.upcase}"; %w(M CDM XLC IVX).each{|d| r.sub!(/\/[#{d}]*/){|s|s=s.tr(d,'047').sub('04','3'); break unless s.sub!(/^\/((3)|0(7)|(4)0?0?0?|(0)0?0?)$|^\/$/){|t| $+?($+[0]+$1.size).chr: '0'} s+'/'}}; r.sub(/^\d+\/.+$/,'0').to_i end if ARGV.empty? puts "Usage: ruby #$0 " else ARGV.each {|r| puts "%16s := %s"%[r.upcase,spqr(r)]} end