Obfuscated Perl Contest
Der Obfuscated Perl Contest ist ein Programmierwettbewerb. Die Teilnehmer reichen in der Programmiersprache Perl verfasste kurze Programme ein, deren Funktionsweise im Quelltext auf möglichst kreative Weise verschleiert (englisch: obfuscated) wurde. Dies ist normalerweise nicht Ziel bei der Programmierung (siehe aber auch: Obfuscator).
Wettbewerbe dieser Art, die auch für andere Programmiersprachen veranstaltet werden, dienen vorrangig der Unterhaltung der beteiligten Programmierer. Die Erstellung, aber auch die Analyse der Funktionsweise der Wettbewerbsbeitäge ist in der Regel außerordentlich lehrreich; darin besteht – neben dem Unterhaltungswert – der Nutzen solcher Wettbewerbe für die Programmierer der jeweiligen Programmiersprache.
Historie
Der Wettbewerb wurde erstmalig 1996 von Felix S. Gallo in der Fachzeitschrift The Perl Journal ausgerufen. Er fand danach jährlich statt, im Jahre 2000 vermutlich zum letzten Mal.
Gewinner wurden in vier Kategorien gekürt:
- Die beste vierzeilige Signature
Es gewinnt das beste Programm, dessen Quelltext in 4 Zeilen zu je 76 Zeichen passt (die Größe einer Signature). - Das mächtigste Programm
Es gewinnt das Programm, das den größten Effekt mit dem geringsten Aufwand erzielt (maximal 1024 Bytes). - Das kreativste Programm
Es gewinnt das Programm mit der verblüffendsten Kombination von Verschleierung und Funktionalität (maximal 2048 Bytes). - Das beste The Perl Journal
Es gewinnt das beste Programm, das – in der Tradition der "Just another Perl hacker"-Programme – den Text „The Perl Journal“ ausgibt (maximal 2048 Bytes).
Die Beiträge wurden bewertet nach den Kriterien Ästhetik (des Quelltextes), Output (Ausgabe am Terminal) und Unverständlichkeit (im Sinne von maximaler Obfuscation). Jedes Jahr wurde außerdem einem Beitrag der Best of Show award verliehen. Die Siegerbeiträge wurden im Perl Journal veröffentlicht, können heute allerdings nur noch gegen Gebühr in den Verlagsarchiven eingesehen werden (siehe www.tpj.com).
Beispiele
- Erster Platz in der Kategorie „beste vierzeilige Signature“ beim 0. Obfuscated Perl Contest von Robert Klep. Das Programm gibt eine mit ASCII-Zeichen dargestellte Mandelbrot-Menge aus. (Hinweis: Das Terminal muss auf eine Breite von 80 Zeichen eingestellt sein.)
Programm:
$Y=-1.2;for(0..24){$X=-2;for(0..79){($r,$i)=(0,0);for(0..15){$n=$_;$r=($x=$ r)*$x-($y=$i)*$y+$X;$i=2*$x*$y+$Y;$x*$x+$y*$y>4&&last}print unpack("\@$n a" ,".,:;=+itIYVXRBM ");$X+=3/80}$Y+=2.4/25}
Ausgabe:
,,,,,,,,,,,::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::::::::::::::::: ,,,,,,,,,:::::::::;;;;;;;;;;;;;;;;;;;;;;======+iRV+++====;;;;;;::::::::::::::::: ,,,,,,,,::::::;;;;;;;;;;;;;;;;;;;;;;========+++itVXYYRi======;;;;;;::::::::::::: ,,,,,,:::::;;;;;;;;;;;;;;;;;;;;;;=========++++ttIR VIt+++=====;;;;;;;:::::::::: ,,,,,::::;;;;;;;;;;;;;;;;;;;;==========+++iitIX ti++++====;;;;;;;:::::::: ,,,,:::;;;;;;;;;;;;;;;;;;;=========++ittttttIYX VIItiiiii++==;;;;;;;:::::: ,,,::;;;;;;;;;;;;;;;;;;======+++++iit R RY XX Y++=;;;;;;;;:::: ,,::;;;;;;;;;;;;;;;;===+++++++++iiitIVB Mti++=;;;;;;;;::: ,,:;;;;;;;;;;;====+XtiiiiiiiiiittIYM RIti+==;;;;;;;;:: ,:;;;;;=======+++iiI XVVYV VYYIIYYB t+===;;;;;;;;: ,;;========++++++ttIY MRB Mi+===;;;;;;;;; ,========+++iiiIRYYX t++====;;;;;;;; ,++iitYttttIIIVXM Yti++====;;;;;;;; ,++iitYttttIIIVXM Yti++====;;;;;;;; ,========+++iiiIRYYX t++====;;;;;;;; ,;;========++++++ttIY MRB Mi+===;;;;;;;;; ,:;;;;;=======+++iiI XVVYV VYYIIYYB t+===;;;;;;;;: ,,:;;;;;;;;;;;====+XtiiiiiiiiiittIYM RIti+==;;;;;;;;:: ,,::;;;;;;;;;;;;;;;;===+++++++++iiitIVB Mti++=;;;;;;;;::: ,,,::;;;;;;;;;;;;;;;;;;======+++++iit R RY XX Y++=;;;;;;;;:::: ,,,,:::;;;;;;;;;;;;;;;;;;;=========++ittttttIYX VIItiiiii++==;;;;;;;:::::: ,,,,,::::;;;;;;;;;;;;;;;;;;;;==========+++iitIX ti++++====;;;;;;;:::::::: ,,,,,,:::::;;;;;;;;;;;;;;;;;;;;;;=========++++ttIR VIt+++=====;;;;;;;:::::::::: ,,,,,,,,::::::;;;;;;;;;;;;;;;;;;;;;;========+++itVXYYRi======;;;;;;::::::::::::: ,,,,,,,,,:::::::::;;;;;;;;;;;;;;;;;;;;;;======+iRV+++====;;;;;;:::::::::::::::::
- Erster Platz in der Kategorie „The Perl Journal“ und Best of Show award beim 5. Obfuscated Perl Contest von Les Peters. Das Programm liest die Zeichenfolgen in den beiden Kommentarzeilen (erste und vierte Zeile) ein und interpretiert sie als um 90° gedrehte Maya-Ziffern, aus denen dann die ASCII-Codes für die Ausgabe von „The Perl Journal“ gewonnen werden.
#:: ::-| ::-| .-. :||-:: 0-| .-| ::||-| .:|-. :|| open(Q,$0);while(){if(/^#(.*)$/){for(split('-',$1)){$q=0;for(split){s/\| /:.:/xg;s/:/../g;$Q=$_?length:$_;$q+=$q?$Q:$Q*20;}print chr($q);}}}print"\n"; #.: ::||-| .||-| :|||-| ::||-| ||-:: :|||-| .:|
Siehe auch
- Programmiersprache Perl
- Just another Perl hacker
- Signatur-Programme
- International Obfuscated C Code Contest
- International Obfuscated Ruby Code Contest (englisch)
- Obfuscator – Hilfsmittel zur Verschleierung von Programmen
- Esoterische Programmiersprachen – Programmiersprachen, die entworfen wurden für maximale Verschleierung
Weblinks
Wettbewerbsbeiträge
- Das zweite Beispiel oben, mit Erläuterungen (englisch)
Bei den folgenden Wettbewerbsbeiträgen ist die Kategorie unbekannt.
- Gewinner eines ersten Preises im 5. Obfuscated Perl Contest – Ausgabe einer Analoguhr mit sich bewegenden Zeigern (englisch)
- Gewinner eines zweiten Preises im 5. Obfuscated Perl Contest – ein „JAPH“ mit sehr ausführlicher Erläuterung (englisch)
- Ein Beitrag zum 2. Obfuscated Perl Contest – ein interaktives Bildschirmspiel (englisch)
Sonstige
- The Zeroth Annual Obfuscated Perl Contest (PDF, englisch)
- The 3rd Annual Obfuscated Perl Contest (englisch)