Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?


by goibhniu (Hermit)
on Aug 18, 2007 at 09:28 UTC ( #633452=obfuscated: print w/replies, xml ) Need Help??

Ok, this is my first japh. I haven't got it down to four lines, but 5 is almost 4 for really small values of 5.

If you don't want clues, don't look up the ACA. I put it in the title because I wanted it to be more personal than "My first JAPH", but I didn't want to put too much in the title for those who have fun with de-obfuscating.

@ca=(sub{@kp=split(//,shift);$c=shift;$p2{' '}=' ';$C2{' '}=' ';foreac +h(@kp, 'a'..'z'){if(!exists $p2{$_}){$k=chr(ord('A')+(($a++)+$c)%26);$p2{$_}= +$k; $C2{$k}=$_;}}},sub{$t=shift;$h=shift;foreach(split(//,$t)){$r=$r.($$h{ +$_});} return $r;});$ca[0]->('thequickbrownfoxjumpsoverthelazydogs',10);print + $ca[1]->('ZOCK FWUKLMT BMTE LFQR',\%C2)."\n";

I humbly seek wisdom.

Replies are listed 'Best First'.
by eyepopslikeamosquito (Chancellor) on Aug 18, 2007 at 12:07 UTC

    Without understanding what your code does, I whittled 100 strokes off its length by performing some routine golfic shortenings:

    @z=(sub{$c=pop;$x{$"}=$C{$"}=$";$x{$_}or$x{$C{$k}=$_}=$k=chr ord(A)+($a+++$c)%26for pop=~/./g,a..z},sub{$h=pop;$r.=$$h{$_}for pop=~/./g;$r});$z[0]->(thequickbrownfoxjumpsoverthelazydogs,10); print$z[1]->('ZOCK FWUKLMT BMTE LFQR',\%C).$/
    Fits in a 4-line sig now. :-)

    Update: whittled a further 10 strokes.

      Wonderful. Is there a "routine golf shortenings" node?

      I humbly seek wisdom.

        <shameless plug>
        There's a number of tips and techniques listed in Perl Golf 101 as well as in the comments to that node.
        </shameless plug>

        s**lil*; $*=join'',sort split q**; s;.*;grr; &&s+(.(.)).+$2$1+; $; = qq-$_-;s,.*,ahc,;$,.=chop for split q,,,reverse;print for($,,$;,$*,$/)
Re: ACA JAPH (hints)
by goibhniu (Hermit) on Aug 22, 2007 at 14:08 UTC

    My first clue is to explain ACA in the post. It's probably not very helpful; just a nudge in a direction. Here's the link:

    My next clue is somethign most here could do themselves, but I just learned it this week (from reading PerlMonks!). Here's the perl -MO=Deparse output (this is without eyepopslikeamosquito's reduction):

    My next clue is to comment my variables. This is a big leap and probably a give away. I wish I had better intermediate clues for ya.

    # @ca - code array # @kp - key phrase # $c - caesar shift (big hint here) # %p2 - short for p2C - plaintext to CIPHERTEXT hash # %C2 - short for C2p - CIPHERTEXT to plaintext hash # $k - key (one letter of the key alphabet) # $t - text # $h - hash reference # $r - result

    ok, here's what I'm doing:

    I humbly seek wisdom.