AtCoderにおけるプログラミング言語のシェアを調べてみた

[Supership](https://supership.jp/)でVPoEをしている名畑です。2023年冬アニメが始まりましたが[もういっぽん!](https://ipponagain.com/)がお気に入りです。[帯をギュッとね!](https://websunday.net/4219/)を思い出しました。頑張れチャンピオン、頑張れサンデー。

## はじめに

先日[AtCoderの誕生年毎のアクティブユーザ数を調べてみた](https://qiita.com/nabata/items/75407e48c7ca8de8a4a4)という記事を書きました。これは**AtCoderは私よりずっと若い人たちの間で盛り上がっている**という私の感覚が正しいのかを確かめる目的でした。

実はもう一つ前から気になっていることがありまして、それは**AtCoderにおけるプログラミング言語のシェアはどうなっているのか**というものです。

C++が使用率1位であろうとか、Pythonもかなり多そうとか、そういう印象は持ってきたものの、調べたことはなかったので調べてみました。

:::note info
「**[AtCoder](https://atcoder.jp/)ってなんですか？**」という方はまず[こちらの記事](https://qiita.com/nabata/items/44fa3995e476b12b9860)をご覧ください。
:::

## 前提

過去の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)](https://atcoder.jp/contests/abc283)
- コンテスト時間：2022-12-24(土) 21:00 ~ 2022-12-24(土) 22:40 (100分)
- 分析対象
	- ユーザ数：7,244
	- プログラミング言語数：41

![share_abc283.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/869934/5d0fe940-9617-212a-f03c-19cbae71fa50.png)

表にすると下記です。

| | 言語 | ユーザ数(人) | 割合(%) |
| ---: | :--- | ---: | ---: |
| 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)](https://atcoder.jp/contests/abc282)
- コンテスト時間：2022-12-17(土) 21:00 ~ 2022-12-17(土) 22:40 (100分)
- 分析対象
	- ユーザ数：7,120
	- プログラミング言語数：38

![share_abc282.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/869934/caf32c6a-8bd0-2ff9-2692-f6e02d4aadb7.png)

表にすると下記です。

| | 言語 | ユーザ数(人) | 割合(%) |
| ---: | :--- | ---: | ---: |
| 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](https://atcoder.jp/contests/arc152)
- コンテスト時間：2022-11-20(日) 21:00 ~ 2022-11-20(日) 23:00 (120分)
- 分析対象
	- ユーザ数：2,416
	- プログラミング言語数：28

![share_arc152.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/869934/cbcb9861-51e3-867b-7151-a15aa0e15ac1.png)

表にすると下記です。

| | 言語 | ユーザ数(人) | 割合(%) |
| ---: | :--- | ---: | ---: |
| 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](https://atcoder.jp/contests/arc151)
- コンテスト時間：2022-10-16(日) 21:00 ~ 2022-10-16(日) 23:00 (120分)
- 分析対象
	- ユーザ数：2,519
	- プログラミング言語数：28

![share_arc151.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/869934/897e5004-d9ee-4cf0-fa0a-bc7ac4a109c1.png)

表にすると下記です。

| | 言語 | ユーザ数(人) | 割合(%) |
| ---: | :--- | ---: | ---: |
| 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](https://atcoder.jp/contests/agc060)
- コンテスト時間：2022-12-25(日) 21:00 ~ 2022-12-26(月) 00:00 (180分)
- 分析対象
	- ユーザ数：972
	- プログラミング言語数：21

![share_agc060.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/869934/bc2fbf27-bcbb-5b64-232f-b79b5b77d118.png)

表にすると下記です。

| | 言語 | ユーザ数(人) | 割合(%) |
| ---: | :--- | ---: | ---: |
| 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](https://atcoder.jp/contests/agc059)
- コンテスト時間：2022-12-04(日) 21:00 ~ 2022-12-05(月) 00:00 (180分)
- 分析対象
	- ユーザ数：1,239
	- プログラミング言語数：22

![share_agc059.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/869934/70ac6c1a-585b-5c0d-b18b-f5ea761dc8b0.png)

表にすると下記です。

| | 言語 | ユーザ数(人) | 割合(%) |
| ---: | :--- | ---: | ---: |
| 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から言語アップデートを予定している旨が発表されましたね。
楽しみです。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">【言語アップデート情報募集のお知らせ】<br>言語アップデートのための各言語の情報募集をはじめました。皆様ご協力ください。<br>（多ければ多いほど時間がかかりますので、あまりネタ寄りのものは記載しないようよろしくお願いします）<a href="https://t.co/RlC6UC8ujt">https://t.co/RlC6UC8ujt</a></p>&mdash; AtCoder (@atcoder) <a href="https://twitter.com/atcoder/status/1615328605479014400?ref_src=twsrc%5Etfw">January 17, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## 宣伝

[SupershipのQiita Organization](https://qiita.com/organizations/supership-inc)を合わせてご覧いただけますと嬉しいです。他のメンバーの記事も多数あります。

Supershipではプロダクト開発やサービス開発に関わる方を絶賛募集しております。
興味がある方は[Supership株式会社 採用サイト](https://supership.jp/recruit/)よりご確認ください。