コードゴルフ

コードゴルフはコンピュータプログラミング・コンテストの一種。参加者は与えられたアルゴリズムを、可能な限りもっとも短いソースコードで記述することを競う。バイナリサイズではなく、ソースコードの文字数がスコアとなる。「Perl golf」など、トーナメントで使用されるプログラミング言語の名前がつけられることもある。ショートコーディング、コードパズル等とも呼ばれる。

歴史 
この用法における「ゴルフ」という言葉は、1999年にPerlのニュースグループ上で初めて使用されたとされる。その後、RSA暗号の暗号化プログラムが、5行のPerlプログラミングで実装されたことによって一般的となった。同様の非公式なコンテストがAPLのハッカーらなどによって行われていたことも知られている。PHPでは十分な機能のウィキが1287文字で実装された。その後、コードゴルフ用プログラミング言語の作成がきっかけとなり、多くのプログラミング言語においてもゴルフという言葉が使用されることとなった。よりシステム的、実践的である簡潔なプログラミングは:en:Spartan Programmingとして知られている。

語源 
「コードゴルフ」という用語は、参加者が高スコアではなく低いスコアを目指す得点形式であるため、そのようなスポーツやゲームの中でも一般的であるゴルフから名づけられた。

手法 
ソースコードを短縮する手法として、次のようなものがある。
コメントは消去する。
スペースを省略する。
変数の宣言を省略する。
関数をなるべく使わないようにする。

コードゴルフ用プログラミング言語 
コードゴルフを念頭に置いたいくつかの新しい言語が作られている。もっともよく知られているものとしてやFlogscriptがあり、コード上での簡潔な表現のアイデアを構築できるようになっている。これらはチューリング完全な言語である。コードゴルフ用言語は、一般的に難解であると考えられており、コードゴルフ以外の実用アプリケーションとしては、実行速度、可読性、機能において制限されている。 はアルゴリズム情報理論をより具体化するために設計されたが、コードゴルフ用途にとどまっている。難解プログラミング言語のウィキにコードゴルフ用言語のリストが存在する。

以下に円周率を1000桁表示するGolfScriptの例を示す。
;''
6666,-2%{2+.2/@*\/10.3??2*+}*
`50<~\; #ページの都合上、出力を省略
 -> 3141592653589793238462643383279502884197169399375

コードゴルフの出題形式 
一般的なプログラミングサイトなどで見られるコードゴルフ問題では、実装するプログラミング言語を特定しないこともある。しかし、例えば特定の言語の使用を制限するなどして、出題者が問題の形式を限定することもできる。このような「言語を特定しない」問題が作られることによって、コードゴルフに特化したプログラミング言語の派生設計につながった。例としては、REBOLの派生であるREBMUが挙げられる。オンライン上のコンテストでもライブでのコンテストでも時間制限が設けられることがある。

言語別のトーナメント 
複数のプログラミング言語
実施中
Anarchy Golf (オンライン): いくつかの難解プログラミング言語を含めた多数の主要プログラミング言語。
JAGC (オンライン): Perl、Python、Erlang、Ruby、Haskell、Bash、PHP。
 内の Shortening codes(オンライン): 多数の主要プログラミング言語。
Stack Exchange内の PPCG(オンライン): いくつかのプログラミング言語が指定されている。 他の形式のプログラミング・コンテストも実施されている。
Clojure
実施中
4clojure.com(オンライン)

実施中
Kona code golf (オンライン)
PHP
実施中
phpGolf(オンライン)
Perl
過去に実施
2000年7月:カリフォルニア州モントレーで行われたPerl Conference 4.0内での。
Perl、PHP、Ruby、Python
実施中
CodeGolf(オンライン)
Vim
実施中
VimGolf

外部リンク 
StackOverflow.com: Questions tagged with 'code-golf'
CodeGolf.StackExchange.com: Questions and answers on programming puzzles and code golf
regular expression golfing: a fun variant to code golf
ShortestWikiContest
Code Golf
JAGC

注釈

出典

参考文献 

プログラミングコンテスト