From: Dave Burt Date: 2005-03-07T23:04:43+09:00 Subject: Re: [QUIZ] Roman Numerals (#22) Hello mailing list. This has already been posted on Usenet, sorry for the duplication. (The gateway seems to be one-way at the moment.) Dave ----- Hi, My solution is available here: http://www.dave.burt.id.au/ruby/roman_numerals.rb It can be used as a library (it pollutes String and Integer :) or as required from the command line, filtering integers to roman numeral strings and vice-versa. An outline: # Contains methods to convert integers to roman numeral strings and vice-versa. module RomanNumerals # Maps roman numeral digits to their integer values DIGITS = { # The largest integer representable as a roman numerable by this module MAX = 3999 # Stolen from O'Reilly's Perl Cookbook 6.23. Regular Expression Grabbag REGEXP = /^M*(D?C{0,3}|C[DM])(L?X{0,3}|X[LC])(V?I{0,3}|I[VX])$/i # Maps some integers to their roman numeral values @@digits_lookup = DIGITS.inject({ # Converts +int+ to a roman numeral def self.from_integer(int) # main loop: @@digits_lookup.keys.sort.reverse.each do |digit_value| while remainder >= digit_value # Converts +roman_string+, a roman numeral, to an integer def self.to_integer(roman_string) # main loop: roman_string.to_s.upcase.split(//).reverse.inject(0) do |memo, digit| # Returns true iif +string+ is a roman numeral. def self.is_roman_numeral?(string) class String # Considers string a roman numeral numeral, # and converts it to the corresponding integer. def to_i_roman # Returns true iif the subject is a roman numeral. def is_roman_numeral? class Integer # Converts this integer to a roman numeral. def to_s_roman # Processes ARGF as per Quiz requirement - converts numbers to roman numerals and vice versa if __FILE__ == $0 Cheers, Dave