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
Josef Spillner dr_maux@users.sourceforge.net schrieb:
Hallo,
wie angekündigt hier ein paar witzige Links und Codeschnipsel zum Thema "obfuscated programming".
Hallo auch. Danke, diese Links werd ich mir mal ansehen (nachher). Hier ist eine recht gute Übersicht über diese ganzen wertvollen Programmiersprachen: http://www.mines.edu/students/b/bolmstea/randlang/ mit zahlreichen weiterführenden Links (hä? führen Links nicht immer weiter? Bin auch schon konfus... ;-) Frank)
Frank Sommer wrote:
Hallo auch. Danke, diese Links werd ich mir mal ansehen (nachher). Hier ist eine recht gute Übersicht über diese ganzen wertvollen Programmiersprachen: http://www.mines.edu/students/b/bolmstea/randlang/ mit zahlreichen weiterführenden Links (hä? führen Links nicht immer weiter? Bin auch schon konfus... ;-)
Danke fuer das Link. Ich bin stutzig geworden, weil ich die o.g. Redewendung auch benutze. IMHO meint man damit 'thematisch weiterfuehrend'. Literaturhinweise sind ja i.d.R. auch weiterfuehrend.
Stefan
.
Hi Josef,
On Thu, Oct 03, 2002 at 23:35:34 +0200, Josef Spillner wrote:
wie angekündigt hier ein paar witzige Links und Codeschnipsel zum Thema "obfuscated programming".
Nett ist auch dieses hier:
main(a,p,t){for(a=1;a++<999;p&&printf("%d ",a))for(p=t=2;t<a&&(p=a%t++););}
Das gibt zwar nicht sich selbst aus, ist aber hinreichend obfuscated :)
bye, Chris
lug-dd@mailman.schlittermann.de