B
Brian Tickler
First time poster here...
I realize that rubyquiz.com is no longer really active, but some of the
code there is still used by people googling for example code (roman
numeral conversion in my case for a class I am taking), and I wanted to
point out that many of the solutions listed for quiz #22 are evaluating
roman to arabic numerals incorrectly.
If you run many of the solutions, especially the ones that use this
table:
[ 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' ]
]
...and then you try to evaluate the string value XD (for example), it
will convert this string to 510. This should not happen; XD is not a
legal roman numeral, DX would be 510, and CDXC would be 490. The
problem seems to be that in roman to arabic numeral conversion, the
solutions just add the raw values together. This means that converters
using this kind of conversion will accept any combination of roman
numeral values from the table above...regardless of order.
A crazier example:
If you evaluate XIV, you get 14, by finding X and then IV in the table
above and then adding their corresponding values together.
If you put in IXIVI, it will *also* evaluate to 14 by adding IX + IV + I
and accept it as a valid roman numeral.
I don't have a solution yet, but I thought I would at least point this
out in case someone is adding a to_roman method to Integer or something
and wants it to be 100% robust.
I realize that rubyquiz.com is no longer really active, but some of the
code there is still used by people googling for example code (roman
numeral conversion in my case for a class I am taking), and I wanted to
point out that many of the solutions listed for quiz #22 are evaluating
roman to arabic numerals incorrectly.
If you run many of the solutions, especially the ones that use this
table:
[ 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' ]
]
...and then you try to evaluate the string value XD (for example), it
will convert this string to 510. This should not happen; XD is not a
legal roman numeral, DX would be 510, and CDXC would be 490. The
problem seems to be that in roman to arabic numeral conversion, the
solutions just add the raw values together. This means that converters
using this kind of conversion will accept any combination of roman
numeral values from the table above...regardless of order.
A crazier example:
If you evaluate XIV, you get 14, by finding X and then IV in the table
above and then adding their corresponding values together.
If you put in IXIVI, it will *also* evaluate to 14 by adding IX + IV + I
and accept it as a valid roman numeral.
I don't have a solution yet, but I thought I would at least point this
out in case someone is adding a to_roman method to Integer or something
and wants it to be 100% robust.