
競技プログラミングまたはスポーツプログラミングは、参加者が与えられた仕様に従ってプログラミングを試みるマインドスポーツです。コンテストは通常、インターネットまたはローカルネットワーク上で開催されます。競技プログラミングは、 Google、[1] [2]やMeta [3]などのいくつかの多国籍ソフトウェアおよびインターネット企業によって認知され、サポートされています。
プログラミング コンテストでは、通常、主催者がパズルやチャレンジとも呼ばれる一連の論理的または数学的な問題を出場者 (数十、数百、数千人まで) に提示します。出場者は、これらの問題を解決できるコンピュータ プログラムを作成する必要があります。審査は主に、解決した問題の数と、成功したソリューションの作成に費やした時間に基づいて行われますが、その他の要素 (生成された出力の品質、実行時間、メモリ使用量、プログラム サイズなど) も考慮されることがあります。
歴史
最も古いコンテストの一つは、1970年代に始まった国際大学対抗プログラミングコンテスト(ICPC) [4]で、2011年大会では88か国が参加するまでに成長しました。
1990年から1994年にかけて、オーウェン・アストラチャン、ヴィヴェック・ケラ、デイヴィッド・コッツはICPCに触発されて、最初の分散型インターネットベースのプログラミングコンテストの一つを運営した。[5]
競技プログラミングへの関心は 2000 年以降大幅に高まり、参加者は数万人に上ります (「注目すべき競技」を参照)。これは、地理的な問題を排除して国際的なコンテストをオンラインで開催することを容易にするインターネットの発展と深く関係しています。
概要
競技プログラミングの目的は、与えられた問題を解決できるコンピュータプログラムのソースコードを書くことです。プログラミングコンテストで出題される問題の大部分は、数学的または論理的な性質のものです。そのような課題の典型は、組合せ論、数論、グラフ理論、アルゴリズムゲーム理論、計算幾何学、文字列解析、離散数学、データ構造のいずれかのカテゴリに属します。[6]制約プログラミングや人工知能に関連する問題も、特定のコンテストでは人気があります。
問題のカテゴリに関係なく、問題を解決するプロセスは、効率的なアルゴリズムの構築と、適切なプログラミング言語でのアルゴリズムの実装(許可されるプログラミング言語のセットはコンテストごとに異なります)という 2 つの大きなステップに分けられます。これらは、プログラミング コンテストで最も一般的にテストされる 2 つのスキルです。
ほとんどのコンテストでは、審査はホスト マシン (一般に審査員と呼ばれる) によって自動的に行われます。参加者が提出したすべてのソリューションは、審査員によって一連の (通常は秘密の) テスト ケースに対して実行されます。通常、コンテストの問題には全か無かの採点システムがあり、つまり、ソリューションは審査員によって実行されたすべてのテスト ケースで満足のいく結果が得られた場合のみ「承認」され、そうでない場合は却下されます。ただし、コンテストの問題によっては、合格したテスト ケースの数、結果の品質、またはその他の指定された基準に応じて部分的な採点が認められる場合があります。他のコンテストでは、参加者は与えられた入力データに対応する出力を提出するだけでよく、その場合、審査員は提出された出力データを分析するだけで済みます。
オンライン審査員は、テストが行われるオンライン環境です。オンライン審査員には、特定の問題に対して最も多くの解決法が認められたユーザーや、最も短い実行時間を示したユーザーを示すランキングリストがあります。[7]
注目の大会
アルゴリズムコンテスト
上記のコンテストのほとんどでは、通常、コンテストは複数のラウンドに分かれて行われます。通常はオンライン ラウンドから始まり、オンサイトでの最終ラウンドで終了します。IOI と ICPC の成績上位者には、金、銀、銅のメダルが贈られます。その他のコンテストでは、上位入賞者に賞金が授与されます。コンテストは、複数のソフトウェア企業やインターネット企業の採用担当者の関心も集め、採用担当者が候補者に潜在的な仕事のオファーをすることも多いです。
人工知能と機械学習
- リストが不完全な可能性があります
オープンソース技術に焦点を当てたコンテスト
- リストが不完全な可能性があります
オンラインプラットフォーム
世界中のプログラミング コミュニティは、競技プログラミング専用のインターネット リソースをいくつか作成し、維持しています。これらのリソースでは、小規模な賞品の有無にかかわらず、独立したコンテストを提供しています。通常、ユーザーは、これらのコンテストでのパフォーマンスに基づいて評価されます。過去の問題のアーカイブは、競技プログラミングのトレーニングに人気のリソースです。定期的にプログラミング コンテストを主催する組織がいくつかあります。これらには次の組織が含まれます。
利点と批判
プログラミングコンテストへの参加は、学生のコンピュータサイエンス研究への熱意を高める可能性がある。ICPCのようなプログラミングコンテストで習得したスキルは、複雑なプログラミングやアルゴリズムの問題をその場で解くことが求められる「技術面接」に合格するのに役立つため、キャリアの見通しも改善する。[19] [20]
競技プログラミングに対する批判も、特にプロのソフトウェア開発者から寄せられている。[21]重要な点の 1 つは、ペースの速いプログラミング コンテストの多くが、競技者に悪いプログラミング習慣やコード スタイル (マクロの不必要な使用、 OOP抽象化とコメントの欠如、短い変数名の使用など) を教えてしまうことである。[22] [21]また、ICPC や IOI などのプログラミング コンテストでは、比較的短い解答の小さなアルゴリズム パズルしか提供されないため、必ずしも優れたソフトウェア エンジニアリング スキルやプラクティスが教えられるわけではない。実際のソフトウェア プロジェクトは、通常、何千行ものコードで構成され、長期間にわたって大規模なチームによって開発されるからである。 [21] Peter Norvigは、入手可能なデータに基づくと、プログラミング コンテストで優勝することと、Google でのプログラマーの職務におけるパフォーマンスには負の相関関係がある (コンテスト優勝者は採用される可能性が高かったにもかかわらず) と述べた。[23] Norvig は後に、この相関関係は小さなデータ セットで観察されたが、より大きなデータ セットを調べても確認できなかったと述べた。[24] [信頼できない情報源? ]
さらに別の意見としては、既知の解決策で問題を解決することで過度な競争に時間を「無駄にする」のではなく、著名なプログラマーは現実世界の問題を解決することに時間を費やすべきだという意見もある。[21]
文学
- Halim, S., Halim, F. (2013).競技プログラミング 3: プログラミング コンテストにおける新たな下限値. Lulu.
- Laaksonen, A. (2017).競技プログラミングガイド(コンピュータサイエンス学部のトピック). Cham: Springer International Publishing.
- Xu, X. (2020)情報科学におけるオリンピックの発展、繁栄、衰退。オンライン出版。
- コストカ、B. (2021)。スポーツプログラミングの実践。ヴロツワフ大学。
参照
参考文献
- ^ “Google Code Jam”. google.com . 2023年5月31日時点のオリジナルよりアーカイブ。 2016年2月20日閲覧。
- ^ 「TCO12 スポンサー: Google - TCO 12」。topcoder.com。2012年2月16日時点のオリジナルよりアーカイブ。
- ^ 「Facebook Hacker Cup」。Facebook 。 2016年2月20日閲覧。
- ^ Li, Yujia; Choi, David; Chung, Junyoung; Kushman, Nate; Schrittwieser, Julian; Leblond, Rémi; Eccles, Tom; Keeling, James; Gimeno, Felix; Lago, Agustin Dal; Hubert, Thomas; Choy, Peter; d'Autume, Cyprien de Masson; Babuschkin, Igor; Chen, Xinyun (2022年12月9日). 「AlphaCodeによる競争レベルのコード生成」. Science . 378 (6624): 1092–1097. arXiv : 2203.07814 . doi :10.1126/science.abq1158. ISSN 0036-8075.
- ^ Khera, Vivek; Astrachan, Owen; Kotz, David (1993). 「インターネットプログラミングコンテスト」(PDF) . ACM SIGCSE Bulletin . 25 (1): 48–52. doi :10.1145/169073.169105. ISSN 0097-8418. 2017年8月8日時点の オリジナル(PDF)よりアーカイブ。 2020年3月10日閲覧。
- ^ Pak, Igor. 「アルゴリズム」.数学182.カリフォルニア大学ロサンゼルス校. 2024年3月31日閲覧。
- ^ プログラミングチャレンジ (スキエナ & レヴィラ) ISBN 0387001638、ISBN 978-0387001630
- ^ コストカ、バルトシュ (2021).スポーツプログラミングの実践(PDF)。ヴロツワフ大学。
- ^ 「プログラミングの楽しみを最終ラウンドで祝う、Google のコーディング コンテスト」。Google Developers ブログ。Google。2023年2 月 28 日閲覧。
- ^ “Code Jam - Google のコーディング コンテスト”.コーディング コンテスト. 2023 年 6 月 27 日時点のオリジナルよりアーカイブ。 2023 年2 月 26 日閲覧。
- ^ “ICPC”. icpc.global . 2023年2月26日閲覧。
- ^ 「プログラミング環境 - ICPC ドキュメント」。2024年2 月 15 日閲覧。
- ^ “ICPC”. icpc.global . 2023年2月26日閲覧。
- ^ “オリンピック”. stats.ioinformatics.org . 2023年2月26日閲覧。
- ^ 「Meta Hacker Cup - 2022 - 予選ラウンド」。www.facebook.com 。 2023年2月26日閲覧。
- ^ 「FAQ - Topcoder CEO ダグ・ハンソン氏による Topcoder コミュニティ タウンホール」。Topcoder。2023年2 月 28 日閲覧。
- ^ abcdef ルイージ、ウィリアム・ディ;ファリーナ、ガブリエレ。ローラ、ルイージ。ナンニ、ウンベルト。テンペリーニ、マルコ。ヴェルサーリ、ルカ(2016)。 「oii-web:対話型オンラインプログラミング oii-web:対話型オンラインプログラミングコンテスト研修システム」(PDF)。情報学オリンピック。10:207–222。土井:10.15388/ioi.2016.13. S2CID 6877554。
- ^ ab Combéfis, Sébastien; Wautelet, Jérémy (2014). 「オンラインコンテストによるプログラミングトレーニングと情報科学教育」(PDF) .情報科学オリンピック. 8 : 21–34.
- ^ abcd Bloomfield, Aaron; Sotomayor, Borja. 「プログラミング コンテスト戦略ガイド」(PDF)。SIGCSE '16: 第 47 回 ACM コンピューティング サイエンス教育技術シンポジウムの議事録。
- ^ Jackson, Dean (2013 年 12 月 1 日)。「Google 技術面接。夢の仕事に就く方法」( PDF)。XRDS : Crossroads、学生向け ACM マガジン。20 (2): 12–14。doi :10.1145/2539270。S2CID 27549057 。
- ^ abcd Smith, Duncan (2015 年 12 月 2 日)。「競技プログラミング論争」。
- ^ Halim, Steven. 「CS3233 - 競技プログラミング」。NUSコンピューティング スクール。
- ^ 「プログラミングコンテストで優勝することは、仕事で優秀であることのマイナス要因である」。YouTube 。 2015年4月5日。
- ^ 「仕事のパフォーマンスと競技プログラミングの相関関係に関するHNの議論」2020年12月。
