AtCoderでの言語別提出数
AtCoderでの言語別提出数を2020年1月現在のデータで作成してみました。
取得方法
データの取得にはAtCder非公式APIを使いました。
-
GitHub - kenkoooo/AtCoderProblems: Extend your AtCoder
続きを見る
取得コード
コードはこんな感じで、CSV出力です。
import requests
import collections
import csv
contest_url = "https://kenkoooo.com/atcoder/resources/lang.json"
res = requests.get(contest_url)
d = collections.defaultdict(int)
for j in res.json():
d[j["language"]] += j["count"]
with open("language_cnt.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerows(sorted(d.items(), key=lambda x: x[1], reverse=True))
f.close()
取得結果のグラフ
グラフを見るとC++
が\(37.8\%\)で一位ですが、pyhon
の\(19.7\%\)とpypy
の\(8.8\%\)を合わせると\(28.5\%\)となっています。
-
「AtCoderで提出数が多い言語」ランキング #競技プログラミング - Qiita
続きを見る
こちらが2019年1月現在のデータなのでちょうど\(1\)年位前のデータになっているので、ここ1年でpython
とpypy
提出割合がC++
に迫っていることが分かります。
このAPIのデータは全期間分なので、恐らくここ\(1\)年だけならpython
とpypy
の勢いスゲーな状況になっていると思われます。
問題に対する提出数なので、いったんpython
で提出しても使用感が悪ければ違う言語で提出すると思いますのでpython
は競技プログラマーにとって使用感が良い言語であることがデータから分かります。
提出数が多いということはやサンプルコードも多いということになり、サンプルコードや解説記事の多さは勉強する際に重要です。
一昔前は「競プロならC++
一択」でしたが、現在はpython
も競技プログラミングで人気の言語になっています。
pythonのメリット
なぜpython
が競技プログラミングで人気なのでしょうか?
pythonのメリット
- 学習コストが低い
- コードが読みやすい
- 競プロに有利な標準ライブラリ
- 競プロ以外でも人気
学習コストが低い
コードが読みやすいと重複する部分もありますが、競技プログラミングをはじめるだけ(A~C問題)なら(私はJavaを使っていましたが)\(1\)日である程度は解けるようになります。
普段プログラムを書いている人が競技プログラミングをはじめる時の一番の壁が標準入力になりがちですが、python
は圧倒的に標準入力が簡単です(Java
で標準入力を実装するのが面倒だからpython
を選択しても良いくらい楽ですw)し、頻出のList
やfor
の扱いが楽です。
難しい問題を解くにはそれなりの勉強が必要になってきますが、「とりあえず競プロやってみる」という人にはpython
は本当におススメできる言語です。
コードが読みやすい
めちゃくちゃコードが読みやすいです。
他の言語のサンプルコードと比較すると、コードによっては行数が\(\displaystyle \frac{1}{3}\)ということはザラにあります。
当然コードが短い方が読みやすいです。
コードの設計にインデントが定義されていることもコードが読みやすい理由です。
コードの実装方針が同じなら本当に誰が書いても似たようなコードになってくるのは神です。
競プロに有利なライブラリ
pythonのライブラリ
- math
- itertools
- collection
- bisect
- heapq
- numpy
- scipy
すぐに思いつくだけでも、競プロに使えるライブラリがこれだけ挙げられます。
これらのライブラリを上手く使えればABCレベルの問題を楽しむには十分です。(もちろんアルゴリズムの勉強は必要です。)
例えばitertools
などをJava
やC#
では自分で実装しなければならず、(もちろんあらかじめライブラリとして用意すれば問題ないですが、ライブラリを用意し始めるのはC問題をある程度解けるようになってからだと思っています)初心者にはハードルが高いですが、python
ならimport itertools
の一文で解決できます。
競プロ以外でも人気
学校の授業で触れた、機械学習関連のライブラリが豊富、学習コストが低い、コードが読みやすい等の理由でpython
は人気です。
新入社員が「python
ならできます!!!」ってことも最近は多いくらいに人気です。
pypyを使えば結構早い
pypy
は事前にコンパイルすることでpython
と同じコードで実行速度が速いのが特徴です。
それでもC++
等と比較すると遅いですが、競プロを楽しむには十分な速度です。
競プロで世界を目指すならC++
を選んで下さい。
pythonのデメリット
以前に比べてデメリットも減ってきています。
競プロ実力者が少ない
python
は新しい言語なので、古参の実力はC++
を使っているというのは否定できません。
競プロで世界を目指すというレベルの人はおとなしくC++
でもいいかもしれません。
ただ、最近はpythonでも強者が多くなってきているので言語の問題というよりは競プロ歴の問題のような気がします。
今後はpython
の競プロ強者が増えていくと予想されます。
実際に、ネット上の解説・サンプルコードもpython
が多くなってきている印象です。
実行速度がC++に比べて遅め
これはもう超えられない壁なので諦めましょう。
実際に、C++
・Java
・C#
を使う友人がpython
で同じ実装しても実行時間オーバーしてしまうようなコードでAC
して悔しい思いをしたことがありますが、正しく実装すればpython
でも解けるので自分の勉強不足に気づかされたと前向きにとらえられました。
むしろpyton
で正しい・工夫した実装をするために悩んだ問題は印象に残って自分の力になっていることの方が多いです。
一般企業のアルゴリズム力のカンストであると言われる青コーダーレベルならpython
で到達可能ということを実力者が証明しています。
-
AtCoder(競技プログラミング)の色・ランクと実力評価、問題例 - chokudaiのブログ
続きを見る
-
[AtCoder] 橙(2400+)になりました | maspyのHP
続きを見る
とりあえず、青コード位まではpython
で到達して、それ以上を目指す時にC++
に乗り換えるか考えてみれば良いと思います。
競プロで世界を目指すというレベルの人はおとなしくC++
でもいいかもしれません。
python
にもメリット・デメリットがありますが、競プロに関してはメリットの方が多いです!現時点で将来性もある言語なので迷っていたらとりあえず
python
を選択しておけば間違いはないです!