29 lines
607 B
Text
29 lines
607 B
Text
get "libhdr"
|
|
|
|
let roman(s) = valof
|
|
$( let digit(ch) = valof
|
|
$( let ds = table 'm','d','c','l','x','v','i'
|
|
let vs = table 1000,500,100,50,10,5,1
|
|
for i=0 to 6
|
|
if ds!i=(ch|32) then resultis vs!i
|
|
resultis 0
|
|
$)
|
|
let acc = 0
|
|
for i=1 to s%0
|
|
$( let d = digit(s%i)
|
|
if d=0 then resultis 0
|
|
test i<s%0 & d<digit(s%(i+1))
|
|
do acc := acc-d
|
|
or acc := acc+d
|
|
$)
|
|
resultis acc
|
|
$)
|
|
|
|
let show(s) be writef("%S: %N*N", s, roman(s))
|
|
|
|
let start() be
|
|
$( show("MCMXC")
|
|
show("MDCLXVI")
|
|
show("MMVII")
|
|
show("MMXXI")
|
|
$)
|