文章生成AIって(競プロの文脈において)実際どのくらいプログラム書けるの？

# はじめに
## 文章生成AIすごいよね
最近のAIってかなりすごいですよね。画像生成もそうですが、文章生成AIもGitHub CopilotやChatGPT、競プロ特化のAlphaCodeなんかが開発され賑わいを見せています。GitHub CopilotとAlphaCodeはプログラマ以外にはそこまで有名ではないですが、ChatGPTはかなり一般ウケしているように感じます。
最近だとMicrosoftがOpenAI(ChatGPTを作ったところ)の技術を使いAI入りのBingをリリースするなど、文章生成AIのブームはまだまだ続きそうです。
ぼくもGitHub CopilotとChatGPTを使ってみましたが、どちらもかなりの精度で驚かされました。

## 個人的な疑問
ただ、ChatGPTブームの中で以下のような発言を見かけました。

- AIにプログラムを書かせれば人間はいらない
- プログラミングコンテストでAIを使えば無双できる
- 就活向けプログラミングコンテストでChatGPTを使えばいい成績が取れる

個人的にはAIによるプログラム生成はそこまで優秀ではないと思います。とはいえ一個人の感覚だけでものを語るのもよろしくないので、実際にどの程度競プロの問題を解けているのかを確認します。

## 記事を書いている人の競プロにおけるレベル感
AtCoder：アルゴ水色(1400前後)。大学入学以降3年間ほぼ休まずに出続けました。今は1年ほど休んでいます。
Paiza：AtCoder緑色のときに適当にSランク問題を1問解いたのでSランクです(これでいいのか？)。
他競プロサイト：やってません＞＜
ICPC：2022年度に一回だけ出ました。色々惜しくてアジア地区大会には出られませんでした。
PGBattle：2021年度大会で入賞(飛び賞)しました。入賞(飛び賞)できる成績は取れます。

他、CTFやKaggle、CodinGameを時々チェックしています(出てはいないです)。

# 文章生成AIの競プロ力
## AtCoderにおけるレート
競技プログラミングサービスであるAtCoderでは、参加者の成績に応じてレートが与えられます。また、参加者全体のレート分布は2020年の時点で以下のようになっています。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">全色の分布を求められたので。<br>まだ仮で出してみてるだけだし、ちゃんと精査してないから、仮データです。ちゃんとまとめたものはちゃんとAtCoderのページ上に載せるつもりで準備してるよ。 <a href="https://t.co/nvGD6jUrXh">pic.twitter.com/nvGD6jUrXh</a></p>&mdash; chokudai(高橋 直大)🐙🔥@AtCoder社長 (@chokudai) <a href="https://twitter.com/chokudai/status/1316714371716849664?ref_src=twsrc%5Etfw">October 15, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

実際にはなんとなく一度だけ参加してみたという人も多いので、10回以上コンテストに参加している人に限ればかなり分布が変化します。

また、以下図は現在のAtCoderにおけるレート分布です。レート2～4あたりの人が異様に多いですが、これは1回のみ参加した人が大半です(そのはず)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92718/886ded7b-695e-3b79-a5f4-d87a582b2381.png)

2019年において、AtCoder社の社長であるChokudaiさんはブログ内で各色に対する所感を語っており、ここからいくつかの色に対する評価を抜粋すると以下のようになります。

https://chokudai.hatenablog.com/entry/2019/02/11/155904

- 灰色：1度でも参加するとなる色なので保証できる実力がない
- 茶色(上位50%)：AtCoder内では高いレベルではない。学生なら優秀だけどエンジニアとしてはちょっと物足りない。他社転職サイトなら上位1～2%に到達出来る人がいるため、一般的には十分高いレベルであると言える
- 緑色(上位30%)：競プロに熱心に取り組んでいる人。(アルゴリズム力に限れば)学生ならかなり優秀、大体の企業ならアルゴリズム力はこれだけあれば十分

水色以上についてはChatGPTなどがそのレベルに達していないため割愛します。この評価は2019年時点のものなので今では多少変化しているかもしれませんが、だいたいこのくらいという目安が伝われば十分です。
なお括弧書きで書かれている上位○○%という値について正確なことはわかりませんが、ある程度参加している人のうち、という条件付きの値と考えて問題なさそうです。

## Chokudaiさんによる検証動画
以下リンクではAtCoder社の社長であるChokudaiさんがAtCoderの過去コンテスト([ABC281](https://atcoder.jp/contests/abc281 "abc281"))を用いてどの程度問題を解けるか検証しています。

https://www.youtube.com/watch?v=3DEB-5MCXp0

動画内では、A問題なら危なげなく正解、B問題は1度間違ったコードを出力していますがエラーの内容を指摘することで正解しました。C問題では変数の型が十分でなかったり(64bit整数が必要なのに32bit整数を使ったいた！)、入出力が指定の通りでなかったりと問題がありましたが、指摘することで正解しました。ここまでで開始から20分ほど経過しています。その後開始50経過後にD問題も正解しています。

ここまでの個人的な体感として他のコンテストについてもABC B問題までなら使えそうな感じがしました。ただしC・D問題についてはユーザからの指摘が必要であり、解くまでにかなり時間がかかっています。

また、Chokudaiさんは上記リンクの動画以前にブログで以下のような記事を書いています。

https://chokudai.hatenablog.com/entry/2022/12/07/161959

ブログ内で引用されているツイートを考慮してここまでの内容を考えると、ChatGPTの競プロ能力はABC基準で以下のようになります。

- A問題は人間が指摘しなくてもだいたい解ける
- B問題は問題文を渡すだけだと解けたり解けなかったり
- C問題はChatGPT単体だと間違う。人間が間違っていることを指摘する必要がある
- D問題は人間が本質的な指摘することで解ける場合もある
- E問題以降は解けない

ChatGPT単体だとよくてもA～Cが限界、D以降は人間の手が必要といえます。

ABC281において20分でC問題まで解いた場合、コンテスト参加者約7600人中3042位の成績になり、パフォーマンス(AtCoderにおけるコンテストの成績指標)は834になります(実際は何回か不正解しているのでもっと低くなる)。レートでいえばコンスタントにこの成績が出せるなら緑色になれる実力です。
ただし動画内でChokudaiさんが試行錯誤しているようにChatGPT単体でC問題を得には指示が必要になる場合もあるため、安定して緑色相当のパフォーマンスを出すことは難しそうです。

## DeepMind公式によるAlphaCodeの評価
競技プログラミングに特化したAIであるAlphaCodeは競技プログラミングサイトCoderForcesのいくつかの問題を解答し、上位54%に入る実力と評価されました。
上位54%ってことはそのへんの競プロerをとっ捕まえてきたら大体同レベルってこと？と思われるかもしれませんが、Codeforcesにおける54%はAtCoderだと灰色か茶色レベルなので、特別高くはないです。特にCodeforcesはAtCoderよりも参加人数が多いため下位層が厚くなっています。

https://twitter.com/chokudai/status/1269890423029264384

## ぼくによるGitHub Copilotの評価
サークルのブログで申し訳ないですが、GitHub Copilotがブームになりだしたしばらく後、ぼくにも使用権が回ってきたので色々と検証していました。

https://ocumcr.hatenablog.com/entry/2022/04/07/205239

使用感としてはプログラミング補助に便利でまさにCopilotといった印象を受けましたが、競プロにおいてはこの時点だと結構間違いが多くこれだけで戦うのは難しいなと思いました。

またChatGPTとの違いとして、GitHub Copilotでは「このままだと処理が遅いので高速なプログラムにしてください」のような指示が難しい点があげられます。その代わりに行単位での修正はこちらの方が簡単になっています。両方ともインタラクティブな使用に耐えるツールではあるのですが、指示の出し方に差がありおもしろいです。

## その他の評価
GitHub CopilotでABC A問題のFA(最短正答)

https://twitter.com/hakatashi/status/1418929000525701121?s=20&t=JJ1Jp_A0TgTPbb0Ma3GNgw

GitHub CopilotでABC D問題正答(ただしところどころ人間が修正している)

https://twitter.com/468_cp/status/1489851646654152708?s=20&t=JJ1Jp_A0TgTPbb0Ma3GNgw

## 全体的な感想
ChatGPT、AlphaCodeについては上位50%程度の実力が認められています。実際のところこれが強いかと言われると微妙ですが、AtCoderにおける茶色の価値(not 評価)は今後下がっていってもおかしくないなと思いました。緑色・水色についても数年後には追いつかれていてもおかしくありません。また、ABCのコンテストは典型的・教育的な問題がほとんどなため機械学習による成果が出やすい面もあるかなと思います。
以上の評価より、AIによるプログラミング生成ではプログラミングコンテストで無双できるほどの力はないと断言していいでしょう。特に就活向けのコンテストはそれなりに鍛錬を積んだ競プロerが多いので良い評価は出ないと思います。

現時点でのAIによるプログラミング支援は、"できない"人が"できる"ようになる道具というよりも、"できる"人がより楽に"できる"ようになる道具といった印象があります。実際、Chokudaiさんの動画や他の検証でもユーザがプログラムの不備を正確に認識した上で指摘しています。これができる人は自力でも問題を解けますし、逆に自力で解けない人が正確な指摘をすることは難しいです。プログラムが遅かったとき、どこがボトルネックになっているのか、その方針のままでボトルネックを解消できるのかを考えるにはそれなりの経験と知識が必要です。またプログラムが間違っていたときにはプログラム上のミスなのか方針が間違っているのかを判断する必要があり、これも同様にユーザのスキルに依存します。

# 今後の展開予想
AtCoderの青色以降はアドホックな問題も解ける必要があるため、AIが追いつくにはまだ時間がかかりそうな印象です。
競技性の強いシーンにおける活躍についてもしばらくはないでしょう。ただ将棋や囲碁でAIが人間に勝ったように、いつになるかわかりませんが将来的には競プロでもAIが人間を打ち負かす場面が来てもおかしくないと思います。

# 補足
[ここ好きです。](https://chokudai.hatenablog.com/entry/2019/02/11/155904 "chokudaiのブログ")
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92718/fdb8ff32-4631-528b-9c28-37d32a96ba90.png)