【13日目】 Github Copilotと競プロを解いてみる【pythonで音楽系人工知能を作るまでの日記】

プログラミング

2023年3月29日

はじめに

最近は競プロと機械学習の勉強じゃなくiosアプリ開発に浮気をしている。

Twitterを見てたらGithub Copilotというコードアシスタントがすごいという情報と、GitHub Copilotは学生なら無料で使えるという情報を得たのでiosのアプリ開発の手助けをしてもらおう! と思った。
が、GitHub CopilotはXcodeに対応していなかったので、VSCodeを使いAtcoderの問題を解くことでGithub Copilotがどんな感じなのか確かめようと思う。

注意事項

  • 私はまだ茶色コーダーなので上位勢の使う使用感とは違うと思う。
  • pythonコードです。
  • Atcoderでは記事投稿時点でChatGPT等のAIの使用は許可されていますが、1年後にどうなってるかはかなり怪しいと思っています。最新の情報を参考に使用してください。

学割の適用方法は
【GitHub】学生申請をして無料でGitHub Copilotを使うという記事を参考にすればできる。
大体申請含めて20分くらいあれば使えるようになるよ。

Github Copilotを使う

Github CopilotをVSCodeで使いたい場合は拡張機能で追加してVSCodeとGithubを連携させればおk。

今まではTabnine AIというコードアシスタントにアシストしてもらっていたんだけど、たぶん役割が被っちゃうのでGithub Copilotを使う時は拡張機能を無効化しとこう。

Tabnine AIも「a,b=map(int,input(」といれると「a,b=map(int,input().split())」と予測してくれたりと、早解きにかなり貢献してくれているのでおすすめ。まじでありがとう。

AtcoderのA問題を解く

とりあえず、A問題がどれくらい早くなるのか気になったので、今まで解いたことないABCのA問題を解いてみようと思う。

解いたのはABC207のA問題

とりあえず入力のa,b,cを「a,b,c=map(int,input().split())」で受け取ろうと思って「a,b,c=」を入力したらもう予測が出てきた。
まじでびっくり。流石に予測が早すぎないか? 他の自分が入力した例から学習とかをしてんのかな?

次はa,b,cをソートして最大値を求めれば早いかなと思い。
「a,b,c=sorted([a,b,c])」を入力しようと「a,b,c=」を入力したら「a,b,c=sorted([a,b,c])」を提案してきた。マジで怖い。

流石に偶然なのだろうか。

最後に「print(b+c)」。
これは流石になにも提案してこなかった。


このA問題で実際に打ち込んだのは
a,b,c=
a,b,c=
print(b+c)
だけ。
問題との相性もあるだろうけどこの問題は何も使わないより、Tabnine AIを使うより早く解けそう。

AtcoderのB問題を解く

解く問題は同じくABC207のB問題。difは98。

a,b,c,dの入力は先ほどと同じタイミングで提案してきた。

次の有用提案タイミングがココ。

これは、条件を満たしたらcntを出力して処理を終わろうとして書いたif。
マジですごい。すごいよAI君!

次がこれ

これは10の5乗回whileの処理を実行してifに引っかからなかったら-1を出力して処理を終わるというelif。

なんでprint(-1)を的確に提案してきたのかが本当にわからない。エラーとかnotとして-1ってけっこう主流なのかな。


これはred+=cをしたかったけどAIがred+=bを提案してきたかわいいところ。流石にこういう間違えはあるけど、この時点でred+=bを提案してくるのもすごいと思う。

あとは普通に人力で入力して完成。
結構すごいと思う。

特に、print(-1)を提案してきたところが凄いと思っていて、成り立たなかった時の出力が-1っていうのを私が問題を見て確認する前に-1を提案してたから本当にびっくりした。

結論と感想

一応茶色difも解こうとしたんだけど、普通に難しくてまったくAIを活かせなかった。

感じたこととしては

  • 提案スピードは全然早い。でも、時々1,2秒出てこないときもある。
  • tabine AIと違ってその行に何も入力してなくても提案してくれるのが便利。
  • どちらにしろ自分の理解を超えたことは提案されても人間側が理解できないので回答速度UPにしかならない。
  • むしろ変な提案をされることでその提案を理解するのに時間がかかって時間が取られることもある。
  • という一長一短な感じ。あくまでも本来の使い方ではなく、競プロの低難易度を茶色が解くときのAIパフォーマンスだから、何か大きいプログラムを書きたいときとかはまた違ってくるんだと思う。

こういうアシスタント作曲AIを作りたいなぁと思うけど難しいんだろうなぁ。

以上です。