PREVIOUS  TABLE OF CONTENTS 

The Fifth Obfuscated Perl Contest Results

Felix Gallo

In 1347, the Black Death swept across Europe, sowing the streets with the distorted bodies of the dead and driving fear-mad men to flagellate themselves with scourges in the desperate attempt to rid themselves of sin.

In 2000, The Fifth Obfuscated Perl Contest results arrived in my mailbox, with much the same effect.

72 entries, some spanning multiple categories, comprised this year's plague. Clearly, the popularity of Perl amongst insane asylum inmates is on an exponential growth curve; debate the direction of causality amongst yourselves.

As always, peruse the entries at entries.tar.gz. Attempting to decipher them can greatly increase your understanding of Perl!

THE WINNERS

Category 1: Create A Diversion
(17 deviants)
Rules: (UsesTk) ? 2048 chars : 512 chars

Nobody took this opportunity to implement Quake, which was too bad. Only two entrants went for Perl/Tk, probably because Tk is both object-oriented and longwinded about it. This category will exist in the next contest; the byte limit will be 4096 bytes; and no console graphics will be permitted.

In third place: Adam Spragg, whose nice, spare console graphics version of the skiing game was at least not another thrice-damned version of Mastermind.

In second place: Steve Lidie's Tk game, featuring the chance to destroy The Perl Journal;

and in first place, Garry Taylor's heroic reimplementation of Frogger, which was obfuscated, obviously hellish to do, and fun to boot.

Frogger in 2048 bytes.
Frogger in 2048 bytes.
evalevalq.q>trd!Uj:%L<061:%C<csnvo:%f<fsddo0:%c<cmtd:%x<xdmmnv:%I<011:%u<251:%bs<bsd`udSdbu`ofmd:%w<lnwd:%U<2:%t<L`hoVhoenv,?
odv),idhfiu<?314-,vheui<?254(:%b<%t,?B`ow`r:%b,?bnoghftsd),vheui<?%u-,idhfiu<?311(:%b,?q`bj)(:s)3-3-%u-001-%c(:s)3-081-%u-311
-%f(:s)3-001-%u-031-%f(:s)3-1-%u-34-%f(:gns)%{<1:%{=%u:%{*<71(zs)%{-01-%{*51-54-%f-%f(:|s)3-1-%u-04-cm`bj(:%b,?%bs)3-1-%u-311
(:%G<,041:v)1-%L-31-C-%x(:v)%G-%L-,021-C-%x(:%B<,91:v),31-041-,4-B-%c(:v),91-041-,74-B-%c(:%E<,%I:v)1-021-31-E-%x(:v),%I-021-,
 91-E-%x(:%K<,231:v),71-81-,31-@-%C(:v),301-81-,%L-@-%C(:v),%u-81-,211-@-%C(:%M<,%u:v),51-61-1-F-%C(:v),%L-61-,021-F-%C(:v),%u
-61-,211-F-%C(:%J<%u:v)751-41-791-[-%C(:v)401-41-441-[-%C(:v)%u-41-291-[-%C(:%b,?bsd`udNw`m)063-080-091-088-,u`fr<?G-,ghmm<?f
sddo5(:S)1(:%b,?sdqd`u)%I-]'t(:%t,?choe)&=Envo?&<?rtczS),0(:'V:%b,?%w)G-1-31(hg)%x=081(:|(:%t,?choe)&=Tq?&<?rtczS)0(:%b,?%w)G
-1-,31(:|(:%t,?choe)&=Mdgu?&<?rtcz'V:%b,?%w)G-,31-1(hg)%y?31(:|(:%t,?choe)&=Shfiu?&<?rtcz'V:%b,?%w)G-31-1(hg)%Y=%u,31(:|(:L`h
oMnnq)(:dyhu:rtc!vz%b,?%bs)%^Z1\-%^Z0\-%^Z3\-%^Z0\*8-,u`fr<?%^Z2\-,ghmm<?%^Z5\(:|rtc!tzhg)%G?%u(z%G*<%L:%d<,%G:%G<,%L:|dmrdz%
G*<01:%d<01:|%b,?%w)C-%d-1(:hg)%B?%u(z%B*<%I:%d<,%B:%B<,%I:|dmrdz%B*<01:%d<01:|%b,?%w)B-%d-1(:hg)%E?%u(z%E*<031:%d<,%E:%E<,03
1:|dmrdz%E*<01:%d<01:|%b,?%w)E-%d-1(:hg)%K?%u(z%K*<229:%d<,%K:%K<,251:|dmrdz%K*<7:%d<7:|%b,?%w)@-%d-1(:hg)%M?%u(z%M*<271:%d<,
%M:%M<,271:|dmrdz%M*<9:%d<9:|%b,?%w)F-%d-1(:hg)%J=,%u(z%J,<%u:%d<,%J:%J<%u:|dmrdz%J,<7:%d<,7:|%b,?%w)[-%d-1(:'V:hg)%x=081(zhg
))%x?031(}})%x=001((zAn<%b,?ghoe)nwdsm`qqhof-%y-%x-%Y-%X(:hg)%x?031(zhg)%"n(z'R:||dmrdzhg)%x?58(zhg)%"n?0(z%n<7:%n*<3hg)%x=81
(:%n<,7hg)%x=61(:%b,?%w)G-%n-1(:|dmrdz'R:||dmrdzhg)%"n?0(z'R:|dmrdzS)00(:%U**:%O**:'R:v)%y-%x-%Y-Q-%f(:%b,?edmdud)&Q&(hg))%O$
4((:||||rmddq)4(''Uj;;dyhu)1(hg)%U=0(:||rtc!Rz%U,,:qshou#]`#:%b,?%w)G-063,%y-081,%x(:|rtc!SzP)cm`bj(:%R*<%^Z1\:P)sde(: |rtc!P
z%b,?bsd`udUdyu)%L-9,udyu<?%R/1-,ghmm<?%^Z1\(:|rtc!sz%b,?%bs)%^Z1\-%^Z0\-%^Z3\-%^Z2\-,ghmm<?%^Z5\-,ntumhod<?%^Z4\(:|rtc!Vz)%y
-%x-%Y-%X(<%b,?bnnser)G(:|>^chr($$/$$)x2016.

Category 2: World Wide Wasteland (6 malcontents) Rules: CGI OK; 512 chars

As the old programming adage goes, "Perl is the best language for managing a hardcore porn web site." Oddly, an entrant named Mark Ryan took this to heart, submitting a porn ad generator...that was, unfortunately, clearly written and well-commented. On some level this is the most obfuscated entry ever received.

But, back to actual prizes. In third place: the enigmatically named ernimril and erkkah bring their combination fractal color generator/web browser load tester to the party. Don't type 9 into the little box.

In second place: Jetro Lauha's very pretty (and similar) math-based page-colorer. Most of the obfuscation is in the math, but the result is a cool graphics hack.

A sine plasma color generator in 503 bytes.
A sine plasma color generator in 503 bytes.

Sierpinski fractals in 504 bytes.
Sierpinski fractals in 504 bytes.

In first place: Nemo, a redneck cracker from Georgia (with contestants like these, we don't need to make stuff up), and his or her elegant sliding puzzle CGI script. Clever!

An HTML sliding tile puzzle in 512 bytes.
An HTML sliding tile puzzle in 512 bytes.
$0=s#.*[/\\]##g;push@ARGV,"-h--Te_-JPerourl";$_=shift;@4=@1=@3=@2=@[=split(//);/
_/g;$;=pos;$$=sub{eval"(\$$\\[$;\],\$$\\[$\"+$;\])=(\$$\\[$\"+$;\],\$$\\[$;\]);\
@\[\[$\"+$;\].=join\"\",\@$\ ;\$\\++"};$\++;$;--;$"--;$;%4>0&&&$$;$"+=2;$;%4<3&&
&$$;$"-=5;$;>3&&&$$;$"+=8;$;<12&&&$$;$\--;for(@[){s}(.)(.+)}<TD><a href=\"$0?$2\
">$1</a>}g;s@^(.)$@<TD>$1@g;s]>_]> ]g}for(0..3){@[[$_<<2]="<TR>".@[[$_<<2]};$$=l
ocaltime;print "Content-Type: text/html\n\n<html><body><table border=2>",@[,"<TD
>nal</table>$$<p></body></html>

Category 3: Inner Beauty (12 beauty queens) Rules: 512 chars

This category was for the most striking entry in the smallest size. It was very difficult to judge, partly because of, as always, perennial deranged foreigner Mssr. Bruhat. His "main" entry doesn't qualify — but his "helper" entries are each fairly sweet.

The judges were divided; but in the end the third place prize is a tie between each of Bruhat's four complying entries. Be sure to check them out for why.

The second place prize goes to Benjamin Young, whose automatic obfuscating machine escaped deobfuscation by the automatic deobfuscation machine through the systematic abuse of punctuation. The output of his program is even good enough to qualify!

An animated ASCII timepiece in 511 bytes.
An animated ASCII timepiece in 511 bytes.
#!/usr/bin/perl
$;="@{'`|;{'^'!.|-'}";$.++;$.++;$.++;$_="(.)?";/((?{$_.=$_}).)+$/;@_='~!@#$%^&*(
)_+`-=[]\\{}|;\':",./<>? '=~/$_/;@_ _=$;=~/$_/;$_="(.)*?";/((?{$_.=$_}).)+$/;$Z-=
$Z;"$.$."-$Z;/((?{$_ _[$z]&&!("${_[$x]}"^"${_[$y]}"^"${_ _[$z]}"^"$Z")&&($a.=$_[$x
],$b.=$_[$y],$z++);$x++;$y+=!($x%="$.$.");$y%="$.$.";}).)+/;$_="^"^"^";$_ _=".>.\
'$_ _ _$b')".".('!\@/\"'^'}.')".']}`';

print;

The most beauteous entry was formulated by Christopher Gutteridge, whose ASCII timepiece sprung a few gears on cygwin32 but was good enough under Linux to win through.

Category 4: The Old Standby (1 << 5 inmates) Rules: must output "The Perl Journal"; 256 chars

Although Mssr. Bruhat's combination PostScript/Perl (yes, really) entry was The Best Ever, it was also many, many more bytes than permitted. Alas. In fact, many deeply skilled entrants went over; we apologize, and next year, the byte limit will be 1024 bytes.

Third place: Matthew Smith, whose evolving string was cleverly done.

Second place: Mark-Jason Dominus, who sent characters spewing every which way through multiple twisty little passages in the kernel, all alike. As solid a first entry as one might expect from a golden-age-of-talk.bizarre refugee.

@P=split//,".URRUUxR";@d=split//,"\nlanruoJ lreP ehT";sub p{@p{"r$p","u$p"}=(P,P
);pipe"r$p","u$p";$p++;($q*=2)+=$f=!fork;map{$P=$P[$f|6&ord$p{$_}];$p{$_}=/$P/i?
$P:close$_}%p}p;p;p;p;p;map$p{$_}=~/[P.]/&&close$_,%p;wait
until$?;map/r/&&<$_>, %p;print$d[$q]

First place: there's always someone who tries something totally beyond any understanding. That someone was Les Peters, who used a rendition of rotated 90 degree Mayan numerals to extract the required text. Yes, indeed. For this effort above and beyond the tethers of sanity, Les wins the hated and feared BEST OF SHOW award this year. Commiserations and sorrow go out to Les, his coworkers, and his family.

#:: ::-| ::-| .-. :||-:: 0-| .-| ::||-| .:|-. :||
open(Q,$0);while(<Q>){if(/^#(.*)$/){for(split('-',$1)){$q=0;for(split){s/\|
/:.:/xg;s/:/../g;$Q=$_?length:$_;$q+=$q?$Q:$Q*20;}print chr($q);}}}print"\n";
#.: ::||-| .||-| :|||-| ::||-| ||-:: :|||-| .:|

That's all for this year! We go now to clean our hands obsessively and rest up for next year's onslaught....

The Obfuscated Perl Contest Judges

_ _END_ _


Felix Gallo (fsg@cumulonimbus.com), a hacker, films, codes, plays Frank and Riff, consults, and surfs in Los Angeles.
PREVIOUS  TABLE OF CONTENTS