Codegolf

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Codegolf ist ein Freizeit-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 verwendeten Programmiersprache verbunden (wie englisch „Perl golf“).

Geschichte[Bearbeiten | Quelltext 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;[1] und blieb wegen der Verbreitung der Sprache bei RSA-Verschlüsselungen zunächst in diesem Umfeld.[2] Ä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.[3]

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 | Quelltext bearbeiten]

Viele Codegolfaufgaben fordern nicht eine bestimmte Programmiersprache. Meistens jedoch werden Einschränkungen gemacht, wie die Verwendung spezifischer Codegolfdialekte wie REBMU[4] (einem Dialekt der Sprache REBOL) oder Zeitlimits, um so die Aufgabe interessanter und herausfordernder zu gestalten.

Spezielle Codegolfsprachen[Bearbeiten | Quelltext bearbeiten]

Mehrere neue 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. Die Kehrseite dieser Sprachen ist die schlechte geringe Lesbarkeit, die sie für den praktischen Einsatz ausschließt; man nennt sie daher auch häufig „esoterische Programmiersprachen“. Weitere Beispiele sind die Sprachen Pyth und CJam.[5]

Ein Beispiel in GolfScript, das die ersten fünfzig Stellen von Pi ausgibt:

;''
6666,-2%{2+.2/@*\/10.3??2*+}*
`50<~\;
 -> 3141592653589793238462643383279502884197169399375

Wettbewerbe[Bearbeiten | Quelltext bearbeiten]

Folgende Wettbewerbe erlauben mehrere Programmiersprachen: Anarchy Golf,[6] JAGC,[7] Shortening codes,[8] Code Golf & Coding Challenges, CodinGam, Code Golf. Der Wettbewerb 4clojure.com gestattet nur Clojure,[9] VimGolf nur Vim.

Siehe auch[Bearbeiten | Quelltext bearbeiten]

Weblinks[Bearbeiten | Quelltext bearbeiten]

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. Greg Bacon: Re: Incrementing a value in a slice. 28. Mai 1999, abgerufen am 12. Juli 2011.
  2. Adam Back: RSA in 5 lines of perl. Abgerufen am 10. Januar 2011.
  3. Spartan Programming, Jeff Atwood, Coding Horror, 8. Juli 2008
  4. REBMU: Code Golf Language for Humans
  5. Liste spezieller Codegolfsprachen: List of dedicated golfing languages on the esowiki.
  6. Anarchy Golf.
  7. Just Another Golf Coding.,
  8. Shortening codes.
  9. 4clojure League. Abgerufen am 24. Juli 2011: „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).“