Codegolf
Codegolf ist ein Programmierwettbewerb, bei dem die Teilnehmer versuchen, einen bestimmten Algorithmus mit so wenig Quelltext wie möglich zu implementieren. Codegolf ist nicht zu verwechseln mit dem sogenannten „Sizecoding“, bei dem es darum geht, möglichst kleine ausführbare Binärdateien zu erzeugen. Manchmal wird Codegolf auch „Skriptgolf“ genannt oder, vor allem im Englischen, mit der zu verwendenden Programmiersprache verbunden (wie englisch „Perl golf“).
Geschichte[Bearbeiten]
Die Länge des kürzestmöglichen Programms zur Erzeugung einer bestimmten Ausgabe (in einer bestimmten Programmiersprache) wird Kolmogorow-Komplexität genannt, benannt nach Andrey Kolmogorov aufgrund seiner mathematischen Arbeiten zu diesem Thema im Jahre 1963. Häufig geht es beim Codegolf mehr um eine allgemeine zu erreichende Eingabe-Ausgabe-Transformation als um das bloße Erreichen einer bestimmten Ausgabe ohne vorherige Eingabe.
Die Bezeichnung „Codegolf“ wurde vermutlich das erste Mal 1999 im Zusammenhang mit der Programmiersprache Perl verwendet;<ref name="perl-golf-coined">Greg Bacon: [Internetquelle: archiv-url ungültig Re: Incrementing a value in a slice.] 28. Mai 1999, archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL; abgerufen am 12. Juli 2011 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung</ref> und blieb wegen der Verbreitung der Sprache bei RSA-Verschlüsselungen zunächst in diesem Umfeld.<ref name="rsa">Adam Back: RSA in 5 lines of perl. In: cypherspace.org. Abgerufen am 10. Januar 2011 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> Ähnliche informelle Wettbewerbe waren aber unter APL-Hackern bereits früher bekannt gewesen. Heute wird der Ausdruck unabhängig von der Programmiersprache verwendet, was teilweise sogar zum Entstehen von Sprachen nur für Codegolfwettbewerbe geführt hat. Der systematische Gebrauch solch kurzer Quelltexte wird in der Praxis als „Spartanische Programmierung“ bezeichnet.<ref>Jeff Atwood: Spartan Programming. In: Coding Horror, 8. Juli 2008 (englisch).</ref>
Hintergrund der Bezeichnung „Codegolf“ ist das Bestreben im Golfsport, eine möglichst niedrige Punktzahl zu erreichen, im Gegensatz zum Ziel einer hohen Punktzahl in anderen Sportarten.
Arten von Codegolf[Bearbeiten]
Viele Codegolfaufgaben fordern nicht eine bestimmte Programmiersprache. Meistens jedoch werden Einschränkungen gemacht, wie die Verwendung spezifischer Codegolfdialekte wie REBMU<ref>REBMU: Code Golf Language for Humans</ref> (einem Dialekt der Sprache REBOL) oder Zeitlimits, um so die Aufgabe interessanter und herausfordernder zu gestalten.
Spezielle Codegolfsprachen[Bearbeiten]
Mehrere Programmiersprachen wurden für den expliziten Gebrauch beim Codegolf entwickelt. Die bekanntesten unter ihnen sind GolfScript und Flogscript. Beide sind turingvollständig und bieten umfassende Möglichkeiten zum Ausdrücken komplexer Prozesse in wenigen Zeichen Quelltext. Ein Nachteil dieser Sprachen ist ihre schwere Lesbarkeit, die sie für den praktischen Einsatz ausschließt; man nennt sie daher unter anderem auch „esoterische Programmiersprachen“. Weitere Beispiele sind die Sprachen Pyth und CJam.<ref>Liste spezieller Codegolfsprachen: Vorlage:Cite book/Name: [Internetquelle: archiv-url ungültig List of dedicated golfing languages on the esowiki.] , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung</ref>
Ein Beispiel in GolfScript, das die ersten fünfzig Stellen von Pi ausgibt: <syntaxhighlight lang="text">
6666,-2%{2+.2/@*\/10.3??2*+}* `50<~\;
-> 3141592653589793238462643383279502884197169399375
</syntaxhighlight>
Wettbewerbe[Bearbeiten]
Folgende Wettbewerbe erlauben mehrere Programmiersprachen: Anarchy Golf,<ref name="anagol">Vorlage:Cite book/Name: [Internetquelle: archiv-url ungültig Anarchy Golf.] , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung</ref> JAGC,<ref name="jagc">JAGC.org. In: jagc.org. Archiviert vom Vorlage:IconExternal; abgerufen am 31. Juli 2026.</ref> Shortening codes,<ref name="shorten">Vorlage:Cite book/Name: [Internetquelle: archiv-url ungültig Shortening codes.] , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL; abgerufen am 1. Juni 2017 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)). Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung</ref> Code Golf & Coding Challenges, CodinGam, Code Golf. Der Wettbewerb 4clojure.com gestattet nur Clojure,<ref name="4clojure">Vorlage:Cite book/Name: [Internetquelle: archiv-url ungültig 4clojure League.] , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL; abgerufen am 24. Juli 2011 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)): „While the primary purpose of 4clojure.com is to teach Clojure "by doing", you may also choose to compete for the shortest solution. This is affectionately known as code golf: the lower your score the better, get it? If you choose to participate, we'll score your correct solutions based on the number of non-whitespace characters (and some more metrics in the future).“Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung</ref> VimGolf nur Vim.
Siehe auch[Bearbeiten]
Weblinks[Bearbeiten]
- StackOverflow.com: Fragen markiert mit 'code-golf'
- CodeGolf.StackExchange.com: Fragen und Antworten zu Codegolf
- Codegolf mit regulären Ausdrücken: Eine Fanvariante des Codegolfs
- ShortestWikiContest
Einzelnachweise[Bearbeiten]
<references />