21 lines
575 B
Text
21 lines
575 B
Text
[ 32| {get value of Roman digit on stack}
|
|
$'m= $[\% 1000\]? ~[
|
|
$'d= $[\% 500\]? ~[
|
|
$'c= $[\% 100\]? ~[
|
|
$'l= $[\% 50\]? ~[
|
|
$'x= $[\% 10\]? ~[
|
|
$'v= $[\% 5\]? ~[
|
|
$'i= $[\% 1\]? ~[
|
|
% 0
|
|
]?]?]?]?]?]?]?
|
|
]r:
|
|
|
|
0 {accumulator}
|
|
^r;! {read first Roman digit}
|
|
[^r;!$][ {read another, and as long as it is valid...}
|
|
\$@@\$@@ {copy previous and current}
|
|
\>[\_\]? {if previous smaller than current, negate previous}
|
|
@@+\ {add previous to accumulator}
|
|
]#
|
|
%+. {add final digit to accumulator and output}
|
|
10, {and a newline}
|