ROSETTA ;Rosetta PGA-TRAM Example; [ 08/04/2011 4:39 PM ]
S TESTDATA="XLII,LXIX,mi"
F I=1:1 S R=$P(TESTDATA,",",I) Q:R="" D
.W R,": ",$$ROM2DEC(R),!
Q
REDUCE(CALLBACK,LIST) ;
N (CALLBACK,LIST)
I $O(LIST(""))="" Q 0
I $O(LIST(1))="" Q LIST(1)
S A=LIST(1)
F I=2:1:$O(LIST(""),-1) D
.S B=LIST(I)
.S @("A=$$"_CALLBACK_"(A,B)")
Q A
HELPER(A,B) ;
N (A,B)
Q A+B-(A#B*2)
ROM2DEC(X) ;
N (X)
S RTOA("M")=1000,RTOA("D")=500,RTOA("C")=100,RTOA("L")=50
S RTOA("X")=10,RTOA("V")=5,RTOA("I")=1
S X=$TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
F I=1:1:$L(X) S LIST(I)=RTOA($E(X,I))
Q $$REDUCE("HELPER",.LIST)
####
>D ^ROSETTA
XLII: 42
LXIX: 69
mi: 1001
>
##
##
>W $$ROM2DEC^ROSETTA("MCMLXXXIV")
1984
>