s!.!y$IVCXL426(-:$XLMCDIVX$dfor$$_.=5x$&*8%29628
####
s!.!y$IVCXL91-80$XLMCDXVIII$dfor$$_.=4x$&%1859^7
##
##
use strict;
use Roman;
sub ton1 { my $t = shift; my $s;
($s.=4x$_%1859^7)=~y/IVCXL91-80/XLMCDXVIII/d
for $t=~/./g; return $s }
sub ton2 { my $t = shift; my $s;
($s.=5x$_*8%29628)=~y/IVCXL426(-:/XLMCDIVX/d
for $t=~/./g; return $s }
sub pmo1 { my $t = shift; my $s;
($s.="32e$_"%72726)=~y/CLXVI60-9/MDCLXVIX/d
for $t=~/./g; return $s }
sub pmo2 { my $t = shift; my $s;
($s.="57e$_"%474976)=~y/CLXVI0-9/MDCLXIXV/d
for $t=~/./g; return $s }
for my $i (1..3999) {
my $r = uc roman($i);
my $t1 = ton1($i);
my $t2 = ton2($i);
my $p1 = pmo1($i);
my $p2 = pmo2($i);
print "$i: $r\n";
$r eq $t1 or die "t1: expected '$r' got '$t1'\n";
$r eq $t2 or die "t2: expected '$r' got '$t2'\n";
$r eq $p1 or die "p1: expected '$r' got '$p1'\n";
$r eq $p2 or die "p2: expected '$r' got '$p2'\n";
}
print "all tests successful\n";