Just remembered I did a Rosetta code node, implementing the same PGA-TRAM algorithm in Perl, Python, Haskell and C++.
In Perl I chose simple lexical scoping to data-hide the rtoa hash:
{
my %rtoa = ( M=>1000, D=>500, C=>100, L=>50, X=>10, V=>5, I=>1 );
sub roman_to_dec {
reduce { $a+$b-$a%$b*2 } map { $rtoa{$_} } split//, uc(shift)
}
}
Not wanting to get a headache from understanding Python scoping, I chose to data-hide the rtoa hash by making it a default function argument instead:
def roman_to_dec(r, __rtoa = dict(M=1000, D=500, C=100, L=50, X=10, V=
+5, I=1) ):
return reduce( lambda t,n: t+n-t%n*2, (__rtoa[c] for c in r.upper())
+ )
Suggestions for alternative/better ways to implement this algorithm in Perl and Python are still welcome (11 years later! :).
|