突然ですがあなたは「AtCoder」をご存知ですか?
知っている、という方はかなりのプログラミング通ですね。
AtCoderはプログラミングを勉強するときに役立つの、、、?
競技プログラミングと普通のプログラミングって何、、、?
そんな疑問をお持ちの方も多いのではないでしょうか。
そこで今回は、AtCoderを本格的に始めてから3ヶ月が経った私が、AtCoderの魅力やAtCoderに関する様々な疑問についてお答えします!
競技プログラミングに興味があるという方、始めてみようかなと思っている方の参考になれば幸いです!
そもそもAtCoderとは?

AtCoderとは、オンラインで参加できる競技プログラミングのサイトのことです。AtCoderでは数多くの過去問を解いたり、リアルタイムのコンテストに参加してプログラミングの腕を競い合うことができます。
使える言語にはC言語やPythonをはじめ、50以上の種類があります。対応していない言語はほとんどないと言えるでしょう。
AtCoder自体は日本の会社が運営するサイトですが、コンテストにはインドや中国、韓国をはじめ様々な国から参加者が集まります。AtCoderは世界の競技プログラミングサイトの中でも最高峰であり、2020年6月時点で登録者数は20万人を突破。そのうち半分ちょっとが日本人ということで、グローバルなサイトであることがわかりますね。
チャレンジできる過去問の数は約3000問あり、十分すぎるほどの問題数が用意されています。また、基本的に毎週土曜日にはリアルタイムのコンテストが行われ、その結果によってレートが変動するようになっています。
競技プログラミングの腕をあげたい、という人にとっては最高の環境だと言えるでしょう!
さて、ここまでAtCoderについて説明してきましたが、「そもそも競技プログラミングって何?」という人もいると思うので、次は「競技プログラミング」というものについて詳しくご紹介します。
競技プログラミングとは?

競技プログラミングとは、プログラミング言語を使って与えられた問題を解き、その正確性やスピードなどを競うものです。練習で身に付けた技能を試合で競い合うという点では、ある種のスポーツのようなものだと言えるでしょう。
最も開催頻度が高く、初心者から上級者まで幅広く参加するコンテストである「AtCoder Beginner Contest」では、1回のコンテストで6問の問題が出題され、1時間40分という制限時間の中で何問解けるかを競います。
回答を提出するとその場で自動採点が行われ、回答の正否が判定されます。コンテストの順位を決定する際には、正解した問題の数に加えて提出までのスピードや誤答の数も考慮されるため、レートをあげていくにはこうした部分も考慮しなければなりません。
プログラミングの能力はもちろんですが、数学的な考察力や、時には豊かな発想力も求められるため、個人的には非常に面白い競技だと思っています!
さて、次はAtCoderを続けていく上でのモチベーションの大きな源泉となる、レートについて詳しく解説します!
AtCoderのレートの仕組み
AtCoderでは、各々の実力に応じてレートがあり、リアルタイムのコンテストに出場するたびにそのレートが更新されていきます。リセマラによって実力以上の値が出てしまったりしないよう、出場回数が少ないうちはレートが低めに出るので、まだ数回しかコンテストに出ていない時のレートは実力に対して低い値になっています。
またAtCoderではレートに応じた色分けがなされており、界隈ではこの色によって実力を判断することが多いです。レートの値と色の対応は以下の通り。位置付けやレベルについてはAtCoderの社長であるchokudaiさんのブログを参考にしました。
レート | 色 | 位置付け | レベル |
1-399 | 灰色 | 1回以上コンテストに参加すれば誰でもなれる | |
400-799 | 茶色 | 上位50% | ちゃんと勉強している情報系の学生くらい |
800-1199 | 緑色 | 上位30% | 学生ならかなり優秀、エンジニアとしてもある程度安心できる |
1200-1599 | 水色 | 上位15% | アルゴリズム能力では半数以上のIT企業においてカンスト |
1600-1999 | 青色 | 上位7% | 超優秀、一部企業では少し持て余すかも |
2000-2399 | 黄色 | 上位3% | 9割以上のIT企業において要求水準以上のレベル |
2400-2799 | 橙色 | 上位1% | ごく一部の企業でしか生かしきれないかも |
個人的な所感ですが、progateなど何かしらの形でプログラミング学習を行っており、コンテストにも何度か出場すれば茶色まではいけるのではないかと思います。緑色以降になっていくには、よっぽど才能のある人でない限りはアルゴリズムの勉強をしていく必要があるでしょう。
私はまだ緑色なのでそれ以上のところまで詳しく説明することはできませんが、少なくとも水色まではあまり停滞せずに行けそうな感じがしています。
色が変わるにはレートが400上がらなければいけないので時間はかかりますが、その分色が変わった時の喜びはひとしおです。また、Twitterなどで色変(色が変わること)を報告するとたくさんの人に祝ってもらえるのも嬉しい文化です。
レートは、AtCoderにログインしたあと以下の写真のように右上にある自分のユーザー名をクリックし、「マイプロフィール」のボタンをクリックすることで見ることができます。モチベーションが下がってしまった際には、ここから過去の自分の軌跡を見ることでやる気を復活させるのがオススメです。

さて、次は具体的なコンテストの参加方法について見ていきましょう!
AtCoderのコンテストの参加方法は?
AtCoderのコンテストに参加するには、参加資格などはありません。
コンテストの開催時間を事前に確認しておき、その時間になったらAtCoderのコンテスト画面にアクセスするだけ。コンテストの開催時間はAtCoderの公式TwitterやAtCoderホームページの告知などで確認することができます。基本的に毎週土曜日の21:00〜22:40の100分間に開催されることが多いです。
最もオーソドックスなコンテストである「AtCoder Beginner Contest」では毎回A問題からF問題の6問が出題されます。名前こそ「AtCoder Beginner Contest」とついていますが、実際にはE問題やF問題は難しく、初心者から上級者までみんなが挑戦するコンテストだと考えて良いでしょう。
問題に対する回答を提出すると、その場で自動で判定が行われます。緑色の文字でACと判定されれば正解、それ以外の黄色の文字の判定ならば不正解です。不正解の判定時によく見るのはWA(答えが間違っている)、TLE(実行時間制限超過)、RE(プログラム実行中にエラー発生)などです。
ACするためには全てのテストケースに対して正解の答えを返す必要があり、一つでもエラーや不正解、実行時間制限超過などがあると不正解と判定されてしまうので注意が必要です。
各問題には配点が設定されており、正解するとその点数を獲得することができます。獲得した点数の合計と点数を獲得するまでにかかった時間が順位に影響します。不正解は一つにつき5分のペナルティがついてしまうので、提出する前には提示された入力例に対して正しい出力を出すかどうか確認してから提出すると良いでしょう。
コンテスト終了後にはYouTubeやPDFファイルによる解説を見ることができるので、わからなかった問題については終了後すぐに復習することもできます。
まとめ
この記事の概要をまとめると、以下のようになります。
- AtCoderとは、世界最高峰の競技プログラミングサイト
- 競技プログラミングとは、プログラミング言語を使って問題を解き、その早さや正確性を競うもの
- AtCoderでは各個人にレートがあり、レートに応じて色分けされている
- コンテストの開催時間は基本的に毎週土曜日の21:00〜22:40
最近では、小学校のカリキュラムにもプログラミングが取り入れられるようになりましたね。
AtCoderはプログラミングの勉強になるだけでなく、趣味としてもスポーツのような感覚で取り組むことができるため、誰でも楽しむことができると思います!
ぜひあなたも競技プログラミングの世界に足を踏み入れてみませんか?