はじめに
皆さんこんにちは。50代半ばでAtCoderをやりはじめた tosh55 と申します。今は56歳です。1年3か月程度かけて2023年10月7日のABC323にて入水したので、色変記事を書いてみたいと思います。
自己紹介
大学教員です。プログラミング自体は昔からやっていますが、アルゴリズムの勉強をちゃんとしたことはありませんでした。たまたま学内で TechFUL を使ったプログラミングコンテストを主催することになり、学生にやらせるなら自分もコンテスタントとして参加してみようということでAtCoderを始めました。やってみたら面白くて、今では趣味になっています。
年齢について
競プロ界での私の特徴は、やはり年齢でしょう。
この歳で一番感じるのは、視力の衰え(老眼)です。学生のPC画面は字が小さくて暗くてぜんぜん見えません。また、疲れてくると画面が霞みます。ですが、これは自分の環境を用意できる場合は大画面にできるのでほぼ克服可能です。
また、学生時代に比べると自由になる時間は減ります。ですが、私くらいの歳になると子供が独立し始めるので、子育て真っ最中よりは時間に余裕があると感じます。
他には、多分記憶力や集中力、思考の瞬発力が若い頃よりは落ちているとは思いますが、まだそれほど気になるレベルでは無いです(若い頃から暗記は苦手だったし)。AtCoderはネット検索やライブラリ使用が自由なのでありがたいです。
ということで、50代でも競プロを楽しむことは十分可能だと思います。ボケ防止にも良いしね。
環境
使用言語はC++(g++)、実行環境は Win10 + WSL2 + VScode + online-judge-tools + atcoder-cli です。上にも書いたとおり、大画面を用意しています。具体的には31.5型をメインモニタにし、サブモニタとして26型のテレビを使っています。これくらいあると、問題ページとエディタ画面をメインモニタに表示して、さらにサブモニタで検索などができます。
振り返り
参加1回目(2022年7月2日)は、AtCoderの仕組みも良くわかっておらず、また、C++の知識も古く(1990年ごろ)2完でした。ですが、一通り周辺知識を仕入れて次からは3完になり、しばらくやっていれば緑にはなれると手応えを感じたので緑を目指すことにしました。なお、最初は Simple C++ Editor を使って参加していました。環境整備無しで参加できるのでありがたかったです。
実際に、開始から約3か月後の2022年10月8日に入緑しました。そのころにはAtCoderにハマり始めて、少しでも良い環境で参加したいと思うようになり、上述の実行環境の整備を行いました。入緑してみると、さらに欲が出たので、水色を当面の目標としました。
その後、上昇率は落ちたものの順調に伸び続けて、2023年5月27日に入水手前まできて、そろそろ達成かと思っていました。実際に6月3日のABC304は本番中調子良くて、これで入水かと思ったら、まさかのUnratedとなりました(DDoS攻撃許すまじ)。これで調子を落としたのかわかりませんが、その後はほぼ横ばいながらジリジリと落ちる展開が続きました。
これまでと同じようにやっているのになぜか成績が伸びず、3か月ほどくすぶっていました。ですが、9月に入ってからまた伸びだし、10月7日に無事入水となりました。復調のきっかけですが、思い当たるのは、AtCoder ProblemsのRecommendationをやったことです。これが本当に理由かはわかりませんが、時系列的にはこれを始めてから伸び出しました。
精進記録
ほぼ毎日、問題を解いています。AtCoder Problemsから、いくつか画像を貼ります。
特にやったこと
自分に特に役立ったと思うやったことは以下の通りです。
-
「問題解決力を鍛える!アルゴリズムとデータ構造」を読んだ(所謂「けんちょん本」)。
最初にこの本を読みました。とてもわかり易くて、私の競プロの基礎を作ってくれた本です。この本のおかげでグラフ問題に強くなった気がします。サイトの「けんちょんの競プロ精進記録」もわかりやすく、ありがたいです。 - 過去問をどんどん解いた。わからなければ、解法を見た。
AtCoder Problemsを使って解きました。ある程度(10分くらい)考えて、解法が思い浮かばないときはためらわず解法を見ていました。時間があまりない人の場合は、長時間考えるより解答を見て学ぶ方が良いと感じています。文章を読んでも理解できないことも多いですが、その際にはsnukeさんの解説ビデオが大変役立っています。 - 物理的に可能なら、必ずABCに参加した。
疲れていても、眠くても、可能な限りABCには参加しています。これは、私自身の性格として、一旦参加しない言い訳を始めると次からも参加しなくなるような気がするからです。当然、万全でない状態で参加すると成績が落ちることもありますが、これも実力のうちで、次に取り返せば良いと考えています。 - ライブラリはできるだけ自前のものを用意
AC Libraryも一応使えるようにしていますが、ライブラリはできるだけ自分で作ろうとしています。実際に、ModIntやSegment木など、自前のライブラリで解答しています。理由は、なるべく原理を理解したいのと、変数名、メソッド名やライブラリの動作を自分好みにしたいからです。 - 習得した知識は Notion にまとめる。
自作のライブラリ、テンプレートや、気づいたことなどはNotionにまとめています。トグルリストで関数名などを見出しにして、クリックで開くと中身のコードが見えるという書き方が自分には合っていると感じています。
やっていないこと
やっている方が結構いるようなのに自分がやっていないことは以下の通りです。
- バチャ
多分参加すれば役立つと思いますが、平日にまとまった時間を取るのは今の自分にはきついです。そのうち参加してみたい気はあります。 -
「プログラミングコンテストチャレンジブック [第2版]」
歴史的な名著ですが、いろいろ新しい本が出ている今では古い気がします。新しい版が出たら読みたいです。 - ARCやAGC、Codeforces、yukicoderなど
私は結構環境の変化が苦手なので、いろいろ手を出すと混乱するかなと思い今まではABC一本に絞っていました。とりあえずの目標を達成したので、そろそろ手を広げてみようかなと思っています。
最後に
水色ときたら次は青なのですが、どうしましょうかね。どこまでいっても(赤以外は)次があるので果てしないですね。とりあえずの目標は達成したので、しばらくは他のコンテストをやったりして楽しみながら、自然と青に近づいたら目指してみようかなと思っています。
最後に、楽しく学べる環境を作ってくれた方々に感謝します。