Hallo,
wie angekündigt hier ein paar witzige Links und Codeschnipsel zum Thema "obfuscated programming".
Zum einen gibt es die sogenannten Quines, das sind Programme, die ihren eigenen Quelltext auszugeben, ohne ihre Datei auszulesen. Trivialbeispiel sind leere Programme, aber nur für einige Programmiersprachen. Für alle anderen wird es haarig, wie z.B. in C:
char*f="char*f=%c%s%c;main(){printf(f,34,f,34,10);}%c";main(){printf(f,34,f,34,10);}
Oder in Python: l='l=%s;print l%%`l`';print l%`l`
Mehr davon, von Basic bis zu Postscript oder Povray gibts unter [1], zusammen mit Programmen, die sich gegenseitig erzeugen (Yin-Yang Quines).
Als nächstes gibt es die Polyglots. Das sind Programme, die in mehreren Programmiersprachen gleichzeitig geschrieben sind. Auf der selben Seite unter [2] gibt es auch davon eine Sammlung.
Eine recht gute Beschreibung, wie man Perl, C, Brainfuck und Befunge in einem Quelltext unterbringt und damit auch noch mathematisches/algorithmisches Problem löst, findet man unter [3].
Ein Perl-Skript, was sich nicht nur selbst ausdruckt, sondern auch noch andere Programme dazu bringen kann sich selbst auszudrucken (ohne Verlust der Ursprungsfunktionalität), ein Spiel enthält, und kleiner als 1 kB ist gibt es unter [4].
Und wer dann immer noch nicht genug hat, kann sich auf die Suche nach den verrücktesten Programmiersprachen machen. Eric S. Raymond ist beispielsweise Autor einer Intercal-Implementierung, die einzig bekannte Sprache, die statt eines "GO TO" ein "COME FROM" verwendet:
DO .2 <- #32 PLEASE COME FROM (10) DO .1 <- #0 DO (1020) NEXT DO (1020) NEXT PLEASE DO %50 (1020) NEXT DO (1020) NEXT DO (1020) NEXT PLEASE DO %50 (1020) NEXT DO (1020) NEXT DO (1020) NEXT PLEASE DO %50 (1020) NEXT DO READ OUT .1 DO (30) NEXT (10) DO .2 <- .2~#62 (20) DO RESUME "?.2$#2"~#3 (30) DO (20) NEXT PLEASE FORGET #1 PLEASE GIVE UP
(Das Programm gibt römische Zahlen aus.)
[1] http://www.nyx.net/~gthompso/quine.htm [2] http://www.nyx.net/~gthompso/self_mult.htm [3] http://libarynth.f0.am/cgi-bin/view/Libarynth/SelfGOL [4] http://www.if.insa-lyon.fr/eleves/jquelin/quadri.html
Josef