AtCoder入茶
2023年02月26日開催のAtCoder Beginner Contest 291で入茶することができた。
2022年の10月ごろからコンテストに参加しはじめて、約4ヶ月、コンテスト参加回数20回目にしての茶色レート突入となった。
数学の知識はなくても茶色Coderにはなれる。
自分について
- エンジニア歴5年半
- 高校数学の知識はない(中学数学も怪しい)
- アルゴリズムやコンピュータサイエンスについてきちんと学んだことはない
- AtCoderはRubyで参加
茶色になるまでやったこと
可能な限りコンテスト(ABC)に参加する
土曜21:00 or 日曜21:00に開催されるABC(AtCoder Beginner Contest)に可能な限り参加した。2022/10/15ぐらいから毎回参加できているはず。
実際のコンテストと過去の問題を解くのでは、経験値が段違いだと感じている。レーティングの上昇/下降がかかっている緊張感や、少しでも早く問題を解こうとする焦りなどがあるからだろう。
コンテストの結果が高ければ嬉しくてまた頑張ろうとなるし、低ければ悔しくてもっと頑張ろうとなる。
もちろんコンテストに参加するだけではなく、日々の練習も大事。
ABCが土曜開催の時は、翌日に提出したコードのリファクタリング(コンテスト中はスピード優先でとりあえず動くコードを書くため)をしたり、別の言語(Go言語)で書き直してみたりもしている。
※ 注意 ※
まずは、茶色を目指しているというレベルの人は、ARC(AtCoder Regular Contest)に参加するのはやめた方がいいと思う。
Regularと銘打ってはあるので一般的なレベルかと思うかもしれないが、RegularはAtCoder内でのRegularだ。AtCoder内のRegularはレベルが高すぎる。
ARCではA問題から300点、400点の問題が出題される。ABCでいうC問題、D問題あたりのレベルだ。
A問題がなんとか解けてレートが上がるより、0完でレートを大幅に下げてモチベーションが下がるリスクの方が大きそう。Beginnerからはじめよう。
毎日過去問を解く
AtCoderはじめて1ヶ月ぐらいの時点で、GitHubでリポジトリ管理するようにした。コンテストのコード、過去問のコード、書籍などで学習した内容などをまとめて管理している。
※ コンテストのコードはコンテスト終了後にプッシュすること。コンテスト開始中にプッシュして公開すると規約に触れるはず。
AtCoderをやっている人はほぼみんな利用していると思われるAtCoder Problems。過去問をやるときもとっても便利。こんな素晴らしいアプリを無料で提供していただきありがたい。
過去のコンテストの灰色diff問題を毎日解いている。毎日大体2~5問。虚無埋めと呼ばれる内容かもしれないけど、まずは継続することが大事。自分のレベルだと灰色diffでもたまに手こずる問題もある。
コンテストで灰色diffの問題(A~Cあたり)を30分程度でACできれば十分茶色になれる。
毎日やることで、GitHubに草生やせるし、AtCoder ProblemsのStreakも伸びていくのが良い。毎日新しい問題に取り組むので、(一応)意味のあるコードを書いていることになるだろうと思っている。
(参考)jQueryの作者John Resigのブログ。毎日コードを書く。
AtCoder ProblemsのAchievement。Longest Streakが2ヶ月継続できている。
GitHubも順調に草生えてる。
AtCoder Problemsで表示されるdifficultyについて。最初の頃はdifficulty = レーティングの目安かと思ってた。
現在の内部レーティング*1がこの値の人がコンテストでその問題を見たら50%の確率で解けると考えられる値です。過去のコンテストの結果から推定しています。
アルゴリズム/競技プログラミングの学習
AtCoder鹿本を一通り読んだ。章末などにあるAtCoderの関連過去問はdiff600以下ぐらいを目安に解いてみた。計算量、グラフ、幅優先探索、bit全探索など学ぶ。
先日のABC289のC問題は、この本で学んだbit全探索がそっくりそのまま利用できた。
入門書ではあるが、上級編になるとなかなか難しい。一通り読んだけだけではちゃんと理解できていない。章末の関連問題もdifficulty1000越えてくる。中級編ぐらいまでの内容が理解できていれば、茶色コーダーはいける気がする。
1週目はRubyでやったので、2週目はGo言語でやってみようかと思っている。
アルゴ式もちょこっとやってる。今のところ無料で利用できる。
ほんとにちょこっと。
DP(動的計画法)のコンテンツの評判が良いみたいだし、今後もうちょっとやっていこうかなと思う。
やってないこと(今後やりたいこと)
解説放送を観ること
コンテスト後にAtCoder社が解説放送をやっているが見ていない。コンテスト中に挑戦して解けなかった問題は解説動画見た方がいいのは分かってるけど、なかなか時間が作れず見ていない。
競プロ典型90問
AtCoderやりはじめた直後に挑戦したけど、一番簡単なレベルの問題でもわからなくてそれから手をつけていない。
今なら前よりわかるようになってるだろうし、そろそろ再挑戦したい。
コンテスト参加の記録
今までコンテスト参加の記録はつけていなかったが、ABC291から記録をつけはじめた。解けた問題はどういう解法で解いたか、解けなかった問題はどういう方法を考えたのか、何で詰まったのか、どうやって解くべきだったのかをつけるようにする。
今後
茶色上位(600 ~ 800)が目標。
レートを維持するために日々の灰色diffの問題埋めは継続する。
レートを上昇させるためにD問題で出題されるような基本的なアルゴリズムを理解して使えるようになる。
近々第二子誕生が控えてるので、今までのように時間を作るのが難しくなると思うが、できる範囲で精進していきたい。