16 lines
580 B
Text
16 lines
580 B
Text
var romans = L(
|
|
L("M", 1000), L("CM", 900), L("D", 500), L("CD", 400), L("C", 100),
|
|
L("XC", 90), L("L", 50), L("XL", 40), L("X", 10), L("IX", 9),
|
|
L("V", 5), L("IV", 4), L("I", 1));
|
|
fcn toArabic(romanNumber){ // romanNumber needs to be upper case
|
|
if (not RegExp("^[CDILMVX]+$").matches(romanNumber))
|
|
throw(Exception.ValueError("Not a Roman number: %s".fmt(romanNumber)));
|
|
reg value = 0;
|
|
foreach R,N in (romans){
|
|
while (0 == romanNumber.find(R)){
|
|
value += N;
|
|
romanNumber = romanNumber[R.len(),*];
|
|
}
|
|
}
|
|
return(value);
|
|
}
|