競技プログラミング
競技プログラミング(きょうぎプログラミング、英: Competitive programming、略称: 競プロ)とは、 解くべきプログラミング課題が与えられ、プログラムを作成し、解くまでにかかった時間や正解数などを競い合う競技[1][2][3][4]。
概要
[編集]競技プログラミングでは、参加者全員に同一の課題が出題され、より早く与えられた要求を満たすプログラムを正確に記述することを競う[1]。コンピュータサイエンスや数学の知識を必要とする問題が多く、新卒学生の採用活動などに使われることもある[5][6][7]。多くのコンテストでオンラインジャッジが採用されている。また、競技プログラミングに参加する人を「競技プログラマ」[8][9]または「競プロer」[10]と呼ぶことがある。
競技プログラミングのコンテストは、プログラミング教育において注目されている競争型学習において演習方法に適しているとする意見もある[11]。
歴史
[編集]古いものとしては1970年代にアメリカのテキサスA&M大学で開催されるようになったen:International Collegiate Programming Contest (ICPC)を挙げることができる[12]。これは2011年大会では88カ国で開催されるまでに成長した。
1990年から1994年にかけて、アメリカのen:Owen Astrachan、Vivek Kheraらが上述のICPCの影響を受けつつインターネット上でプログラミング競技会を開催した。[13]
日本において
[編集]日本では、1980年代から広義のプログラミングコンテストが存在した。主に高校生や高専生を対象とし、審査員が作品や成果を評価する形式が主流であった。以下に代表的な例を挙げる:
- 1980年:全国高校生プログラミングコンテスト(後にU-22プログラミングコンテストに改名)
- 1990年:全国高等専門学校プログラミングコンテスト
- 2002年:日本学生科学賞ソリューション部門(後に情報技術部門に改名)
1994年には、全国高等専門学校プログラミングコンテストで競技部門が設けられた。しかし、これは「準備してきたプログラムで競う」もので、現在一般的に知られる競技プログラミングとは異なっていた[14]。
日本での「なるべく速く正しいコードを書く」趣旨のプログラミングコンテストは、1994年から1997年まで開催された日本情報オリンピック(旧ウェブサイト)が始まりであった[15]。このコンテストは中高生を対象としていた。次いで、1995年には東京工業大学主催のSuperCon(スパコン)が開始した。このコンテストは、「速いコードを書く」「難しい問題に最適解に近い解を出す」ことを目的としている[16]。これらの大会の卒業生を中心に、1998年からは日本も国際大学対抗プログラミングコンテスト(ICPC)に参加し始め、大学生向けのプログラミングコンテストが活発化した。
2003年には、パソコン甲子園が開始され、高校生や高専生を対象とした「なるべく速く正しいコードを書く」部門が設けられた。さらに、2006年には日本情報オリンピックが再び開かれるようになった[15]。2004年には、ICPCのOB/OGによる大学を超えた合同練習会が開催され、ICPC OB/OGの会としての活動が始まった。現在まで続くプログラミングコンテストのコミュニティが出現し、世代を超えた知識の継承や技術向上がされるようになる。また、2004年頃からTopCoderに参加する日本人も現れるようになる。
当時の参加者の証言によると、この時点でまだ「競技プログラミング」という概念はなく、「プロコン」と呼び、参加者を「プロコン勢」と呼んでいた[17][18]。「競技プログラミング」という言葉は、2007年に、東京大学理学部情報科学科に当時所属していた松本宜丈が作成した「東京大学競技プログラミング同好会 2007年春台湾合宿」と銘打ったパンフレットが初出であるとされる[19]。台湾合宿には大学同期12人が参加し、この合宿のメンバーを総称して、東京大学競技プログラミング同好会の名称が付けられた。松本自身は競技ダンスからの類推でつけたと述べている[20]。後に東京大学競技プログラミングクラブと改名して継続的な勉強会となり、後輩の育成にも励んだため、競技プログラミングという言葉が広く使われるようになった[19]。
OB/OGによる練習会に参加した大学生は、大学でも自主的な練習会を開いていた。その中でも影響の大きかったものが東京大学競技プログラミング同好会である。東京大学競技プログラミングクラブの練習会には、東京大学の学生だけではなく、埼玉大学、早稲田大学、京都大学などの大学生や筑波大学附属駒場高校の高校生も参加しており、多数のプロコン競技者・教育者を輩出した[21]。また、学生主体で「なるべく速く正しいコードを書く」プログラミングコンテスト UTPCを開催し、社会人、大学生、高専生、高校生などさまざまな人々が参加した[22]。そして、出場者らによって、会津大学プログラミングコンテスト UAPC 2009、京都大学プログラミングコンテスト KUPC 2011など様々な大学名を冠したコンテストが開かれるようになった。このため、2010年頃から「競技プログラミング」は練習会の名前としてだけではなく、「なるべく速く正しいコードを書く」コンテストなどを指す用語としても徐々に使われ始めた[19]。
その後、出身者によってさらに影響が広がっていった。たとえば、Google Code Jam JapanのスタッフはICPC OB/OG会のスタッフやUTPCのスタッフがほとんどである[23]。
北川宜稔、岩田陽一、秋葉拓哉 (HITORI++、(iwi)) | 「プログラミングコンテストチャレンジブック」の著者[24]。岩田はAtCoder AHC Adminでもある。[25] |
副島真 (rng_58) | TopCoder admin、AtCoder コンテスト監査[25] |
原健太朗 (haraken) | Google Japan が提供しているSTEPという教育プログラムを立ち上げ400名以上を教育した[26]。 |
高橋直大(AtCoder社代表)もUTPC 2009[22]からのコンテスト参加者である。
なお、UTPC 2011は、AtCoder上で開かれた最初のコンテストであり、現在でも提出が可能である[27]。
主要なコンテスト
[編集]主にインターネット上、各種ウェブサイトで、定期的に開催されている。
下記のリストは、コンテスト以外にも「オンラインジャッジ」を含む(CodeChef、Project Euler、AizuOnlineJudgeなどが該当)。また、ICFPCは年によって出題のタイプが変わるが「難しい問題に最適解に近い解を出す」「AIを戦わせる」「パズルを解く」などである。Imagine Cupにも複数の部門があるが「なるべく速く正しいコードを書く」部門はない。
日本国内
[編集]サイト名 | 概要 | ウェブサイト |
---|---|---|
AtCoder | 高橋直大が代表取締役を務めるAtCoder社が提供するプログラミングコンテストサイト。 | atcoder |
日本情報オリンピック(Japanese Olympiad in Infomatics(JOI)) | 高校生向けプログラミングコンテストの国際情報オリンピック(IOI)の代表選考のためのコンテスト。 | www |
AizuOnlineJudge | 会津大学が公開しているオンラインジャッジ。ICPCの過去問などを出題している。 | judge |
海外
[編集]サイト名 | 概要 | ウェブサイト |
---|---|---|
Topcoder | アメリカのAppirio社が提供するプログラミングコンテストサイト。 | www |
Codeforces | ロシアの大学 (Saratov State University) に所属するMike Mirzayanovらが実施するプログラミングコンテストサイト。 | codeforces |
HackerRank | アメリカにあるプログラミングコンテストサイト。 | www |
CodeChef | Directi社が運営・提供するプログラミング学習サイト。 | www |
Project Euler | 数学の問題が出題される。 | projecteuler |
国際大会
[編集]大会名 | 略称 | 概要 | ウェブサイト |
---|---|---|---|
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 |
人材採用での活用
[編集]TopCoderやGoogle Code Jamなどの海外の多くの競技プログラミングサイトでは会員登録の際に求人情報の紹介を受けるかどうかを選択できる。日本においてはリクルート (CODE FESTIVAL、CODE VS、CodeIQ) やギノ (paiza) などで学生や転職希望者向けの求人の紹介が行われている。
国際大会における日本人参加者の成績
[編集]- 岩田陽一、副島真が「2010 TopCoder Open」の異なる部門で優勝し、日本人が2部門を制した[28]。
- 慶應義塾大学(当時)の高橋直大がMicrosoftが主催するImagine Cup 2008アルゴリズム部門で世界第3位となった[28]。
- 東京大学(当時)の岩田陽一がGoogleが主催するプログラミングコンテスト「Google Code Jam 2009」で3位に入賞[28]。
出典
[編集]- ^ a b 高橋直大、AtCoder (2016年7月27日). “競技プログラミングを知ろう! [第1回]”. Tech Book Zone Manatee. マイナビ出版. 2016年8月3日閲覧。
- ^ 周藤瞳美「「競技プログラミング」で世界に挑戦してみよう! - TCO15 in Tokyo」『マイナビニュース TECH+』2015年7月22日。2016年8月3日閲覧。
- ^ 小松智希(インタビュアー:西村岳史)「競技プログラミングに参戦、発想力での難問解決を楽しむ」『日経クロステック』、2013年5月15日 。2016年8月3日閲覧。
- ^ 土屋亘「イマドキの“学生プログラマー”は何を考えているの?:求めているのは、楽しさと環境」『ITmedia』2014年11月26日。2016年8月3日閲覧。
- ^ ガチ鈴木「いきなり最終面接も 採用直結の競技プログラミングコンテスト“ドワンゴからの挑戦状”開催」『週刊アスキー』2014年12月26日。2016年8月3日閲覧。
- ^ 森川, 潤「次代の教養プログラミング リクルート、ドワンゴが囲い込む、隠れた「天才プログラマー」たち」『NewsPicks』2016年7月30日。2016年8月1日閲覧。
- ^ 薬, 文江「トヨタも注目の「競技プログラミング」、最先端のIT人材発掘の場」『日経ビジネス』2022年8月22日。2023年7月7日閲覧。
- ^ フォルサ「中高生の競技プログラマー日本一が決定! 「第21回日本情報オリンピック」」『マイナビニュース』2022年2月16日。2023年7月7日閲覧。
- ^ MOLOKHEIYA「特別企画@プログラミング+ 日本のITは"部活"が支えている!! パソコン甲子園2016レポート(前篇)」『ASCII.jp』2016年12月12日。2023年7月7日閲覧。
- ^ “その2「競プロer増加中!AtCoderの高橋直大さんに会ってみた」(Vol.60 No.10)”. 情報処理学会. 連載漫画「IT紀行」. 2023年7月7日閲覧。
- ^ 富永 et al. 2008, p. 50
- ^ 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.
- ^ 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日閲覧。.
- ^ “第05回富山大会(1994) – 全国高等専門学校プログラミングコンテスト OFFICIAL WEBSITE”. 2025年6月15日閲覧。
- ^ a b “守屋悦朗 日本情報オリンピック”. 2025年6月15日閲覧。
- ^ “Supercomputing Contest - Supercomputing Programing Contest Official Site”. 2025年6月15日閲覧。
- ^ “Yuya Unno on X: "私も「競技プログラミング」という名前は @ymatsux さんが名付けたと認識していて、何その名称かっこよすぎうけるwみたいな会話を端末室でした記憶がある。私の世代までは「プロコン」と呼んでいたと思う" / X”. 2025年6月15日閲覧。
- ^ “一般社団法人ソフトウェアエンジニアリング協会 - 設立背景”. 2025年6月15日閲覧。
- ^ a b c “競技プログラミングという言葉の誕生”. MAYAH.JP (2019年7月25日). 2020年6月13日閲覧。
- ^ {白,黒}のカピバラの左随伴右随伴 [@ainsophyao] (2019年7月28日). "午後2時14分投稿のツイート". X(旧Twitter)より2020年6月13日閲覧。
- ^ a b “2008 Team Exercise 1 - 東京大学競技プログラミングクラブ”. 2025年6月15日閲覧。
- ^ a b “UTPC 2009 最終順位表”. 2025年6月15日閲覧。
- ^ “Google Developers Japan: Google Code Jam Japan ができるまで”. 2025年6月15日閲覧。
- ^ “プログラミングコンテストチャレンジブック [第2版]”. 2025年6月15日閲覧。
- ^ a b “AtCoderの問題クオリティ - AtCoderInfo”. 2025年6月15日閲覧。
- ^ “[Kentaro Hara のページ : プログラミング教育”. 2025年6月15日閲覧。
- ^ “東京大学プログラミングコンテスト2011”. 2025年6月15日閲覧。
- ^ a b c 西尾泰三「コーダーの聖地「TopCoder Open」で日本人が2部門制覇」『ITmedia』2010年10月19日。2016年8月1日閲覧。
参考文献
[編集]- 富永, 浩之、倉田, 英和、林, 敏浩、安藤, 一秋、垂水, 浩幸「コンテスト形式による初級Cプログラミングの演習支援」『情報処理学会研究報告 コンピュータと教育(CE)』第42号、情報処理学会、2008年、49-56頁。