HOME

TheInfoList



OR:

Code golf is a type of recreational computer programming
competition Competition is a rivalry where two or more parties strive for a common goal which cannot be shared: where one's gain is the other's loss (an example of which is a zero-sum game). Competition can arise between entities such as organisms, indiv ...
in which participants strive to achieve the shortest possible
source code In computing, source code, or simply code, is any collection of code, with or without comments, written using a human-readable programming language, usually as plain text. The source code of a program is specially designed to facilitate the ...
that solves a certain problem.Code Golf Stack Exchange
About code-golf
Retrieved 2021-12-21.
Code golf challenges and tournaments may also be named with the programming language used (for example, ''
Perl Perl is a family of two high-level, general-purpose, interpreted, dynamic programming languages. "Perl" refers to Perl 5, but from 2000 to 2019 it also referred to its redesigned "sister language", Perl 6, before the latter's name was offi ...
golf'').


History

The length of the shortest possible program that produces a given output (in any fixed programming language) is known as the
Kolmogorov complexity In algorithmic information theory (a subfield of computer science and mathematics), the Kolmogorov complexity of an object, such as a piece of text, is the length of a shortest computer program (in a predetermined programming language) that pr ...
of the output, and its mathematical study dates to the work of
Andrey Kolmogorov Andrey Nikolaevich Kolmogorov ( rus, Андре́й Никола́евич Колмого́ров, p=ɐnˈdrʲej nʲɪkɐˈlajɪvʲɪtɕ kəlmɐˈɡorəf, a=Ru-Andrey Nikolaevich Kolmogorov.ogg, 25 April 1903 – 20 October 1987) was a Sovi ...
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 Perl is a family of two high-level, general-purpose, interpreted, dynamic programming languages. "Perl" refers to Perl 5, but from 2000 to 2019 it also referred to its redesigned "sister language", Perl 6, before the latter's name was offi ...
, and later popularised through the use of Perl to write a program that performed RSA encryption, a similar informal competition is known to have been popular with earlier APL hackers. The challenging nature of aggressively optimizing for program size has itself long been recognized; for example, a 1962 coding manual for Regnecentralen's GIER computer notes that "it is a time-consuming sport to code with the least possible number of instructions" and recommends against it for practical programming. Today the term has grown to cover a wide variety of languages, which has even triggered the creation of dedicated golfing languages.


Etymology

The term "code golf" is derived from the similarity of its goal with that of conventional
golf Golf is a club-and-ball sport in which players use various clubs to hit balls into a series of holes on a course in as few strokes as possible. Golf, unlike most ball games, cannot and does not use a standardized playing area, and coping w ...
, where participants seek to achieve the lowest possible score, rather than the highest, as is the standard in most sports and game scoring systems. While conventional golf players are trying to minimize the number of club strokes needed to complete the course, code golfers are striving to reduce the number of key strokes necessary to write the program.


Dedicated golfing languages

Several new languages have been created specifically with code golfing in mind. Examples include GolfScript, Flogscript and Vyxal, which are
Turing-complete In computability theory, a system of data-manipulation rules (such as a computer's instruction set, a programming language, or a cellular automaton) is said to be Turing-complete or computationally universal if it can be used to simulate any Tur ...
languages which provide constructs for concisely expressing ideas in code. Because golfing languages compete for extreme brevity, their design sacrifices readability, which is important for practical production environments, and therefore they are often
esoteric Western esotericism, also known as esotericism, esoterism, and sometimes the Western mystery tradition, is a term scholars use to categorise a wide range of loosely related ideas and movements that developed within Western society. These ideas a ...
. Sometimes, however, a language is designed for a practical purpose, but turns out to be suitable for code golf. An example of GolfScript code to print 1000 digits of pi: ;'' 6666,-2%* `1000<~\; This prints a string starting with "3141592653" followed by 990 more digits of pi. Code golf websites include novel golfing languages created by users to win code golf challenges. Other popular languages include 05AB1E, Husk, Pyth, CJam and Jelly.


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 A programming language is a system of notation for writing computer programs. Most programming languages are text-based formal languages, but they may also be graphical. They are a kind of computer language. The description of a programming ...
. 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.


See also

* Code poetry *
Data compression In information theory, data compression, source coding, or bit-rate reduction is the process of encoding information using fewer bits than the original representation. Any particular compression is either lossy or lossless. Lossless compressio ...
*
Minification (programming) Minification (also minimisation or minimization) is the process of removing all unnecessary characters from the source code of interpreted programming languages or markup languages without changing its functionality. These unnecessary characters ...
* Perl pastimes *
Kolmogorov complexity In algorithmic information theory (a subfield of computer science and mathematics), the Kolmogorov complexity of an object, such as a piece of text, is the length of a shortest computer program (in a predetermined programming language) that pr ...
* Kata (programming)


References

{{reflist


External links


CodeGolf.StackExchange.com: Questions and answers on programming puzzles and code golfList of dedicated golfing languagesregular expression golfing: a fun variant to code golfShortestWikiContestReverse Code Golf (xkcd)
Programming contests