コードゴルフ
コードゴルフはコンピュータプログラミング・コンテストの一種。参加者は与えられたアルゴリズムを、可能な限りもっとも短いソースコードで記述することを競う[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]が挙げられる。オンライン上のコンテストでもライブでのコンテストでも時間制限が設けられることがある。
言語別のトーナメント
- 複数のプログラミング言語
- 実施中
- Anarchy Golf[※ 3] (オンライン): いくつかの難解プログラミング言語を含めた多数の主要プログラミング言語[12]。
- JAGC[※ 4] (オンライン): Perl、Python、Erlang、Ruby、Haskell、Bash、PHP[13]。
- SPOJ(英語版) 内の Shortening codes[※ 5](オンライン): 多数の主要プログラミング言語[14]。
- Stack Exchange内の PPCG[※ 6](オンライン): いくつかのプログラミング言語が指定されている。 他の形式のプログラミング・コンテストも実施されている。
- 実施中
- Clojure
- 実施中
- 4clojure.com[※ 7](オンライン)[15]
- 実施中
- K(英語版)
- 実施中
- Kona code golf[※ 8] (オンライン)
- 実施中
- PHP
- 実施中
- phpGolf[※ 9](オンライン)
- 実施中
- Perl
- Perl、PHP、Ruby、Python
- 実施中
- CodeGolf[※ 10](オンライン)
- 実施中
- Vim
- 実施中
- VimGolf[※ 11]
- 実施中
外部リンク
- 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
注釈
- ^ Spartan Programming
- ^ GitHub - hostilefork/rebmu: Microscopic Rebol Dialect ("mooshed") for Code Golf
- ^ anarchy golf
- ^ JAGC
- ^ Shortening codes
- ^ Code Golf Stack Exchange
- ^ 4clojure.com
- ^ Project Euler Code Golf · kevinlawler/kona Wiki · GitHub
- ^ phpGolf
- ^ CodeGolf
- ^ VimGolf - real Vim ninjas count every keystroke!
出典
- ^ a b 柳井政和 2014, p. 7.
- ^ “プログラマ向けコードパズルサイト「コードダンジョン」公開”. マイナビニュース (2015年9月16日). 2015年11月28日閲覧。
- ^ Greg Bacon (28 May 1999). "Re: Incrementing a value in a slice". Newsgroup: comp.lang.perl.misc. Usenet: [email protected]. 2011年7月12日閲覧。
- ^ Back, Adam. “RSA in 5 lines of perl”. 2011年1月10日閲覧。
- ^ “Wik Wiki A Wiki in 1287 characters of PHP”. 2015年12月2日閲覧。
- ^ Spartan Programming, Jeff Atwood(英語版), Coding Horror, 08 Jul 2008
- ^ 柳井政和 2014, p. 28.
- ^ 柳井政和 2014, p. 29.
- ^ 柳井政和 2014, p. 30.
- ^ 柳井政和 2014, pp. 35–41.
- ^ “List of dedicated golfing languages on the esowiki”. 2015年12月2日閲覧。
- ^ “Anarchy Golf”. 2015年12月2日閲覧。
- ^ “Just Another Golf Coding”. 2015年12月2日閲覧。
- ^ “Shortening codes”. 2015年12月2日閲覧。
- ^ “4clojure League”. 2011年7月24日閲覧。
参考文献
- 柳井政和『プログラマのためのコードパズル JavaScriptで挑むコードゴルフとアルゴリズム』技術評論社〈第1刷〉、2014年3月10日。ISBN 978-4-7741-6253-9。
コンピュータ・プログラミング言語の関連項目 | |
---|---|
言語水準 | |
言語処理系 | |
言語分類 | |
その他 | |
関連項目 |