コンテンツにスキップ

競技プログラミング

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

競技プログラミング(きょうぎプログラミング、略称: 競プロ)とは、 プログラミングを用いた競技活動を指す言葉である。その定義は、歴史的な変遷や文脈によって、主に以下の3つの意味で用いられる。

  1. 特定の団体とその活動: 日本における「東京大学競技プログラミング同好会」という特定のサークル、およびその活動。
  2. コンテスト形式の総称(: Competitive programming): ICPC(国際大学対抗プログラミングコンテスト)に代表される、時間内に問題を解くコードを記述し正解数を競う競技形式[1][2][3][4]
  3. 関連する知的活動全般: 上記同好会の構成員が好んで取り組んだ、数学的・アルゴリズム的なプログラミング課題(Project Euler等)を含む広範な活動。

概要

[編集]

1. 組織名としての発祥

もともと「競技プログラミング」という言葉は、「東京大学競技プログラミング同好会」という団体、およびその活動内容を指す固有名詞的な側面を強く持っていた。この団体は、主にICPC(国際大学対抗プログラミングコンテスト)に向けた練習会の実施や、それに準じたルールの大会を開催することを主目的としていた[5] [6]

2. コンテスト形式としての定義

上記団体の活動が一般化するにつれ、ICPCに代表される特定のコンテスト形式そのものを指す一般名詞として定着した[6]。この形式における競技プログラミングは、一般的に「複数の問題が与えられ、問題ごとにコードを書き、制限時間内に入出力の一致した問題の数を競うもの」と定義される[1][2][3][4](例:情報オリンピック、Google Code Jam、Topcoder、Codeforces、AtCoder Grand Contest (AGC))。

3. 広義の定義と文化

さらに広義には、「競技プログラミング同好会」の構成員が好んで取り組んでいた、周辺的なプログラミング・チャレンジ全般を包含する[7][8][9]

  • オンラインジャッジ:オンラインでソースコード等を提出すると正誤が判定される仕組み(例:CodeChef、Project Euler、AizuOnlineJudge)。
  • ショートコーディング:入出力の一致するできるだけ短いソースコードを書く(例:Imagine Cup 2008アルゴリズム部門)。
  • 数学的プログラミング(数論・パズル):プログラミングを「数学的な難問を解くための道具」として使用する形式(例:Project Euler)。
  • プログラミングパズル:プログラムにまつわるパズルを解け(例:codepuzzle, python challenge)。
  • 速度最適化コンテスト:入出力の一致する範囲でできるだけ速いプログラムを書く(例:SuperCon)。
  • ヒューリスティック・マラソン形式:厳密な正解が存在しない、あるいは現実的な時間で正解を出すのが困難な「最適化問題」を扱う(例:AtCoder Heuristic Contest (AHC)、Topcoder Marathon Match、ICFP Programming Contest)。
  • 機械学習:最適化問題の中でも機械学習によりできるだけスコアの高いモデルを作成する(例:Kaggle)。
  • AI・ボット競技: プレイヤー同士が作成したプログラム(AI)を対戦させる形式(例:Codingame、ICFP Programming Contest、全国高等専門学校プログラミングコンテスト競技部門)。
  • CTF (キャプチャー・ザ・フラッグ、Capture The Flag): セキュリティ技術を競う。バイナリ解析などでプログラミング能力を要する。

多くのコンテストでオンラインジャッジが採用されている。また、競技プログラミングに参加する人を「競技プログラマ」[10][11]または「競プロer」[12]と呼ぶことがある。

競技プログラミングのコンテストは、プログラミング教育において注目されている競争型学習において演習方法に適しているとする意見もある[13]

歴史

[編集]

古いものとしては1970年代にアメリカのテキサスA&M大学で開催されるようになったen:International Collegiate Programming Contest (ICPC)を挙げることができる[14]。これは2011年大会では88カ国で開催されるまでに成長した。

1990年から1994年にかけて、アメリカのen:Owen Astrachan、Vivek Kheraらが上述のICPCの影響を受けつつインターネット上でプログラミング競技会を開催した[15]

日本において

[編集]

日本では、1980年代から広義のプログラミングコンテストが存在した。主に高校生や高専生を対象とし、審査員が作品や成果を評価する形式が主流であった。以下に代表的な例を挙げる:

1994年には、全国高等専門学校プログラミングコンテストで競技部門が設けられた。しかし、これは「準備してきたプログラムで競う」もので、現在一般的に知られる競技プログラミングとは異なっていた[16]

日本での「なるべく速く正しいコードを書く」趣旨のプログラミングコンテストは、1994年から1997年まで開催された日本情報オリンピック(旧ウェブサイト)が始まりであった[17]。このコンテストは中高生を対象としていた。次いで、1995年には東京工業大学主催のSuperCon(スパコン)が開始した。このコンテストは、「速いコードを書く」「難しい問題に最適解に近い解を出す」ことを目的としている[18]。これらの大会の卒業生を中心に、1998年からは日本も国際大学対抗プログラミングコンテスト(ICPC)に参加し始め、大学生向けのプログラミングコンテストが活発化した。

2003年には、パソコン甲子園が開始され、高校生や高専生を対象とした「なるべく速く正しいコードを書く」部門が設けられた。さらに、2006年には日本情報オリンピックが再び開かれるようになった[17]。2004年には、ICPCのOB/OGによる大学を超えた合同練習会が開催され、ICPC OB/OGの会としての活動が始まった。現在まで続くプログラミングコンテストのコミュニティが出現し、世代を超えた知識の継承や技術向上がされるようになる。また、2004年頃からTopCoderに参加する日本人も現れるようになる。

当時の参加者の証言によると、この時点でまだ「競技プログラミング」という概念はなく、「プロコン」と呼び、参加者を「プロコン勢」と呼んでいた[19][20]。「競技プログラミング」という言葉は、2007年に、東京大学理学部情報科学科に当時所属していた松本宜丈が作成した「東京大学競技プログラミング同好会 2007年春台湾合宿」と銘打ったパンフレットが初出であるとされる[5]。台湾合宿には大学同期12人が参加し、この合宿のメンバーを総称して、東京大学競技プログラミング同好会の名称が付けられた。松本自身は当時東京大学にいくつか存在した「競技○○部」という名前の体育会やサークルから着想を得たと述べている[21][22]。後に東京大学競技プログラミングクラブと改名して継続的な勉強会となり、後輩の育成にも励んだため、競技プログラミングという言葉が広く使われるようになった[5]

OB/OGによる練習会に参加した大学生は、大学でも自主的な練習会を開いていた。その中でも影響の大きかったものが東京大学競技プログラミング同好会である。東京大学競技プログラミングクラブの練習会には、東京大学の学生だけではなく、埼玉大学早稲田大学京都大学などの大学生や筑波大学附属駒場高校の高校生も参加しており、多数のプロコン競技者・教育者を輩出した[23]。また、学生主体で「なるべく速く正しいコードを書く」プログラミングコンテスト UTPCを開催し、社会人、大学生、高専生、高校生などさまざまな人々が参加した[24]。そして、出場者らによって、会津大学プログラミングコンテスト UAPC 2009京都大学プログラミングコンテスト KUPC 2011など様々な大学名を冠したコンテストが開かれるようになった。このため、2010年頃から「競技プログラミング」は練習会の名前としてだけではなく、「なるべく速く正しいコードを書く」コンテストなどを指す用語としても徐々に使われ始めた[5] [6]

その後、出身者によってさらに影響が広がっていった。たとえば、Google Code Jam JapanのスタッフはICPC OB/OG会のスタッフUTPCのスタッフがほとんどである[25]

競技プログラミング同好会の出身者の例[23]
北川宜稔岩田陽一秋葉拓哉 (HITORI++、(iwi)) 「プログラミングコンテストチャレンジブック」の著者[26]。岩田はAtCoder AHC Adminでもある[27]
副島真 (rng_58) TopCoder admin、AtCoder コンテスト監査[27]
原健太朗 (haraken) Google Japan が提供しているSTEPという教育プログラムを立ち上げ400名以上を教育した[28]

高橋直大(AtCoder社代表)もUTPC 2009[24]からのコンテスト参加者である。

なお、UTPC 2011は、AtCoder上で開かれた最初のコンテストであり、現在でも提出が可能である[29]

主要なコンテスト

[編集]

主にインターネット上、各種ウェブサイトで、定期的に開催されている。

下記のリストは、コンテスト以外にも「オンラインジャッジ」を含む(CodeChef、Project EulerAizuOnlineJudgeなどが該当)。また、ICFPCは年によって出題のタイプが変わるが「難しい問題に最適解に近い解を出す」「AIを戦わせる」「パズルを解く」などである。Imagine Cupにも複数の部門があるが「なるべく速く正しいコードを書く」部門はない。

日本国内

[編集]
サイト名 概要 ウェブサイト
AtCoder 高橋直大が代表取締役を務めるAtCoder社が提供するプログラミングコンテストサイト。 atcoder.jp
日本情報オリンピック(Japanese Olympiad in Infomatics(JOI)) 高校生向けプログラミングコンテストの国際情報オリンピック(IOI)の代表選考のためのコンテスト。 www.ioi-jp.org
AizuOnlineJudge 会津大学が公開しているオンラインジャッジICPCの過去問などを出題している。 judge.u-aizu.ac.jp/onlinejudge/

海外

[編集]
サイト名 概要 ウェブサイト
Topcoder アメリカのAppirio社が提供するプログラミングコンテストサイト。 www.topcoder.com
Codeforces ロシアの大学 (Saratov State University) に所属するMike Mirzayanovらが実施するプログラミングコンテストサイト。 codeforces.com
HackerRank英語版 アメリカにあるプログラミングコンテストサイト。 www.hackerrank.com
CodeChef英語版 Directi社が運営・提供するプログラミング学習サイト。 www.codechef.com
Project Euler 数学の問題が出題される。 projecteuler.net

国際大会

[編集]
大会名 略称 概要 ウェブサイト
Google Code Jam GCJ Googleが実施するプログラミングコンテスト。 https://code.google.com/codejam/
Facebook Hacker Cup FHC Facebookが実施するプログラミングコンテスト。 https://www.facebook.com/hackercup/
ACM-ICPC 国際大学対抗プログラミングコンテスト ACM-ICPC 大学対抗のプログラミングコンテスト。1970年から始まり今に続く歴史あるコンテストである。 https://icpc.baylor.edu/
TopCoder Open TCO TopCoderが実施する祭典コンテスト。 (2016年度)https://tco16.topcoder.com/
ICFP Programming Contest英語版 ICFPC 関数型プログラミング言語のカンファレンスが実施するコンテスト。 https://www.icfpconference.org/contest.html
Microsoft Imagine Cup マイクロソフトが実施する学生向けのプログラミングコンテスト。 https://www.imaginecup.com/
国際情報オリンピック(International Olympiad in Informatics) IOI 高校生向けのプログラミングコンテスト。日本人が参加する場合、予選となる日本情報オリンピックに参加して代表に選ばれる必要がある。 ioinformatics.org

人材採用での活用

[編集]

コンピュータサイエンス数学の知識を必要とする問題が多く、新卒学生の採用活動などに使われることもある[30][31][32]TopCoderGoogle Code Jamなどの海外の多くの競技プログラミングサイトでは会員登録の際に求人情報の紹介を受けるかどうかを選択できる。日本においてはリクルート (CODE FESTIVALCODE VSCodeIQ) やギノ (paiza) などで学生や転職希望者向けの求人の紹介が行われているほか、競技プログラミングサイトであるAtCoderではAtCoderでのユーザーのレートを利用した人材採用サービスとしてAtCoderJobsを展開している[33]

国際大会における日本人参加者の成績

[編集]
  • 岩田陽一副島真が「2010 TopCoder Open」の異なる部門で優勝し、日本人が2部門を制した[34]
  • 慶應義塾大学(当時)の高橋直大がMicrosoftが主催するImagine Cup 2008アルゴリズム部門で世界第3位となった[34]
  • 東京大学(当時)の岩田陽一がGoogleが主催するプログラミングコンテスト「Google Code Jam 2009」で3位に入賞[34]

出典

[編集]
  1. 1 2 高橋直大、AtCoder (2016年7月27日). 競技プログラミングを知ろう! [第1回]”. Tech Book Zone Manatee. マイナビ出版. 2016年8月3日閲覧。
  2. 1 2 周藤瞳美「「競技プログラミング」で世界に挑戦してみよう! - TCO15 in Tokyo」『マイナビニュース TECH+』2015年7月22日。2016年8月3日閲覧。
  3. 1 2 小松智希(インタビュアー:西村岳史)「競技プログラミングに参戦、発想力での難問解決を楽しむ」『日経クロステック』、2013年5月15日2016年8月3日閲覧
  4. 1 2 土屋亘「イマドキの“学生プログラマー”は何を考えているの?:求めているのは、楽しさと環境」『ITmedia』2014年11月26日。2016年8月3日閲覧。
  5. 1 2 3 4 競技プログラミングという言葉の誕生”. MAYAH.JP (2019年7月25日). 2020年6月13日閲覧。
  6. 1 2 3 焼き鳥屋で刑法学者と意気投合してコインハイブ事件について書き出すだけの難儀なお仕事”. 2025年6月15日閲覧。
  7. ICFP Programming Contest (2012年9月29日). 2026年2月14日閲覧。
  8. ICFP Programming Contest - 明確な評価軸がある系”. shinh.skr.jp. 2026年2月14日閲覧。
  9. 教え方を教える: ソフトウェアエンジニアリングと中学受験”. 白のカピバラの逆極限 S.144-3 (2025年11月29日). 2026年2月14日閲覧。
  10. フォルサ「中高生の競技プログラマー日本一が決定! 「第21回日本情報オリンピック」」『マイナビニュース』2022年2月16日。2023年7月7日閲覧。
  11. MOLOKHEIYA「特別企画@プログラミング+ 日本のITは"部活"が支えている!! パソコン甲子園2016レポート(前篇)」『ASCII.jp』2016年12月12日。2023年7月7日閲覧。
  12. その2「競プロer増加中!AtCoderの高橋直大さんに会ってみた」(Vol.60 No.10)”. 情報処理学会. 連載漫画「IT紀行」. 2023年7月7日閲覧。
  13. 富永 et al. 2008, p. 50
  14. Li, Yujia; Choi, David; Chung, Junyoung; Kushman, Nate; Schrittwieser, Julian; Leblond, Rémi; Eccles, Tom; Keeling, James et al. (2022-12-09). “Competition-Level Code Generation with AlphaCode”. Science 378 (6624): 1092–1097. arXiv:2203.07814. doi:10.1126/science.abq1158. ISSN 0036-8075.
  15. Khera, Vivek; Astrachan, Owen; Kotz, David (1993). “The internet programming contest”. ACM SIGCSE Bulletin 25 (1): 48–52. doi:10.1145/169073.169105. ISSN 0097-8418. オリジナルの2017-08-08時点におけるアーカイブ。 2020年3月10日閲覧。.
  16. 第05回富山大会(1994) – 全国高等専門学校プログラミングコンテスト OFFICIAL WEBSITE”. 2025年6月15日閲覧。
  17. 1 2 守屋悦朗 日本情報オリンピック”. 2025年6月15日閲覧。
  18. Supercomputing Contest - Supercomputing Programing Contest Official Site”. 2025年6月15日閲覧。
  19. Yuya Unno on X: "私も「競技プログラミング」という名前は @ymatsux さんが名付けたと認識していて、何その名称かっこよすぎうけるwみたいな会話を端末室でした記憶がある。私の世代までは「プロコン」と呼んでいたと思う" / X”. 2025年6月15日閲覧。
  20. 一般社団法人ソフトウェアエンジニアリング協会 - 設立背景”. 2025年6月15日閲覧。
  21. {白,黒}のカピバラの左随伴右随伴 [@ainsophyao] (2019年7月28日). “午後2時14分投稿のツイート”. X(旧Twitter)より2020年6月13日閲覧.
  22. Yoshitake Matsumoto [@ymatsux] (2025年7月14日). “午後10時43分の投稿”. X(旧Twitter)より2025年7月15日閲覧.
  23. 1 2 2008 Team Exercise 1 - 東京大学競技プログラミングクラブ”. 2025年6月15日閲覧。
  24. 1 2 UTPC 2009 最終順位表”. 2025年6月15日閲覧。
  25. Google Developers Japan: Google Code Jam Japan ができるまで”. 2025年6月15日閲覧。
  26. プログラミングコンテストチャレンジブック [第2版]”. 2025年6月15日閲覧。
  27. 1 2 AtCoderの問題クオリティ - AtCoderInfo”. 2025年6月15日閲覧。
  28. “[Kentaro Hara のページ : プログラミング教育”. 2025年6月15日閲覧。
  29. 東京大学プログラミングコンテスト2011”. 2025年6月15日閲覧。
  30. ガチ鈴木「いきなり最終面接も 採用直結の競技プログラミングコンテスト“ドワンゴからの挑戦状”開催」『週刊アスキー』2014年12月26日。2016年8月3日閲覧。
  31. 森川, 潤「次代の教養プログラミング リクルート、ドワンゴが囲い込む、隠れた「天才プログラマー」たち」『NewsPicks』2016年7月30日。2016年8月1日閲覧。
  32. 薬, 文江「トヨタも注目の「競技プログラミング」、最先端のIT人材発掘の場」『日経ビジネス』2022年8月22日。2023年7月7日閲覧。
  33. AtCoderJobs”. 2025年7月22日閲覧。
  34. 1 2 3 西尾泰三「コーダーの聖地「TopCoder Open」で日本人が2部門制覇」『ITmedia』2010年10月19日。2016年8月1日閲覧。

参考文献

[編集]

関連項目

[編集]

関連人物

[編集]

関連分野

[編集]