21 lines
346 B
Text
21 lines
346 B
Text
|
|
procedure unroman(s) #: convert Roman numeral to integer
|
||
|
|
local nbr,lastVal,val
|
||
|
|
|
||
|
|
nbr := lastVal := 0
|
||
|
|
s ? {
|
||
|
|
while val := case map(move(1)) of {
|
||
|
|
"m": 1000
|
||
|
|
"d": 500
|
||
|
|
"c": 100
|
||
|
|
"l": 50
|
||
|
|
"x": 10
|
||
|
|
"v": 5
|
||
|
|
"i": 1
|
||
|
|
} do {
|
||
|
|
nbr +:= if val <= lastVal then val else val - 2 * lastVal
|
||
|
|
lastVal := val
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return nbr
|
||
|
|
end
|