コードゴルフ

出典: フリー百科事典『ウィキペディア(Wikipedia)』

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

歴史[編集]

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

語源[編集]

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

手法[編集]

ソースコードを短縮する手法として、次のようなものがある。

  • コメントは消去する[7]
  • スペースを省略する[8]
  • 変数の宣言を省略する[9]
  • 関数をなるべく使わないようにする[10]

コードゴルフ用プログラミング言語[編集]

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

以下に円周率を1000桁表示するGolfScriptの例を示す。

;''
6666,-2%{2+.2/@*\/10.3??2*+}*
`50<~\; #ページの都合上、出力を省略
 -> 3141592653589793238462643383279502884197169399375

コードゴルフの出題形式[編集]

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

言語別のトーナメント[編集]

外部リンク[編集]

注釈[編集]

出典[編集]

  1. ^ a b 柳井政和 2014, p. 7.
  2. ^ プログラマ向けコードパズルサイト「コードダンジョン」公開”. マイナビニュース (2015年9月16日). 2015年11月28日閲覧。
  3. ^ Greg Bacon (28 May 1999). "Re: Incrementing a value in a slice". Newsgroupcomp.lang.perl.misc. Usenet: 7imnti$mjh$1@info2.uah.edu. 2011年7月12日閲覧
  4. ^ Back, Adam. “RSA in 5 lines of perl”. 2011年1月10日閲覧。
  5. ^ Wik Wiki A Wiki in 1287 characters of PHP”. 2015年12月2日閲覧。
  6. ^ Spartan Programming, Jeff Atwood英語版, Coding Horror, 08 Jul 2008
  7. ^ 柳井政和 2014, p. 28.
  8. ^ 柳井政和 2014, p. 29.
  9. ^ 柳井政和 2014, p. 30.
  10. ^ 柳井政和 2014, pp. 35–41.
  11. ^ List of dedicated golfing languages on the esowiki”. 2015年12月2日閲覧。
  12. ^ Anarchy Golf”. 2015年12月2日閲覧。
  13. ^ Just Another Golf Coding”. 2015年12月2日閲覧。
  14. ^ Shortening codes”. 2015年12月2日閲覧。
  15. ^ 4clojure League”. 2011年7月24日閲覧。

参考文献[編集]

  • 柳井政和『プログラマのためのコードパズル JavaScriptで挑むコードゴルフとアルゴリズム』技術評論社〈第1刷〉、2014年3月10日。ISBN 978-4-7741-6253-9