競技プログラミングってなに?初心者も知っておくべき言語や参加方法
競技プログラミング(競プロ)とは、プログラミングのスピードと正確さを競う競技です。特定の言語を使って決まった動作をするようを構築するところは通常のプログラミングと変わりませんが、与えられた課題(要件)を満たすプログラムを「いかに早く、かつ正確に」記述できるかを争う点が異なります。
競技プログラミングの大会は、主にインターネット上で開催されています。参加するのに特別な資格は基本的に必要なく、プログラミングの知識がありさえすれば誰でも競技者になることが可能です。
「競技」という言葉からは非常に厳格なイメージを受けますが、実際には一定のルールに沿って問題を解く「パズルゲーム」に近く、参加者もある種の娯楽として受け止めている面があります。それは競技プログラミングコンテストを開催しているAtCoder(アットコーダー)の代表、高橋直大さんが実施したTwitter上でのアンケートにも表れています。
(参考:庵通報「超高度IT人材の宝庫、「AtCoder」の実態とは?」)
この記事では、競技プログラミング初心者に向けて、その概要から参加方法まで紹介します。
目次
競技プログラミングでは「スピード」と「質」が競われる
競技プログラミングでは、主催者から出題された課題を満たすプログラムを記述し、解決することが主な目標とされます。ただ課題通りの動作をすればよいわけではなく、かかったタイムや、プログラミングそのものの性能によりスコアが変わります。「プログラミングの性能」とは、課題に即した仕様に仕上がっているかはもちろん、実行速度や記述の仕方なども含まれます。
競技プログラミングには大きく分けて、よりよい記述をすることを目指す「マラソン部門」と、スピーディに正確な記述を目指す「アルゴリズム部門」があります。競技の制限時間、課題の内容、使用するプログラミング言語など、課題の条件はコンテストによってさまざまです。
それらの制限をいかにクリアして進められるかが競技の焦点となります。
競技プログラミングへの参加方法
競技プログラミングに参加したい場合は、各種コンテストを主催しているWebサイトを見つけるのがもっともポピュラーでしょう。日本をはじめ、世界中に多くの競技プログラミングサイトが存在します。日本の競技者にとって参加しやすいコンテストであれば、次のようなものがあります。
日本国内で代表的な「AtCoder」
前述したAtCoderとは、日本国内で最大級の競技プログラミング主催サイト、およびその運営元である株式会社AtCoderのことを表します。コンテスト参加者には日本人に限らず、世界中からレベルの高いプログラマーが集まっています。毎週土曜日の夜9時から開催され、毎回5,000名を超える参加者が自身のプログラミングの腕を確かめあっているようです。
国際情報オリンピックを目指すなら「日本情報オリンピック」
日本情報オリンピックは「JOI」という名前でも呼ばれる、高校生を対象に開催される大会で、「国際情報オリンピック」の予選としても機能しています。国際情報オリンピック(IOI)は1989年から続く、高校生のための競技プログラミングのコンテスト。JOIを勝ち抜いた競技者は、日本代表選手として出場する権利が得られます。日本情報オリンピックでは競技は個人戦で行われ、5時間の制限時間で3問~4問の課題に回答する競技を2日間行います。
国際的に権威あるコンテストに出たいなら「Google Code Jam」
Google Code Jamとは、その名の通りGoogleが主催する国際的な競技プログラミング大会です。世界中から腕に覚えのあるプログラマーが集まり、予選(Qualification Round)から決勝(World’s Finals)まで全5回のラウンドを戦います。Round3まで進出した競技者には、参加賞としてオリジナルTシャツが進呈されるようです。
競技プログラミングで使用される言語は多種多様
現在、世の中で利用されているプログラミング言語は非常に多くの種類があります。競技プログラミングで使える言語は、主催する団体によって異なります。
たとえば、AtCoderであれば、2021年現在30以上の種類が利用可能です(一覧はこちら)。AtCoder主催のコンテストに利用できるものの中から、「これからプログラミングを始めてみようかな」と考えている初心者の人も触れやすいものを紹介します。
Python(パイソン)
Pythonは機械学習やディープラーニングといった人工知能領域の研究から、発展的なWebアプリ開発にまで利用されているプログラミング言語です。文法が平易で記述しやすいため、初心者でもとっつきやすいといわれています。1991年にオランダ人プログラマーによって開発されたのち、現在はオープンソースで運営されています。「書きやすく読みやすいコード」という理念のもとに生まれ、関連プログラムをまとめた「ライブラリ」は数万にのぼるため、既存のライブラリを活用して自身のプログラミングを簡単に進めることが可能です。
C言語
C言語は非常に多くのプログラマーがさまざまな場面で利用しているプログラミング言語です。利用者の母数が多いため、書きたいプログラムのサンプルや、共有されたノウハウへのアクセスが簡単です。人間の言葉に近い「高級言語」の側面と、PCなどのハードウェアが読む機械語(アセンブラ)に近い側面を合わせ持っています。そのためC言語を学ぶことで、その他のプログラミング言語を学ぶ際の基礎知識を得ることにもつながります。
Java(ジャバ)
Javaは世界中で利用されてきた実績があり、現在でも習得しておきたい言語として地位を保っています。OSに依存しないため、一度プログラミングした内容がどんな環境でも安定して動作する点に大きなメリットがあります。開発時にはJDK(Java Development Kit)と呼ばれるツールを公式サイトから無料ダウンロードし、環境を構築する必要があります。Webサーバー上で動くアプリケーションからオンラインゲームまで、さまざまな用途に利用することが可能です。
競技プログラミングを通してプログラミングを楽しく学ぶ
競技プログラミングのコンテストは、既にある程度スキルを持っている人が実力を試す場としてはもちろん、始めたばかりの初心者やこれから学びたい人の実践の場としてもちょうどよいでしょう。
プログラミングに限ったことではありませんが、具体的な目的無く、「ただなんとなく」勉強していても身につく効率は悪くなります。勉強した内容を活かし、競技プログラミングに出場することで、「インプット」と「アウトプット」のバランスが取れるはずです。
スコアを学習のマイルストーンとすることで、現在自分がどの程度のスキルを有しているかが可視化され、学習効率化につながります。
RANKING ランキング
- WEEKLY
- MONTHLY
UPDATE 更新情報
- ALL
- ARTICLE
- MOVIE
- FEATURE
- DOCUMENT