やむなく日記

競プロやCTF、ゲームなどの日記を書きます

競プロコンテストサイトを7つぐらいまとめる

こんにちは、精進していますか?

KMC1回生のyamunakuといいます。

この記事は KMC Advent Calendar 2018 - Adventar の12日目の記事です。

adventar.org

 

競技プログラミングについて

競技プログラミング(競プロ)とは、「プログラムを書いて、与えられた課題を決められた以上の効率で解決する競技」のことです。

問題を考察し、効率よく解くための手法(アルゴリズム)を考えて、それを素早く正確にプログラムとして記述する能力を競います。

 

この記事について

この記事では、競プロのコンテストサイトを7つぐらいまとめます。

この記事の対象は、競プロに慣れてきたから、今やってるのとは違うコンテストサイトの存在も知りたい、という方です。

競プロを始めたばかりの方や、これから始めたいという方には AtCoder というコンテストサイトを強くおすすめしています。まずはここで練習してみましょう。

本当に初めての方は、[競プロ はじめて] などでググるとよいです。ありがたい導入ブログが数多く見つかります。

 

コンテストサイトの特徴

コンテストの多くは特定のサイトでだいたい定期的に開催されています。

サイトによってその頻度はまちまちですが、今から挙げるサイトは比較的高い頻度でコンテストを開催しています。

それぞれのサイトには様々な特徴があります。共通してみられる特徴についてはここで説明しておきます。

言語

日本以外のサイトで行われるコンテストでは、基本的に現地の公用語と英語だけがサポートされています。また海外コンテストは現地時間に合わせて開催されるので、開催時刻が深夜になることが多いです。

フィードバック
  • フル: 解答提出直後に完全なテストが行われ、すぐに正誤が確定します。
  • 不完全: 解答提出直後は一部のテストが行われるだけで、コンテスト終了後に完全なテストが行われます。
  • なし: コンテスト終了後に初めてテストが行われます。

フィードバックがフルでないときは、コンテスト中に自分のコードの正しさが保証されないので不安になります。コーナーケースをエスパーする力は身に付きます。

解答形式
  • 標準出力: 解答を標準出力します。
  • メソッドの戻り値: 解答をメソッドの戻り値として返します。

メソッドの戻り値として返すタイプでは、コンテストページにコーディング環境が備え付けられていることが多いですが、標準出力を表示する画面がないことがほとんどで、デバッグが非常にやりづらいです。手元の環境で書こうとしても、標準入力に対応しにくい入力形式であることが多く、あまり嬉しくないです。

 

 コンテストサイト紹介

1. AtCoder

beta.atcoder.jp

  • 頻度: 月2~4回
  • 言語: 日本語
  • フィードバック: フル
  • 解答形式: 標準出力

いわずと知れた日本のコンテストサイトです。最近はこのサイトから競プロを始めた方が多いのではないでしょうか。

問題の難易度と配点が紐づいているので、配点を見るとその問題が自分に適したものなのかがわかるのが特徴です。

主に次の3つのコンテストが開催されます。

AtCoder Beginner Contest (ABC)
  • 時間: 100分
  • 問題数: 4問
  • 配点: 傾斜

ほぼ毎週行われる、初めての方向けのコンテストです。

AtCoder Regular Contest (ARC)
  • 時間: 100分
  • 問題数: 4問
  • 配点: 傾斜

競プロに慣れた方向けのコンテストです。

開催されるときはABCと同時開催で、ABCの後半2問がARCの前半2問として、残りの2問はARCオリジナルとして出題されます。

AtCoder Grand Contest (AGC)
  • 時間: 120分
  • 問題数: 6問
  • 配点: 傾斜

初めての方からプロの方まで、幅広い難易度の問題があるコンテストです。

月に1回ほど開催されます。

 

2. Codeforces

codeforces.com

  • 頻度: 月10回程度
  • 言語: 英語
  • フィードバック: 不完全
  • 解答形式: 標準出力

ロシアのユーザ投稿型のコンテストサイトです。

コンテスト回数が非常に多く、コミュニティが活発なことが特徴です。

併設されているブログでアルゴリズムやデータ構造を学んだり、解法の議論を眺めたりすることができます。

レートによって異なるDivisionに振り分けられ、コンテストではそのDivisionにあった問題が出題されます。

主に次の2つのコンテストが開催されます。

Codeforces Round
  • 時間: 120分程度
  • 問題数: 5~7問
  • 配点: 傾斜

各問題の配点は時間が経つごとに減少していきます。

提出した自分の解答が弱めのテストを通過すると、自分の解答をLockできるようになります。

Lockすると解答の再提出ができなくなりますが、他の人が提出したコードを読むことができるようになり、他の人のコードをバグらせる(Hackする)ことで追加の得点を得られます。

Educational Codeforces Round
  • 時間: 120分程度
  • 問題数: 7問
  • 配点: 均等

解答までにかかった時間の合計がペナルティになります。

Hackはコンテスト中にはできず、終了後12時間の間に行えます。しかし、成功しても得点は得られません。

これら以外の企業コンテストなども頻繁に開催されています。

 

3. Topcoder

www.topcoder.com

  • 頻度: 月2回程度
  • 言語: 英語
  • フィードバック: なし
  • 解答形式: メソッドの戻り値

古くからあるコンテストサイトです。

コンテストページまでたどり着くのがむずすぎる

登録した後、[Topcoder Arena] で検索すると、簡単にコンテストページにたどり着けます。

このサイトにも2つのDivisionがあります。

 Single Round Match
  • 時間: 75分
  • 問題数: 3問
  • 配点: 傾斜

75分のCoding Phaseで解答を書きます。

各問題の配点は、その問題のページを開いてから時間が経つと減少していきます。

その後、15分のHacking Phaseで相手の解答をHackし、成功すれば追加の得点を得ることができます。

 

4. CodeChef

www.codechef.com

  • 頻度: 月3回以上
  • 言語: 英語
  • フィードバック: フル
  • 解答形式: 標準出力

インドのコンテストサイトです。

このサイトにも2つのDivisionがあります。

主に次の3つのコンテストが開催されます。

Challenge
  • 時間: 14400分(10日)
  • 問題数: 8問
  • 配点: 均等

ラソン1問とマラソン以外7問が一緒になって出題されます。

コンテスト時間が長い分、歯ごたえのある問題が多いです。

僕も現在このコンテストに挑戦しています。

Lunchtime
  • 時間: 180分
  • 問題数: 5問
  • 配点: 均等

部分点があります。

Cook-Off
  • 時間: 150分
  • 問題数: 5問
  • 配点: 均等

部分点はありません。

これらのコンテストで上位をとったり、皆勤したりするとポイントがたまり、Tシャツやリュックや豪華景品などと交換することができます。

 

5. LeetCode

leetcode.com

  • 頻度: 月4回
  • 言語: 英語
  • フィードバック: フル
  • 解答形式: メソッドの戻り値
  • 時間: 120分
  • 問題数: 4問

毎週日曜日のAM11:30から開催されます。

問題は簡潔で難しくないことが多いですが、デバッグが非常にやりにくいです。

上位をとったり、問題を提供したりするとポイントがたまり、Tシャツと交換することができます。

 

6. YukiCoder

yukicoder

  • 頻度: 月2,3回
  • 言語: 日本語
  • フィードバック: フル
  • 解答形式: 標準出力
  • 配点: 傾斜

日本のユーザ投稿型のコンテストサイトです。

研究的な問題が多いような気がします。

僕はコンテストには参加したことがないので、何も言えません。

 

7. HackerRank

www.hackerrank.com

  • 頻度: 2か月に1回以上
  • 言語: 英語
  • フィードバック: 不明
  • 解答形式: ファイル出力

自分が用意した問題で非公式のコンテストを好きに開くことができることが特徴です。

HourRank
  • 時間: 120分
  • 問題数: 4問

上位に入るとTシャツがもらえます。

僕はコンテストには参加したことがありませんが、練習問題が豊富です。

 

おわり

存在するすべてのコンテストに出ようとすると、生活習慣が乱れます。

 

明日13日のアドベントカレンダーは、pastakさんの「npmモジュールのアップデートを良い感じに楽するためのアイデア」です。

adventar.org