コードゴルフは、参加者が特定の問題を解決する最短のソースコードを作成することを目指す、レクリエーション的なコンピュータプログラミング コンテストの一種です。 [1] [2]コードゴルフのチャレンジやトーナメントは、使用されるプログラミング言語で名前が付けられることもあります(たとえば、Perlゴルフ)。
語源
「コード ゴルフ」という用語は、その目標が従来のゴルフと似ていることに由来しています。従来のゴルフでは、ほとんどのスポーツやゲームのスコアリング システムで標準となっている最高スコアではなく、可能な限り最低のスコアを達成することを目指します。従来のゴルフ プレーヤーは、コースを完走するために必要なクラブ ストロークの数を最小限に抑えようとしますが、コード ゴルファーは、プログラムを記述するために必要な文字数を減らすことを目指します。
歴史
特定の出力 (任意の固定プログラミング言語) を生成する最短プログラムの長さは、出力のコルモゴロフ複雑度として知られており、その数学的研究は 1963 年のAndrey Kolmogorovの研究にまで遡ります。ただし、コード ゴルフはこれよりも一般的な場合があり、入力なしで単一の出力を求めるのではなく、実行する必要がある一般的な入力-出力変換を指定することがよくあります。
「コード ゴルフ」という用語は、 1999 年にPerlで初めて使用されたようですが[3]、その後、Perl を使用してRSA暗号化を実行するプログラムを作成することで普及しました[4] 。同様の非公式のコンテストが、初期のAPLハッカーの間で人気があったことが知られています。プログラム サイズを積極的に最適化することの難しさは、それ自体長い間認識されていました。たとえば、1962 年のRegnecentralen のGIER コンピューターのコーディング マニュアルには、「可能な限り少ない命令数でコーディングすることは、時間のかかるスポーツである」と記載されており、実際のプログラミングでは推奨されていません。[5]今日、この用語はさまざまな言語をカバーするようになり、ゴルフ専用の言語の作成のきっかけにもなりました。
ゴルフ専用言語
コード ゴルフを念頭に置いて、いくつかの新しい言語が作成されました。例としては、コードでアイデアを簡潔に表現するための構造を提供するチューリング完全な言語である GolfScript、Flogscript、Stuck、Vyxal などがあります。ゴルフ言語は極度の簡潔さを競うため、実際の運用環境で重要な可読性を犠牲にして設計されており、そのため難解であることがよくあります。ただし、実用的な目的のために設計された言語が、コード ゴルフに適していることが判明することもあります。
円周率の1000桁を出力するGolfScriptコードの例: [6]
;''
6666、-2%{2+.2/@*\/10.3??2*+}*
`1000<~\;
コード ゴルフの Web サイトには、コード ゴルフ チャレンジで勝つためにユーザーが作成した斬新なゴルフ言語が掲載されています。その他の人気の言語には、05AB1E、Husk、Pyth、CJam、Jelly などがあります。
コードゴルフの種類
一般的なプログラミング サイトで出題されるようなコード ゴルフの問題の中には、特定のプログラミング言語での実装を必要としないものもあります。ただし、これにより、問題の設計者が出題できる問題のスタイルが制限されます (たとえば、特定の言語機能の使用が制限されるなど)。さらに、このような「オープン」な問題の作成により、REBMU ( REBOLの方言) などのコード ゴルフ固有のプログラミング言語方言が設計されるようになりました。オンラインおよびライブの競技には、時間制限が設けられる場合もあります。
参照
参考文献
- ^ Code Golf Stack Exchange。code-golf について。2021 年 12 月 21 日閲覧。
- ^ 「Code-golf 入門 | ASSIST Software Romania」 。2023年 3 月 23 日閲覧。
- ^ Greg Bacon (1999-05-28). 「Re: スライス内の値の増分」。ニュースグループ: comp.lang.perl.misc。Usenet : 7imnti$mjh$1@info2.uah.edu。2011-07-12に取得。
- ^ Back, Adam. 「5行のPerlでRSA」。2011年1月10日閲覧。
- ^ アンデルセン、クリスチャン;グラム、クリスチャン(1962年)。 GIER の Lærebog i Kodning (PDF)。 Vol. 1 (第 3 版)。コペンハーゲン:レグネセントラーレン。 p. 104 . 2020年5月16日に取得。
- ^ 「GolfScript の例」 。2023年 3 月 23 日閲覧。
外部リンク
- CodeGolf.StackExchange.com: プログラミングパズルとコードゴルフに関する質問と回答
- 難解なプログラミング言語の wiki におけるゴルフ
- ゴルフ専用言語のリスト
