http://www.perlmonks.org?node_id=1087950


in reply to The 10**21 Problem (Part I)

You can easily gain one character on the Perl one:
sub u {IXCMVLD=~$_;"1E@-"%9995} sub i {XCMVLD=~$_;"1E@+"%9995} print $_, v9, u, v9, i, $/ for qw(M D C L X V I);
Output:
M 1000 1000 D 500 500 C 100 100 L 50 50 X 10 10 V 5 5 I 1 1

Replies are listed 'Best First'.
Re^2: The 10**21 Problem (Part I)
by eyepopslikeamosquito (Chancellor) on May 30, 2014 at 23:49 UTC

    Thanks Grimy.

    By the way, the PHP md5 solution works in Perl too since these two languages have essentially the same bitwise string operators:

    use Digest::MD5 qw(md5_hex); sub r {uppp&md5_hex$_.PQcUv} print "$_: ", 0+r(), "\n" for (qw(I V X L C D M));

    I've updated the Perl summary of shortest solutions in the root node like so:

    VLD=~$_*5+IXCM=~$_."E@-" # Perl 10**(7&5045e8/ord)%2857 # Perl (64-bit) IXCMVLD=~$_;"1E@-"%9995 # Perl XCMVLD=~$_;"1E@+"%9995 # Perl (Grimy improvement) uppp&md5_hex$_.PQcUv # Perl (needs Digest::MD5 module)

    As you can see, if Perl had a md5 built-in function, this would be the shortest Perl solution -- even with a ridiculously long md5_hex function name!

    Update: for full details on how I happened to find this md5 solution, see Re^2: The golf course looks great, my swing feels good, I like my chances (Part III).