AtCoderの水色(以上)がどれだけのレベルなのかを可能な限り客観的に全力で可視化してみた(国別人数や解答速度や所属大学)

[Supership](https://supership.jp/)の名畑です。待ちに待った[KING OF PRISM -Dramatic PRISM.1-](https://kinpri.com/)がついに公開。世界がプリズムの煌めきに溢れております。

:::note 
AtCoderにはAlgorithmとHeuristicがありますが、今回の記事ではAlgorithmを前提として話を進めています。
:::

## はじめに

競技プログラミングサイト[AtCoder](https://atcoder.jp/)の高橋社長(chokudai様)の以下のつぶやきを目にしました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">1000再生行ってないのに28コメントついてるの、みんな言いたい事あるんだなあ、って感じがすごいするｗ<br><br>【競技プログラミング】AtCoder緑色あるある【愚痴多め】 <a href="https://t.co/SqFhLjKXkt">https://t.co/SqFhLjKXkt</a></p>&mdash; chokudai(高橋 直大)@AtCoder社長 (@chokudai) <a href="https://twitter.com/chokudai/status/1821959983367647697?ref_src=twsrc%5Etfw">August 9, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

私も、もう2年以上コンテストには参加していないのですが一応**緑**なので、この紹介されている動画「[【競技プログラミング】AtCoder緑色あるある【愚痴多め】](https://www.youtube.com/watch?v=oLaD-gJ5bhs)」を見て「**あるあるあるあるあるあるあるある**」って頷きまくったわけです。

ネタバレになってしまうので詳細は避けますが、この動画の中で「**水色への言及**」がありまして、それに私もなんか妙に同意してしまいました。

緑の人間からすると、水色ってのは特別なわけです。
一つ上の色でしかないわけですし、人によってはさくっと到達できてしまう領域なのかもしれないですが、私からすると「**特別なレベルまで到達した方々の住む場所**」な感があるわけです。

ということで、今回はそんな「**私にとって特別な水色**」を可能な限り客観的に全力で説明してみようと思います。
ただのネタです。

## そもそも水色ってなに？

**AtCoder**ではレーティングによって色がつき、**灰 < 茶 < 緑 < 水 < 青 < 黄 < 橙 < 赤**の順番です。

水色は下から数えて4番目の色であり、公式では以下の通りの説明です。

> アルゴリズムの絡んだ開発が特技と呼べるような水準です。アルゴリズムの豊富な知識に加え、典型的な課題の言い換えも把握し始めており、多くの複雑な問題をアルゴリズム的な処理に落とすことが出来ます。
> かなりのコーディング速度があります。課題を見てからロジックを考えるまでが早いので、上流工程において、ロジックをイメージしながら会話をする能力も高い事が想定されます。
> 例えば巨大なデータベースなどを扱うサーバサイドエンジニアなどは、常に計算量を意識する必要があるため、これくらいのレーティングを持っていると良い事が多いです。
> 普通のITエンジニアの業務としては、あまり必要としないレベルの問題を解き始める水準です。ですが、アルゴリズムを用いた研究開発という視点においては、ギリギリ参加可能な水準です。
> 競技者として自信を持ち始めるのがこの色です。大学対抗のチーム戦プログラミングコンテストの各大学トップチームなどにも、この色のユーザは多く存在しています。一方、競技未経験でも、アルゴリズムに関連した業務を行っているITエンジニアであれば、これくらいのパフォーマンスをいきなり出せることもあります。
>
> 参考：[Algorithm部門のレーティングと業務における期待できる活躍](https://info.atcoder.jp/utilize/jobs/rating-business-impact)

インターネットの海を漂っていると大量にすごい人がいて価値観が麻痺してしまって**赤**や**橙**以外は「**ふーん、並なのかな**」みたいな見方をする方もいると思いますし、競技プログラミングにガチで日々を捧げている方々からしたら**入口同然のレベル**なのかもしれませんが、一般基準で見たら十分に異常者の領域です。

まあ、**AtCoder**をやっている時点で世間からしたら異常者の領域かもしれませんけど（褒め言葉です）。

## 水色の人の割合はどれぐらい？

2024年8月10日ABC開催前付の[アクティブユーザーのランキング](https://atcoder.jp/ranking)から各色の割合を求めてみました。
ちなみにアクティブユーザーとは「**過去2年以内に一度でもRatedのコンテストに参加したユーザー**」のことです。

| 色      | 人数  | 割合(%) | 累積割合(%) |
|---------|-----:|--------:|------------:|
| 赤      | 130   | 0.11   | 0.11       |
| 橙 | 278   | 0.24  | 0.36       |
| 黄   | 1259  | 1.10   | 1.46       |
| 青      | 2540  | 2.23   | 3.69       |
| **水**  | **4747**  | **4.16**   | **7.84**       |
| 緑      | 8897  | 7.79   | 15.64      |
| 茶    | 14256 | 12.49  | 28.13      |
| 灰    | 82037 | 71.87  | 100.00     |

全体の**4.16%**が**水色**で、**水色以上**とすると **7.84%** でした。
「**思ったよりいるな**」と受け止める人もいるかもしれませんが

- プログラミングをしている
- コンテストに参加している
- 土日の夜をコンテストのために費やしている
- あえてRated（ランクづけあり）を選んでいる

そんなかなり稀な集団の中での上位 **7.84%** だということをご理解ください。

参考までに、国内において広く多くの人が受けていて**スコアで評価される資格**である**TOEIC® Listening & Reading Test** でも、[2022年度のスコア分布](https://www.iibc-global.org/toeic/official_data/lr/data_avelist.html)によると受験者数**784,310人**のうちで**845点以上**が **約9.1%** いるらしいので、それよりも少ないこの **7.84%** というのはかなりハイレベルな集団と言っていいのではないかと思います。

## 水色は日本に何人ぐらいいるの？

同じく、2024年8月10日ABC開催前付の[アクティブユーザーのランキング](https://atcoder.jp/ranking)において、登録している国別に**水色以上の人数**を集計し、その上位30位を表にしてみました。国は自己申告制のため、正しさの保証はありません。

|   | 国コード | 国名       | 赤 | 橙 | 黄  | 青  | 水   | 合計 |
|--:|---------|------------|---:|---:|----:|----:|-----:|-----:|
| 1 | CN      | 中国       | 40 | 120 | 557 | 1095 | 1734 | 3546 |
| 2 | JP      | 日本       | 41 |  63 | 295 |  602 | 1338 | 2339 |
| 3 | IN      | インド     |  0 |   4 |  20 |  144 |  581 |  749 |
| 4 | KR      | 韓国       |  4 |  11 |  51 |   84 |  113 |  263 |
| 5 | RU      | ロシア     |  8 |  14 |  42 |   72 |   84 |  220 |
| 6 | TW      | 台湾       |  3 |   7 |  31 |   42 |   75 |  158 |
| 7 | XX      | その他     |  1 |   1 |  22 |   43 |   70 |  137 |
| 8 | US      | アメリカ   |  5 |   4 |  26 |   33 |   60 |  128 |
| 9 | BD      | バングラデシュ |  0 |   0 |   8 |   17 |   66 |   91 |
|10 | VN      | ベトナム   |  0 |   3 |  11 |   26 |   46 |   86 |
|10 | EG      | エジプト   |  0 |   0 |   8 |   19 |   59 |   86 |
|12 | UA      | ウクライナ |  4 |   7 |  16 |   18 |   28 |   73 |
|13 | BR      | ブラジル   |  1 |   1 |  12 |   19 |   36 |   69 |
|14 | PL      | ポーランド |  4 |   5 |  12 |   20 |   18 |   59 |
|15 | IR      | イラン     |  1 |   2 |   7 |   15 |   27 |   52 |
|16 | ID      | インドネシア |  0 |   0 |   4 |   20 |   22 |   46 |
|16 | SY      | シリア     |  0 |   0 |   3 |   20 |   23 |   46 |
|18 | CA      | カナダ     |  2 |   4 |   6 |   12 |   19 |   43 |
|19 | HK      | 香港       |  1 |   0 |   8 |   10 |   19 |   38 |
|20 | DE      | ドイツ     |  1 |   1 |   6 |    9 |   14 |   31 |
|21 | BY      | ベラルーシ |  3 |   1 |   7 |    9 |   10 |   30 |
|21 | KZ      | カザフスタン |  0 |   1 |   4 |   11 |   14 |   30 |
|23 | SG      | シンガポール |  1 |   1 |   9 |    7 |   11 |   29 |
|24 | TR      | トルコ     |  0 |   0 |   3 |   10 |   15 |   28 |
|25 | RO      | ルーマニア |  0 |   2 |   2 |   12 |   11 |   27 |
|26 | AU      | オーストラリア |  0 |   1 |   7 |    6 |   11 |   25 |
|27 | FR      | フランス   |  0 |   0 |   4 |    6 |   11 |   21 |
|28 | HR      | クロアチア |  0 |   2 |   3 |    8 |    6 |   19 |
|28 | RS      | セルビア   |  0 |   1 |   4 |    9 |    5 |   19 |
|30 | GE      | ジョージア |  0 |   0 |   4 |    7 |    7 |   18 |
|30 | GB      | イギリス   |  0 |   0 |   2 |    5 |   11 |   18 |

インターネットをしていると水色の方がそこらに溢れているような錯覚に苛まれますが、日本でも**1338人**しかいないわけです。仮にアクティブユーザーに絞らないとしても、**8800人**程度です。10000人はいません。

日本の人口を約1億2000万人とすると **1338 / 120000000 = 0.00001115** となるので、10万人に1人ぐらいしかいないわけです。

あと、全く本筋と関係ないですが、日本発で日本以外でこれだけ親しまれているWebサービスって本当に素晴らしいなと思います。

## 水色の人はどれぐらいの速度でコードを書くの？ その1

- 対象のコンテストは[AtCoder Beginner Contest 365](https://atcoder.jp/contests/abc365)
- 対象の問題は[A - Leap Year](https://atcoder.jp/contests/abc365/tasks/abc365_a)
- コンテスト時間内(2024-08-03(土) 21:00 ~ 22:40)における最初の提出
- AC（正答）である
- Rating変動対象である(灰〜青まで)

上記の条件において、コンテスト開始時刻から何秒経過時点での提出かを集計してみました。

対象の問題は以下のようなものです。

> 1583以上2023以下の整数Yが与えられます。
>
> 西暦Y年の日数を求めてください。
> なお、制約の範囲内では西暦Y年の日数は以下の通りです。
> 
> Yが4の倍数でない年は365日
> Yが4の倍数で、かつ100の倍数でない年は366日
> Yが100の倍数で、かつ400の倍数でない年は365日
> Yが400の倍数である年は366日

問題文をそのままPythonのコードに落とし込むと以下です。

```python
Y = int(input())
if Y % 4 != 0:
    print(365)
elif Y % 4 == 0 and Y % 100 != 0:
    print(366)
elif Y % 100 == 0 and Y % 400 != 0:
    print(365)
elif Y % 400 == 0:
    print(366)
```

Pythonであれば**calendar**を使う手もありますね。

```python
import calendar
Y = int(input())
if calendar.isleap(Y):
    print(366)
else:
    print(365)
```

正答の提出にかかった時間を色別に集計したものが以下となります。

| 色       | 人数  | 中央値(秒) | 平均値(秒) | 最速値(秒) |
|:--------:|------:|-----------:|-----------:|-----------:|
| 青       |   418 |      109.5 |      133.25 |         28 |
| **水**   | **845**  |    **124.0** |    **160.87** |     **30** |
| 緑       |  1406 |      151.0 |      197.43 |         29 |
| 茶       |  1998 |      179.0 |      236.95 |         31 |
| 灰       |  3771 |      296.0 |      504.76 |         32 |
| 初挑戦   |   740 |      402.5 |      658.36 |         51 |


ブラウザで開いて、問題文を読んで、コードを書いて、(ミスのペナルティが大きいので)ちゃんとコードを確認するという過程において水色の方がかける時間の中央値は**124秒**、つまり**約2分間**です。

もちろん問題は初見です。閏年の扱いというのは定番ではあるでしょうが。

問題を読んでからコードを書き終えて入出力の確認までして2分って、かなりしんどいです。
プログラミングの経験がある方であれば、これがそう簡単ではないこと、想像がつくかと思います。

## 水色の人はどれぐらいの速度でコードを書くの？ その2

**AtCoder**のコンテストでは好きな順番で問題を解くことができますので、A問題以外を最初に解く人もいます。少数派ではありますが。
ということで、同一コンテストの[B - Second Bes](https://atcoder.jp/contests/abc365/tasks/abc365_b)でも同じように色別の正答時間を求めてみます。

ちなみに対象の問題は以下のようなものです。

> 長さNの整数列 A=(A1,…,AN) が与えられます。ここで A1,A2,…,ANは相異なります。
> Aの中で二番目に大きい要素はAの何番目の要素でしょうか。

Pythonで解いてみると以下のような感じでしょうか。

```python
N = int(input())
A = list(map(int, input().split()))
new_a = list()
for i, val in enumerate(A):
    new_a.append((val, i + 1))
new_a.sort()
print(new_a[-2][1])
```

正答提出までにどれだけの時間がかかったのか、集計した結果は以下です。

| 色       | 人数  | 中央値(秒) | 平均値(秒) | 最速値(秒) |
|:--------:|------:|-----------:|-----------:|-----------:|
| 青       |     4 |      114.5 |      181.75 |         84 |
| **水**       |    **10** |      **138.5** |      **133.2**  |         **36** |
| 緑       |    20 |      208.5 |      198.55 |         39 |
| 茶       |    22 |      214.0 |      261    |        104 |
| 灰       |    17 |      688.0 |      878.82 |        211 |
| 初挑戦   |     2 |     1362.5 |     1362.5  |        336 |

この問題でも、中央値としては**138.5秒と**、**2分強**で解き終えています。

コード自体は特に複雑なものではないですが、この速度で解けるエンジニアより解けないエンジニアの方が多いようには思います。

## 水色の人が通っている大学はどこなの？

**AtCoder**ではプロフィールに**所属**を書くことができます。

- [アクティブユーザーのランキング](https://atcoder.jp/ranking)(2024年8月10日ABC開催前付)
- **所属**を私が目視で確認
- **所属**が日本の大学(大学院大学・大学院含む)のいずれか
- 水色以上である

という条件で、各大学の人数を集計しました。

所属は表記にかなり揺らぎがあり、かつ、私が略称に気付けていないものもあるかもしれません。できる限り検索などで調べはしましたが。
また、あえてこの欄に大学名を書くという時点で、かなりのフィルタリングがなされているであろうとも推測されます。
そもそも書いている人はかなり少ないですし、自由記述欄なので、書かれている所属が正しい保証もありませんし、さらには、学生としてではなく職員として所属している可能性もあります。

前置きが長くなりましたが、正確性はともかく、結果は以下でした。合計人数順です。

|     | 大学名                                | 赤 | 橙 | 黄 | 青 | 水 | 合計 |
|:--:|-------------------------------------|---:|---:|---:|---:|---:|----:|
|  1  | 東京大学                              |  7 | 11 | 35 | 47 | 73 |  173 |
|  2  | 東京工業大学                          |  4 |  3 | 11 | 16 | 38 |   72 |
|  3  | 京都大学                              |  1 |  7 | 13 | 14 | 33 |   68 |
|  4  | 大阪大学                              |  0 |  2 |  6 | 10 | 18 |   36 |
|  5  | 東北大学                              |  1 |  1 |  3 |  8 |  9 |   22 |
|  6  | 慶應義塾大学                          |  0 |  0 |  3 |  5 | 13 |   21 |
|  7  | 北海道大学                            |  0 |  0 |  4 |  7 |  8 |   19 |
|  8  | 名古屋大学                            |  0 |  0 |  2 |  6 | 10 |   18 |
|  9  | 早稲田大学                            |  0 |  0 |  3 |  3 | 11 |   17 |
|  9  | 電気通信大学                          |  0 |  0 |  1 |  7 |  9 |   17 |
| 11  | 筑波大学                              |  0 |  1 |  2 |  5 |  7 |   15 |
| 12  | 東京理科大学                          |  0 |  0 |  0 |  5 |  6 |   11 |
| 13  | 九州大学                              |  0 |  0 |  2 |  3 |  5 |   10 |
| 14  | 会津大学                              |  0 |  0 |  1 |  2 |  4 |    7 |
| 15  | 神戸大学                              |  0 |  0 |  1 |  1 |  4 |    6 |
| 15  | 千葉大学                              |  0 |  0 |  1 |  1 |  4 |    6 |
| 15  | 東京農工大学                          |  0 |  0 |  0 |  3 |  3 |    6 |
| 18  | 横浜国立大学                          |  0 |  0 |  2 |  1 |  2 |    5 |
| 18  | 立命館大学                            |  0 |  0 |  0 |  4 |  1 |    5 |
| 18  | 奈良先端科学技術大学院大学(NAIST)      |  0 |  0 |  0 |  1 |  4 |    5 |
| 21  | 中央大学                              |  0 |  0 |  0 |  1 |  3 |    4 |
| 21  | 日本大学                              |  0 |  0 |  0 |  1 |  3 |    4 |
| 21  | 明治大学                              |  0 |  0 |  0 |  1 |  3 |    4 |
| 24  | 豊橋技術科学大学                      |  0 |  0 |  1 |  0 |  2 |    3 |
| 24  | 名古屋工業大学                        |  0 |  0 |  0 |  1 |  2 |    3 |
| 24  | 大阪公立大学                          |  0 |  0 |  0 |  1 |  2 |    3 |
| 24  | 東京都立大学                          |  0 |  0 |  0 |  1 |  2 |    3 |
| 24  | 名城大学                              |  0 |  0 |  0 |  0 |  3 |    3 |
| 24  | 兵庫県立大学                          |  0 |  0 |  0 |  0 |  3 |    3 |
| 30  | はこだて未来大学                      |  0 |  0 |  1 |  1 |  0 |    2 |
| 30  | 滋賀大学                              |  0 |  0 |  0 |  1 |  1 |    2 |
| 30  | 放送大学                              |  0 |  0 |  0 |  1 |  1 |    2 |
| 30  | 金沢大学                              |  0 |  0 |  0 |  1 |  1 |    2 |
| 34  | 山梨大学                              |  0 |  0 |  1 |  0 |  0 |    1 |
| 34  | 山口大学                              |  0 |  0 |  1 |  0 |  0 |    1 |
| 34  | 三重大学                              |  0 |  0 |  1 |  0 |  0 |    1 |
| 34  | 岐阜大学                              |  0 |  0 |  1 |  0 |  0 |    1 |
| 34  | 大阪市立大学                          |  0 |  0 |  1 |  0 |  0 |    1 |
| 34  | 法政大学                              |  0 |  0 |  1 |  0 |  0 |    1 |
| 34  | 東京藝術大学                          |  0 |  0 |  0 |  1 |  0 |    1 |
| 34  | 上智大学                              |  0 |  0 |  0 |  1 |  0 |    1 |
| 34  | 神奈川大学                            |  0 |  0 |  0 |  1 |  0 |    1 |
| 34  | 静岡大学                              |  0 |  0 |  0 |  0 |  1 |    1 |
| 34  | 北陸先端科学技術大学院大学(JAIST)      |  0 |  0 |  0 |  0 |  1 |    1 |
| 34  | 長崎大学                              |  0 |  0 |  0 |  0 |  1 |    1 |
| 34  | 東京通信大学                          |  0 |  0 |  0 |  0 |  1 |    1 |
| 34  | 大分大学                              |  0 |  0 |  0 |  0 |  1 |    1 |
| 34  | 北海道情報大学                        |  0 |  0 |  0 |  0 |  1 |    1 |
| 34  | 東京医科歯科大学                      |  0 |  0 |  0 |  0 |  1 |    1 |
| 34  | 大阪工業大学                          |  0 |  0 |  0 |  0 |  1 |    1 |
| 34  | 群馬大学                              |  0 |  0 |  0 |  0 |  1 |    1 |
| 34  | 新潟大学                              |  0 |  0 |  0 |  0 |  1 |    1 |
| 34  | 立教大学                              |  0 |  0 |  0 |  0 |  1 |    1 |
| 34  | 広島大学                              |  0 |  0 |  0 |  0 |  1 |    1 |
| 34  | 甲南大学                              |  0 |  0 |  0 |  0 |  1 |    1 |
| 34  | 同志社大学                            |  0 |  0 |  0 |  0 |  1 |    1 |

補足としまして、過去記事「[AtCoder 所属別レーティング色分布 / トップコーダの多い所属(大学、高校、会社等)](https://qiita.com/nabata/items/23d571ec9f8c114f2b3f)」を読んでいただけるとわかるのですが、これらの大学は「**そもそもとして競技人口が多い**」という特徴があります。周りがやっているとやるようになるという流れなのだろうと想像します。環境が行動に大きく影響するのだろうと。

## 最後に

**AtCoder**はプログラミングに携わるものにとっての貴重な場であり文化の一つなので、ぜひ長く愛されてほしい。

**AtCoder**についてより詳しく知りたいという方は、私の過去記事「[エンジニア採用担当者である私の目から見たAtCoder(競技プログラミング)の印象](https://qiita.com/nabata/items/b1da32104ce39662b11d)」も見ていただけるとありがたいです。

## 宣伝

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

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