#!/usr/bin/perl # Coded by Trizen # Email: echo dHJpemVueEBnbWFpbC5jb20K | base64 -d # Website: http://trizen.go.ro my (%roman2arabic) = ('I' => '1', 'V' => '5', 'X' => '10', 'L' => '50', 'C' => '100', 'D' => '500', 'M' => '1000', ); unless (@ARGV) { # Get roman numbers from user input print "input: "; chomp(my $nr = ); push @ARGV, $nr; } { # Convert roman numbers specified # as arguments, into arabic numbers. local $\ = "\n"; print arabic1($_) foreach (@ARGV); } sub arabic1 { # Copyright (c) 2011 Trizen my $out = 0; my @arabic; push @arabic, $roman2arabic{$_} // return 0 foreach split(//, uc shift); foreach my $i (1 .. $#arabic) { if ($arabic[$i] > $arabic[$i - 1]) { if (defined $arabic[$i + 1]) { next if $arabic[$i + 1] > $arabic[$i]; } if ($arabic[$i - 1] = $arabic[$i] - $arabic[$i - 1]) { $arabic[$i] = 0; } } } $out += $_ foreach (@arabic); $out; } sub arabic2 { # Copyright (c) 1995 OZAWA Sakuro my ($last_digit, $arabic) = 1000; foreach (split(//, uc shift)) { my ($digit) = $roman2arabic{$_}; $arabic -= 2 * $last_digit if $last_digit < $digit; $arabic += ($last_digit = $digit); } $arabic; }