【10日目】Pythonを始めて約4ヶ月、AtCoderの茶色になる。【pythonで音楽系人工知能を作るまでの日記】

プログラミング

2023年2月27日

昨日のABC291でABC-E—の4完をかまし、念願の着色。レートは421。
一応節目なので、ブログを更新しようかなと思い書きます。python基準です。

記事内でのdif400などのdifはAtCoder problemの現在基準です。

茶色に関する感想

正直、何か強みがあれば茶色にはすぐなれるのではないだろうかと思う。
例えば、ARCの考察系問題を解くことが出来るとか、ABCのABを超早く解くことができるとか、検索能力が高い・ChatGPTを上手く使うことができるとか、dif300後半くらいまでなら速度は遅くても安定して解くことができるとか、元々数学めっちゃ強いとか。

必須なのはpythonの基礎力で、それに加えて何か”強み”を持っていると茶色にはなれるというのが今のところの感想。
正直pythonの基礎力もその場でググって解決する程度で良いとは思う。
私は未だにリストの要素の削除方法を毎回ググってるし、英小文字を大文字にする方法とかもググったりする。
そういう方法があったっていうのを認識してるのが大事だと思う。勿論覚えておくに越したことはない。

私は、ABCのAB問題の早解きと、dif300くらいまでなら安定して解けることを武器に茶色になれた。
AB問題が早く解けるとC問題がdif400以上の時C問題解けなくても大体パフォーマンス300以上出るし、C問題がdif300くらいであればだいたい解けるから超安定して毎回レート+30前後盛ってた。
レートの推移を見てもらうと分かると思う。

その代わり爆発的にレートが伸びることは無かったし、劇的にレートが下がることも無かった。

※茶色に到達したコンテストではABC問題を安定して解いた+ChatGPTと検索力でE問題を解いたからレートが+117くらいに爆発した感じ。
※その一個前のコンテストでは問題をめっちゃ読み間違えててdif200くらいのC問題に1時間くらいかけた。それがなければいつも通り+30くらい盛れてると思うので、AB早解きとdif300までは安定して解けるっていうのは灰色の内はかなり相性の良い武器だと思う。

灰色の人がレートを稼ぐなら

裏技ではないんだけど、あまり知られてない? こと。
もし、灰色の人がレートを稼ぐならARCに積極的に参加すると良いと思う。

ARCはABCより全然難しくて1問目からdif1500の問題とかの場合もあるんだけど、もしARCのA問題がdif1500で何も解けなかったとしてもレート1500以下の人は半分以上が自分と同じ状況だから結果的にレートは上がることが多い。
レートは絶対スコアじゃなくて相対スコアで変化するからだと思う。

しかも、A問題がdif300~500くらいで考察が大事な問題だった時は、アルゴリズム力じゃなく考察力が問われるからその問題が偶然解けることがあって、解く速度にもよるけどだいたいパフォーマンス500~1300くらい出る。

その代わり、A問題がdif300以下で解けなかったときはだいたいパフォーマンス200以下だから自分のレートが200以下だったらレートは下がっちゃう。みたいなリスクはある。

私の友達は間違ってA問題がdif340のARCに出て1問も解けなかったんだけどパフォーマンスは200くらい出てレート上がってたし、私はunratedだったけどARCで偶然早めに1問解けたことが2回あってパフォーマンス900と1300を出したことがある。unratedだったのを本当に後悔した。

別に何も解けなくてレートが下がっても灰色ならそんなに痛くないし、灰色でかつレートを直ぐにでも上げたかったらARCは出た方がお得だと個人的には思った。

学んだこと・やったこと

以下大体時系列順

  • PythonをゼロからのPython入門講座で学んだ
  • 色々精進の方法を学んだ
  • paizaのD,C問題で競プロに慣れた
  • 毎週ABCに出た
  • AOJのプログラミング入門を大体やった
  • Google colabからVSCodeに移行した
  • Google colabにチートシートを置いた
  • ChatGPTを使い始めた
  • アルゴ式をちょっとだけやった
  • Atcoder ProblemsでABCのA問題を100問、B問題を50問くらい解いた
  • 「問題解決のための「アルゴリズム×数学」が基礎からしっかり身につく本」をだいたい読んだ
  • バーチャルコンテストの「あさかつ」に参加するようになった

PythonをゼロからのPython入門講座で学んだ


私はゼミの関係でプログラミングを始めることになったので全くプログラミングの知識がない状況からPythonをゼロからのPython入門講座というので学んだ。
東大のPythonの資料とかudemyとか本とかいろんな教材はあるけど別にこのサイトで十分だと思う。一週間くらいはかかったと思う。

色々精進の方法を学んだ

そもそも競プロの為じゃなく、機械学習の為にプログラミングを始めたという前提がある。
その上でプログラミング力をある程度培う為に競プロという存在を知り、そこから時々機械学習という目的と競プロという手段がswapしながら競プロを進めた。モチベの為にも色変記事とかめっちゃ見てたし精進の方法を色々学んだし、今も学んでる。主にQiitaとyoutubeを使う。

paizaのD,C問題で競プロに慣れた

当時まだPythonの基礎力を学んだだけでAtCoderに参加するには早いと思いpaizaのスキルチェックのD問題、C問題で標準入力と標準出力の仕組み、空白区切りの標準入力の受け取り方とかを学んだ。

毎週ABCに出た

paizaで標準入力・標準出力に慣れたら早速AtCoderのABCに参加した。
初めて参加したABC280はC問題がdif60とかで一応ABC3完できた。解けるとやっぱりモチベにつながる。
ここから全部のABCにratedで参加している。

AOJのプログラミング入門を大体やった

精進の方法を学んでいるとAOJをやると良いという情報を得たのでAOJのプログラミング入門を数学の部分と最後のdiceの部分以外やった。
完璧主義じゃなく、中途半端に学ぶことも大事だと思う。基本辛かったり、今必要ないなと思ったことはやらずに他の方法を探してる。

Google colabからVSCodeに移行した

今までgoogle colabという環境構築しなくても良い環境でやっていたが、書いたコードをテストするとき一行ずつコピペしてenterを押す必要があったのでVSCodeという環境に移行した。

VSCodeにした理由はKaggleを知ったきっかけである「あずぱん動画」さんがVSCodeを使っていたから。

VSCodeで

import io
import sys

_INPUT = """\
この”””の中に与えたい標準入力を入れる
"""
sys.stdin = io.StringIO(_INPUT)

という魔法のコードを一番上に入れておくと標準入力をわざわざ入れる必要が無くなるのでおすすめ。恐らくデバッグモードという方法でもできるし、他の方法もあるけどとりあえずこれで困ってない。仕組みは未だに分からない。

Google colabにチートシートを置いた

深さ優先探索のコードとか、二次配列を転置するコードとか、約数を列挙するコードとかの使えそうだなと思った自分で書いたコードとか、忘れやすい事とかをまとめたものをGoogle colabにチートシート的な感じでまとめ始めた。

未だに実践で使ったことはないけど、バーチャルコンテストで使ったことは何回かある。
自分で書いたコードじゃないとしっかり理解してなかったりするから自分で書いたコードがおすすめ。

ChatGPTを使い始めた


競プロを始めた理由はPythonの地力を高める為なのでChatGPTに問題を直接投げたりは昨日以外してないんだけど、なんか分かんないことがあったら聞いたりはしてた。昨日は茶色になりた過ぎてChatGPTと検索力の総力戦を仕掛けてしまった。後悔はしてないがばつは悪い。

今のところ禁止されていないのでレートを上げたい人はどんどん使っていけばよいと思う。
今のところAIを使う能力も検索能力も競プロ力の一つ。


いずれChatGPT等のAIを使うことが禁止になる可能性は全然あるので注意して使ってください。

アルゴ式をちょっとだけやった

アルゴ式が精進にお勧めと聞いて全探索と計算量の部分だけやった。
私は使いこなせてないけど、確かに良い教材だと思うので紹介。

Atcoder ProblemsでABCのA問題を100問、B問題を50問くらい解いた

暇だったらAとB問題を解くっていうのを1週間やった。
新しい問題順で解いて、解けても解けなくても他の人の回答を見ていろんなpythonの使い方を学んだ。

別に100問と50問っていうのは解こうと思って解いたんじゃなくて結果的に解いてた。
大体これくらい解けばAB問題の早解きはできるんじゃないかなと思う。
簡単なものであればAB合わせて5分程度で解けるようになった。長くても10分くらいでABは終わるようになった。

正直これ以上ABの簡単な問題を解いてもあまり効果ないと思ったので、AとBのdif100以下とかはもう解いてない。

Atcoder Problemsは必須レベルだと思う。

「問題解決のための「アルゴリズム×数学」が基礎からしっかり身につく本」をだいたい読んだ

図書カードを2000円分もらったので前から気になっていたこの本を買って大体終わらせた。
最終問題とかあまりにも数学なとこはやってないけど、それ以外は大体やった。ここで深さ・幅優先探索とかDP、累積和、計算量の考え方とかをちゃんと学んだ。bit全探索に感動した。

タイトルにある通り数学がまあまあ出てくるので苦手な人にはお勧めできない。

別に本での学習は必須ではないと思うけど、情報をまとめてくれてるので楽に学習はできる。

バーチャルコンテストの「あさかつ」に参加するようになった

いつも通り色変記事を見てると「中卒の主婦が青コーダーになったおはなし」という記事の中でバーチャルコンテストという存在を知った。それから無理をしない程度に「あさかつ」という朝7時半から1時間行われるABC方式のバーチャルコンテストに参加している。

夜は友達とゲームしたいという気持ちと、春休み中生活リズムを整えたいという気持ちにかなりハマるので良かった。

一応中卒の主婦が青コーダーになったおはなしを書いた人が「まよこん」という夜9時からABC方式のバーチャルコンテストを開いてるので夜に参加したい人はそちらがおすすめ。

AtcoderProblemsのコンテストで開催してるよ。

これからの学習

もちろん緑とか水色とかにもなれたらかっこいいと思うんだけど、競プロをする目的は機械学習の為にPython力を上げることなのでここからは機械学習に比重を増やそうと思う。

普通に競プロは娯楽として面白いのであさかつとABCは今まで通り参加して、あとはKaggleやら機械学習の学習に時間を使おうかなと。

楽しいコンテンツを提供してくれるAtCoderさんに感謝を。

以下はここまでの精進履歴