Rahul Sharma (Editor)

Code golf

Updated on
Edit
Like
Comment
Share on FacebookTweet on TwitterShare on LinkedInShare on Reddit

Code golf is a type of recreational computer programming competition in which participants strive to achieve the shortest possible source code (not to be confused with binary Sizecoding) that implements a certain algorithm. Playing code golf is known as "golf scripting". Code golf tournaments may also be named with the programming language used (for example Perl golf).

Contents

History

The length of the shortest possible program that produces a given output (in any fixed programming language) is known as the Kolmogorov complexity of the output, and its mathematical study dates to the work of Andrey Kolmogorov in 1963. Code golf, however, can be more general than this, as it often specifies a general input-output transformation that must be performed rather than asking for a single output with no input.

Whilst the term "code golf" was apparently first used in 1999 with Perl, and later popularised through the use of Perl to write a program that performed RSA encryption, similar informal competition was known to have been popular with earlier APL hackers. Today the term has grown to be applied to a wide variety of languages, which has even triggered the creation of dedicated golfing languages. More systematic practical use of terse code is known as Spartan Programming.

Etymology

The term "code golf" is derived from the similarity of its goal with that of conventional golf, where participants seek to achieve the lowest possible score, rather than the highest, as is the standard in most sports and game scoring systems. Also, key strokes and club strokes.

Dedicated golfing languages

Several new languages have been created specifically with code golfing in mind. The most well-known examples include GolfScript and Flogscript, which are Turing-complete languages which provide powerful constructs for concisely expressing ideas in code. Golfing languages are generally considered to be esoteric, as useful applications other than for code golfing are very limited due to their limitations on overall speed, readability and function. Binary lambda calculus was designed to make Algorithmic Information Theory more concrete, but results in a scheme suitable for code golf. A list of dedicated golfing languages can be found on the wiki for esoteric programming languages.

An example of GolfScript code to print 1000 digits of Pi:

Many code golf websites such as Programming Puzzles & Code Golf have many users constantly creating new and unique golfing languages to win code golf challenges. Some other notable examples of golfing languages are Pyth and CJam.

Types of code golf

Some code golf questions, such as those posed on general programming sites, may not require implementation in a specific programming language. However, this limits the style of problems that it is possible for the problem designers to pose (for example, by limiting the use of certain language features). In addition, the creation of such "open" questions has resulted in the design of code golf specific programming language dialects such as REBMU (a dialect of REBOL). Both online and live competitions may also include time limits.

Ongoing

  • Multiple programming languages
  • Anarchy Golf (online): Most well-known programming languages including several esoteric programming languages.
  • JAGC (online): Perl, Python, Erlang, Ruby, Haskell, Bash, PHP.
  • Shortening codes at SPOJ (online): Most well-known programming languages.
  • Programming Puzzles & Code Golf on Stack Exchange (online): Any programming language allowed. Also includes other types of programming challenges.
  • CodinGame (online): Most well-known programming languages.
  • Code Golf (online): Most well-known programming languages.
  • Clojure
  • 4clojure.com (online)
  • K
  • Kona code golf (online)
  • Vim
  • VimGolf
  • Historical

  • Perl
  • Historical
  • 2000, July: Perl Golf Apocalypse at Perl Conference 4.0, Monterey California.
  • Perl, PHP, Ruby and Python
  • Historical
  • CodeGolf (online)
  • References

    Code golf Wikipedia