AtCoder
競技プログラミングサイトの1つ。
プログラム的に解けるような問題が出題されるので、入力から正しい答えを出力できるプログラムを書く。ちゃんと出力があってたら正解。合計得点や回答の速さを競う。
- 特徴
- 原則的に土曜日の夜から何かしらのプログラミングコンテストが開かれる
- 日本の運営
- 問題文が日本語
- 日本人が参加しやすい時間帯
- 解答に使えるプログラム言語が豊富
- コンテスト終了後に復習しやすい
- 他の人の解答が見られる
- 定例的なコンテストに対して、出題者または運営による解説PDFがアップロードされる
- 定例的なコンテストに対して、YouTubeで解説生放送が開かれる
ステキ周辺サービス(公式とは限らない)
-
- 過去問を、自身やライバルの AC済み/挑戦済み/未挑戦 や、難易度で色別に一覧できる
- 自分の解いた問題の難易度に合わせ、次に解けそうな未挑戦の問題を提案してくれる
- ユーザのStreak数、A問題,B問題,毎のAC数などの統計情報が見られる
-
- 過去問をスコア別に集計、自身やライバルのACしたスコア分布などを一覧できる
-
- 参加したコンテストの順位の時間変動を見られる
-
- 過去問を使って疑似コンテストを行える
-
- レーティングを使って企業と求職者をマッチング
- 拡張
-
- 学習用言語Scratchで解ける(C++に変換して提出してくれる)
-
- 公式ページの参加者やパフォーマンス表示箇所の横に、レーティングに応じた色付きの円を追加
-
- Dropbox上にテストケースが公開されている過去問は、提出詳細ページの各テストケース名の横に入力・出力へのリンクを追加
関連記事
登録
入出力
最初に解くべき問題
PythonでAtCoder
競技プログラミングは計算速度が求められるため、基本的に C++ などの高速なコンパイル言語を使うことが半ば暗黙の常識となっている面がある。
Pythonはスクリプト言語で、計算速度は速いとは言えない、というか遅い。
だが、AtCoderでは1000点~などの高難度の問題でもない限り、きちんと実装すればほとんどの問題は通る。(注: 高難度の問題も多くは通るはず。ただし自分が多くは解けてないので、その割合は知らない)
この「きちんと実装すれば」がポイントで、逆に言うと C++ などでは多少効率の悪いプログラムを書いても通ってしまうことがあるが、Pythonだとなかなかそうはいかない。
ポジティブに考えると、それだけアルゴリズムを正しく使いこなす力が身につくって事だね!(本当か?)
- メリット
- 環境構築しやすい
- 記述量が少ない
- 最近、機械学習とかで流行りなので、本業の分野によっては知識を相互に活かせる
- PyCharmという高機能IDEが無料で使える
- AtCoderでは、PyPyという、Pythonコードを高速に実行する実行時コンパイル言語を使うことができる
- NumPyなど一部のライブラリが使えないが、基本的に同じコードで動き、書き換えの必要は無い
- これにより、一般的なスクリプト言語では計算量が厳しい問題でも、PyPyなら通せたりする
- デメリット
- 遅い
- 高速化のために、あまりアルゴリズムの本筋とは関係ない言語固有の高速化知識が必要になることがある
- 難しい問題はPythonで挑戦している人が少ないので、参考に出来るコードが無いことが多い
- C++、Java以外のほとんどの言語に同じ事が言えるかも
- 他の競技プログラミングサイトでは、AtCoderほどPythonでも通せることに配慮されてない、かも
- AtCoderでは、特にABCなどでは、遅い言語にも配慮されている感じがする(※個人の感想)
- だからといって別に全ての言語で通せる保証が無いことはきちんと明言されているので、通らなくても文句は言わない
- Pythonの強みである豊富な第三者モジュールがあまり使えないので、自前で実装する必要があることがある
競技プログラミングを「競技」として勝ちにこだわるのであれば、最初から C++ やるか、少なくともPythonと平行で C++ などを書けた方がいいだろなあという気はする。
Python他の高機能言語も、計算量が問題にならない問題に対しては簡単に素早く書けるというメリットはあるとは思う。 従って理想を言うなら両刀使いが強そうだが、言語の切り替え判断が競技中に適切に出来るかというと……まぁ難しいので、基本は高速な言語を優先した方がいい。
そうでは無くて、言語の習得がてらとか、元からPythonやってたとかで、敷居低く楽しみながら参加するのであれば、「Pythonでも十分戦えるよ」ということは言えると思う。
Python3ライブラリ・テクニック・読み物
- yaketake08's 実装メモ(yaketake08氏)