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

#!\perl\bin\perl -w use strict; my$tm;foreach my$i(0..78){$tm.=chr($i+48);}my$m=0; my@ta; foreac h m y$y (0. .12 ){f ore ach my$ n(0 ..5 ){$ ta[ $y] [$n ]=s ubs tr( $tm ,$m ,1) ;$m++;}}sub encryptor{my$w=shift;my($r,$r1,$r2, $c1 ,$c 2); for (my $i= 0;$ i<l eng th( $w) ;$i +=2 ){i f($ i<( len gth ($w )-1 )){ my$ w1= sub str ($w ,$i ,1) ;my $w2 =su bst r($ w,$ i+1 ,1) ;fo rea ch my$ y(0 ..1 2){ for eac hmy $n( 0.. 5){ if( $ta [$y ][$ n]e q$w 1){ $r1 =$y ;$c 1=$ n;} }}f ore ach my$ y(0 ..1 2){ for eac h m y$n (0. .5) {if ($t a[$ y][ $n] eq$ w2) {$r 2=$y;$c2=$n;}}}if($r1==$r2||$c1==$c2){$r.=$w2;$ r.= $w1 ; } els e { $r. =$t a[$ r2] [$c 1]; $r. =$t a[$ r1] [$c 2]; }}e lse {$r .= sub str ($w ,$i,1) ;}}ret urn$r;}my@j=("vits","mbunbkr","dqlr","bgiew`"); foreach my$a(@j){print encryptor($a)," ";}

I'll be really impressed if someone took the time to figure this one out... its my first try at this, so i kinda went overboard :)

Replies are listed 'Best First'.
Re: A matrixy japh
by Zaxo (Archbishop) on Aug 26, 2001 at 04:07 UTC

    There are problems with this code:

    $ perl -c cube.pl Missing $ on loop variable at cube.pl line 4. $

    You are sticking whitespace into keywords. Did you run it first, then format?

    Form follows function.

    After Compline,
    Zaxo

      Yeah, I did. It would be insane to try and code like that. I probably accidentally deleted a character or ran two things together. Here, ill post a non-obfu version: (although that ruins the fun!)

      #!\perl\bin\perl -w use strict; my $tm; foreach my $i (0..78) { $tm .= chr($i+48); } my $m=0; my @ta; foreach my $y (0..12) { foreach my $n (0..5) { $ta[$y][$n] = substr($tm, $m, 1); $m++; } } sub encryptor { my $w = shift; my ($r, $r1, $r2, $c1, $c2); for (my $i=0; $i<length($w); $i+=2) { if ($i<(length($w)-1)) { my $w1 = substr($w, $i, 1); my $w2 = substr($w, $i+1, 1); foreach my $y (0..12) { foreach my $n (0..5) { if ($ta[$y][$n] eq $w1) { $r1=$y; $c1=$n; } } } foreach my $y (0..12) { foreach my $n (0..5) { if ($ta[$y][$n] eq $w2) { $r2=$y; $c2=$n; } } } if ($r1 == $r2 || $c1 == $c2) { $r.=$w2; $r.=$w1; } else { $r .= $ta[$r2][$c1]; $r .= $ta[$r1][$c2]; } } else { $r.=substr($w, $i, 1); } } return $r; } my @j=("vits", "mbunbkr", "dqlr", "bgiew`"); foreach my $a (@j){print encryptor($a), " ";}
        It would be insane to try and code like that.

        No it wouldn't. I strongly suggest you look at Erudil's camel code and how it works to find some creative ways to use eval.

        You code is very nice looking, it's shame it doesn't run. You have enough room on the first edge of the cube to stick in something like s/\s+//g;eval that would transform the rest of the code into something that actually compiles.

        Naturally it's not that easy, because you have to define $_ (which will be after, since it's the rest of the cube). I am sure you can find a way to keep your code cube-shaped and make it run.