PREVIOUS  TABLE OF CONTENTS 

The Fifth Annual Obfuscated Perl Contest

Nathan Torkington

Twelve times the priest's hand rises and falls, and twelve times the knife takes life from the white-clad sacrifice. Moonlight spills over the scene like the virgin's blood over the altar, and your heart races. For you are next.

The priest turns to you, as the robed assistants carry away the last participant. Beneath the hood you can see only the priest's sinister mouth, curved into a bitter smile. The crowd's chanting increases in strength, and you take two paces forward.

"Have you an offering for L'rep Evif T'niop Xis, most holy giver of time and deliverer of all that is good?" The priest's gravelly voice, eerily magnified by the stone platform and marble altar, makes your chest resonate and you feel the ball of fear in the pit of your stomach.

"Yes," you say.

"Then step forward and deliver your offering to our most bloody god."

You take another two paces forward, until you are at the altar. You can see the last supplicant's blood still dripping, slowly, from the sides. You clear your throat and recite:

( $ ,, $ ")=("a".."z")[0,-1]; print "sh", $ ","m";;";;"

The crowd gasps, breaking off their chant. The priest does not say anything, silently moving his lips and frowning. The only noise that can be heard is the sound of blood drip drip dripping onto the stone platform. All are motionless, then...

The priest gives a signal and cries: "Too simple! You're indexing twice into the alphabet, and then printing three strings separated by the now-meaningful $,". You feel the hands of the altar boys on your shoulders and know that all is lost.

Is this your fate, or will you defeat the high priests? Do you have what it takes to construct code most obfuscated? The doors to the Fifth Annual Obfuscated Perl Contest are open. The judges are straining at their straitjackets, and their medication has been boosted in anticipation of the finer degrees of psychosis required to decipher truly obfuscated code.

This year there are four categories. No external files may be used other than the Perl/Tk module for category 1 or the CGI module for category 2.

  1. Create a Diversion

    Write a game in 512 characters or less, or a video game in 2048 characters or less if you use Perl/Tk.

  2. World Wide Wasteland

    Write a program that creates a web page most foul. You may use the CGI module bundled with Perl. The size limit is 512 characters.

  3. Inner Beauty

    The program with the highest utility * prettiness / size wins. Maximum 512 characters.

  4. The Old Standby

Print "The Perl Journal" in 256 characters or less.

You can find examples of previous winning entries on the TPJ web site, but as an example, here is the winner of category 4 from last year: Keith Winstein's optical character recognition engine.

#!/usr/bin/perl -l

print ocr(<<TPJ);
 #  # # ## ##  ## ##  #    #  #  # # ##  #  #  #  #
### # # #  # # #  # # #    # # # # # # # ## # # # #
 #  ### ## ##  ## ##  #    # # # # # ##  # ## ### #
 #  # # #  #   #  # # #  # # # # # # # # #  # # # #
 #  # # ## #   ## # # ## ###  #  ### # # #  # # # ##
TPJ

sub ocr{@{$-[$@++]}=split$,for(split'\n',shift);for$@(0..4){for(0..51){++$_{$_
 }if($-[$@][$_]=~$")}}@&=(-1);for(sort{$a<=>$b}keys%_){push@&,$_ if($_{$_}>4)
  }push@&,52;for$@(0..13){@{$|[$@][$_]}=@{$-[$_]}[$&[$@]+1..$&[$@+1]-1]for(0..
   4)}for(@|){**=$_;$w=@{$*[$^=$$=0]}-1;for$@(0..4){for(1..$w){$^++if$*[$@][$_
    ]ne$*[$@][$_-1]}}for(0..$w){for$@(1..4){$$++ if$*[$@][$_]ne$*[$@-1][$_]}}
     for(0..20){push@},chr$_+65if(7*(8,4,2,9,2,3,7,8,1,$@,5,4,9,10,10,6,3,8,4,
      8,8)[$_]+(5,8,3,3,4,2,1,2,8,2,7,1,5,4,6,$@,3,6,8,4,1)[$_]==7*$^+$$)}}@}} 

All entries must be written in Perl, and will be tested under Perl 5.6 with either Windows 98 or a Unix variant, whichever operating system the judges happen to be using at the time. The system will have at least 16 megabytes of memory and 16 megabytes of disk space; there are no other warranties, express or implied.

Your writings belong to you, but you provide TPJ with the right to duplicate, quote, edit for style, and disseminate them freely upon an unsuspecting world.

Submissions must be received by August 15, 2000, and should be sent to contest@tpj.com as a tar or zip file with the program, a README file providing attribution (including email addresses), and a SOLUTION file explaining your program. If you are entering category 1, include a RULES file containing the rules of your game. The subject line of your message should say which category you're entering. If you enter more than once per category, say which entry it is.

The priests await your offerings.

_ _END_ _

PREVIOUS  TABLE OF CONTENTS