SupershipでVPoEをしている名畑です。2023年冬アニメが始まりましたがもういっぽん!がお気に入りです。帯をギュッとね!を思い出しました。頑張れチャンピオン、頑張れサンデー。
はじめに
先日AtCoderの誕生年毎のアクティブユーザ数を調べてみたという記事を書きました。これはAtCoderは私よりずっと若い人たちの間で盛り上がっているという私の感覚が正しいのかを確かめる目的でした。
実はもう一つ前から気になっていることがありまして、それはAtCoderにおけるプログラミング言語のシェアはどうなっているのかというものです。
C++が使用率1位であろうとか、Pythonもかなり多そうとか、そういう印象は持ってきたものの、調べたことはなかったので調べてみました。
前提
過去のAtCoderの全提出データだと膨大になる上に直近の傾向を読み取りづらいと考えたため
- AtCoder Beginner Contest(通称ABC)、AtCoder Regular Contest(通称ARC)、AtCoder Grand Contest(通称AGC)、それぞれ2回ずつ(各コンテストの2022年の最終開催回とその1回前)
- コンテスト開催時間内の提出
- 同一ユーザで複数の提出がある場合は最後の提出のみ
を対象としました。
ABC、ARC、AGC各々で取得したのはコンテストの種類による傾向を見たいためです。年末の2回を対象としたのは最近の傾向を知りたいためです。
コンテスト開催時間内に絞ったのは、アクティブなユーザのみとするためです。
同一ユーザの最後の提出のみとしたのは、同一ユーザで複数カウントされないようにするためです。
ABCの結果
ABC 283
- コンテスト名:ユニークビジョンプログラミングコンテスト2022 冬(AtCoder Beginner Contest 283)
- コンテスト時間:2022-12-24(土) 21:00 ~ 2022-12-24(土) 22:40 (100分)
- 分析対象
- ユーザ数:7,244
- プログラミング言語数:41
表にすると下記です。
言語 | ユーザ数(人) | 割合(%) | |
---|---|---|---|
1 | C++ (GCC 9.2.1) | 4,750 | 65.57 |
2 | Python (3.8.2) | 813 | 11.22 |
3 | PyPy3 (7.3.0) | 811 | 11.20 |
4 | C++ (Clang 10.0.0) | 197 | 2.72 |
5 | Java (OpenJDK 11.0.6) | 154 | 2.13 |
6 | C (GCC 9.2.1) | 115 | 1.59 |
7 | Rust (1.42.0) | 101 | 1.39 |
8 | C# (.NET Core 3.1.201) | 61 | 0.84 |
9 | Ruby (2.7.1) | 52 | 0.72 |
10 | Go (1.14.1) | 32 | 0.44 |
11以降 | 158 | 2.18 |
11位〜15位はC (Clang 10.0.0)、Java (OpenJDK 1.8.0)、JavaScript (Node.js 12.16.1)、Kotlin (1.3.71)、PHP (7.4.4)でした。
C++ (GCC 9.2.1)が65.57%、C++ (Clang 10.0.0)が2.72%でした。PythonとPyPy3が合わせて22.42%。私のイメージするAtCoderにおける言語シェアにかなり近い結果です。
ABC 282
- コンテスト名:HHKBプログラミングコンテスト2022 Winter(AtCoder Beginner Contest 282)
- コンテスト時間:2022-12-17(土) 21:00 ~ 2022-12-17(土) 22:40 (100分)
- 分析対象
- ユーザ数:7,120
- プログラミング言語数:38
表にすると下記です。
言語 | ユーザ数(人) | 割合(%) | |
---|---|---|---|
1 | C++ (GCC 9.2.1) | 4,308 | 60.51 |
2 | Python (3.8.2) | 975 | 13.69 |
3 | PyPy3 (7.3.0) | 926 | 13.01 |
4 | C++ (Clang 10.0.0) | 185 | 2.60 |
5 | Java (OpenJDK 11.0.6) | 178 | 2.50 |
6 | Rust (1.42.0) | 115 | 1.62 |
7 | C (GCC 9.2.1) | 93 | 1.31 |
8 | C# (.NET Core 3.1.201) | 75 | 1.05 |
9 | Ruby (2.7.1) | 60 | 0.84 |
10 | Go (1.14.1) | 38 | 0.53 |
11以降 | 167 | 2.35 |
上位5言語はABC 282のときと同様でした。
C++ (GCC 9.2.1)が60.51%で過半数を占めています。
ARCの結果
ARC 152
- コンテスト名:AtCoder Regular Contest 152
- コンテスト時間:2022-11-20(日) 21:00 ~ 2022-11-20(日) 23:00 (120分)
- 分析対象
- ユーザ数:2,416
- プログラミング言語数:28
表にすると下記です。
言語 | ユーザ数(人) | 割合(%) | |
---|---|---|---|
1 | C++ (GCC 9.2.1) | 1,810 | 74.92 |
2 | PyPy3 (7.3.0) | 278 | 11.51 |
3 | Python (3.8.2) | 134 | 5.55 |
4 | C++ (Clang 10.0.0) | 44 | 1.82 |
5 | Java (OpenJDK 11.0.6) | 41 | 1.70 |
6 | Rust (1.42.0) | 27 | 1.12 |
7 | C# (.NET Core 3.1.201) | 15 | 0.62 |
8 | C (GCC 9.2.1) | 12 | 0.50 |
9 | Ruby (2.7.1) | 10 | 0.41 |
10 | Kotlin (1.3.71) | 6 | 0.25 |
11以降 | 39 | 1.61 |
ABCに比べるとC++ (GCC 9.2.1)の割合が高まっています。
Python (3.8.2)の低下具合が顕著で、PyPy3 (7.3.0)が2位に上がっています。やはり速度を考えるとPythonではなくPyPyを選ぶというのが常道なんですかね。私もそうですし。ただ、PyPyよりPythonの方が速いケースもありますし、処理量と時間をきちんと意識するという本質を踏まえたコードを書けって話ですね(to 自分)。
ARC 151
- コンテスト名:AtCoder Regular Contest 151
- コンテスト時間:2022-10-16(日) 21:00 ~ 2022-10-16(日) 23:00 (120分)
- 分析対象
- ユーザ数:2,519
- プログラミング言語数:28
表にすると下記です。
言語 | ユーザ数(人) | 割合(%) | |
---|---|---|---|
1 | C++ (GCC 9.2.1) | 1,854 | 73.60 |
2 | PyPy3 (7.3.0) | 302 | 11.99 |
3 | Python (3.8.2) | 162 | 6.43 |
4 | C++ (Clang 10.0.0) | 38 | 1.51 |
5 | Java (OpenJDK 11.0.6) | 37 | 1.47 |
6 | Rust (1.42.0) | 34 | 1.35 |
7 | C# (.NET Core 3.1.201) | 25 | 0.99 |
8 | C (GCC 9.2.1) | 15 | 0.60 |
9 | Ruby (2.7.1) | 8 | 0.32 |
10 | JavaScript (Node.js 12.16.1) | 7 | 0.28 |
11以降 | 37 | 1.47 |
ABCと比べてC++ (GCC 9.2.1)の比率が高まり、Python (3.8.2)の比率が低下するという傾向はARC 152と同様です。
9位までの言語もARC 152と同様です。
AGCの結果
AGC 060
- コンテスト名:AtCoder Grand Contest 060
- コンテスト時間:2022-12-25(日) 21:00 ~ 2022-12-26(月) 00:00 (180分)
- 分析対象
- ユーザ数:972
- プログラミング言語数:21
表にすると下記です。
言語 | ユーザ数(人) | 割合(%) | |
---|---|---|---|
1 | C++ (GCC 9.2.1) | 786 | 80.86 |
2 | PyPy3 (7.3.0) | 84 | 8.64 |
3 | Python (3.8.2) | 24 | 2.47 |
4 | C++ (Clang 10.0.0) | 17 | 1.75 |
5 | Java (OpenJDK 11.0.6) | 14 | 1.44 |
6 | Rust (1.42.0) | 13 | 1.34 |
7 | C# (.NET Core 3.1.201) | 7 | 0.72 |
8 | C (GCC 9.2.1) | 7 | 0.72 |
9 | Go (1.14.1) | 3 | 0.31 |
10 | Crystal (0.33.0) | 3 | 0.31 |
11以降 | 14 | 1.44 |
C++ (GCC 9.2.1)の割合がさらに高まりました。速度を突き詰めるほどにC++が有利になっていくということなのか、競プロにおけるライブラリやノウハウが揃っているからか、あるいは速度を突き詰める人たちにC++ユーザーが多いのか。
Python (3.8.2)はさらに低下しています。
AGC 059
- コンテスト名:AtCoder Grand Contest 059
- コンテスト時間:2022-12-04(日) 21:00 ~ 2022-12-05(月) 00:00 (180分)
- 分析対象
- ユーザ数:1,239
- プログラミング言語数:22
表にすると下記です。
言語 | ユーザ数(人) | 割合(%) | |
---|---|---|---|
1 | C++ (GCC 9.2.1) | 965 | 77.89 |
2 | PyPy3 (7.3.0) | 129 | 10.41 |
3 | Python (3.8.2) | 32 | 2.58 |
4 | C++ (Clang 10.0.0) | 29 | 2.34 |
5 | Java (OpenJDK 11.0.6) | 27 | 2.18 |
6 | Rust (1.42.0) | 15 | 1.21 |
7 | C# (.NET Core 3.1.201) | 8 | 0.65 |
8 | C (GCC 9.2.1) | 7 | 0.56 |
9 | Ruby (2.7.1) | 4 | 0.32 |
10 | Text (cat 8.28) | 3 | 0.24 |
11以降 | 20 | 1.61 |
AGC 060と同様の傾向でした。ABC、ARCと比べてC++ (GCC 9.2.1)の割合が高いです。
8位まではAGC 060と同言語です。
最後に
AtCoderにおける主流がC++であるという想定通りの結果になりました。やはりコンテストのレベルが上がる毎にC++ユーザの割合も増えるのですね。
言語については速度などもいずれもう少し深掘りしてみたいなと思います。
それと、余談ですが、AtCoderから言語アップデートを予定している旨が発表されましたね。
楽しみです。
【言語アップデート情報募集のお知らせ】
— AtCoder (@atcoder) January 17, 2023
言語アップデートのための各言語の情報募集をはじめました。皆様ご協力ください。
(多ければ多いほど時間がかかりますので、あまりネタ寄りのものは記載しないようよろしくお願いします)https://t.co/RlC6UC8ujt
宣伝
SupershipのQiita Organizationを合わせてご覧いただけますと嬉しいです。他のメンバーの記事も多数あります。
Supershipではプロダクト開発やサービス開発に関わる方を絶賛募集しております。
興味がある方はSupership株式会社 採用サイトよりご確認ください。