はじめに
筆者は現在47歳、競技プログラミングを始めてかれこれ12〜3年、AtCoderを始めてからは6年ちょっとになりますが、このたびAtCoderアルゴで念願の黄レートになることができました。
この記事はいわゆる色変記事になりますが、この年代の黄色コーダーは数が少ないと思われますので、年齢特有の内容を中心に書いてみたいと思います。
黄色コーダーになるまで
AtCoderを始めたのは2016年なので42歳の頃です。すぐにレート1956までは到達しましたが、グラフを見てわかる通り、その後しばらくコンテストにあまり参加しない時期がありました。
2019〜20年にかけて何度か参加しましたが、年齢による衰えなのか周囲のレベルが上がったのか、レートは下がる一方で水落ちの危機を迎えました。
2021年から本格的にコンテスト参加を再開し、しばらくは停滞していましたが、2021年末頃から上昇基調に入り、2022年10月29日に47歳11ヶ月で入黄を果たすことができました。
年齢を克服するために
歳をとってくると、いろいろと新たな敵が現れます。
- 老眼
- 記憶力の低下
- 思考スピードの低下
- 集中力の低下
この辺りが主なところです。これらを克服するための取り組みを書きます。
大きなディスプレイを買った
2020年頃からCOVID-19の流行でテレワークになったということもありますが、32インチのディスプレイを購入しました。これにより2つの効果がありました。
- ソースコードを大きな文字で表示させることができる
- ソースコードと問題文(ブラウザ)を並べて表示することができるようになる
前者は当然老眼対策なわけですが、後者は記憶力低下の対策になりました。ソースコードと問題文を並べて表示することで、特にインプットの読み込み部分を問題文を見ながら実装することが可能になります。もし並べて表示できない環境であれば、問題文を見て一時的にインプットを記憶し、エディタに切り替えて実装することになりますが、歳を取ってくるとこのような一時記憶が特に弱くなり、ウィンドウの切り替えの回数が結構増えてしまって時間のロスにつながります。こういうのは環境面で解決してしまいましょう。
メンタルの強化
これも競プロ向けに買ったわけではないのですが、メンタルトレーニングの本を買って読みました。野球とかでも若い頃は豪速球で勝負していたピッチャーが技巧派に転じるケースがあるように、衰えてくる思考スピードを何かで補えないかなと思い、メンタル面の強化を図りました。
と言ってもまだまだメンタル弱いですが、多少つまづいてしまってもパニックにならずに立ち直れる(こともある)ようになりました。
大成功が見込みにくくなってきた分、大失敗しないようにすることも大切だと感じています。
ツールの整備
同じくスピードの衰えの対策として、事前にできる準備はするようにしました。能力は衰えつつあるので、なりふり構わず使えるものは使っていきます。具体的には、以下を整備しました。
- テストケースの自動ダウンロード、自動テスト、自動submitツール(ojツールをラップして自作)
- スニペットの整備(modの値、インプット読み込み等)
- コピペ用のライブラリの整備(セグメント木、UnionFind、modInv等たくさん)
リフレッシュタイム
コンテストは通常100分〜120分程度で、若い頃はこれくらいの時間は普通に集中力が続きましたが、歳を取って途中で疲れてくるようになりました。コンテスト中に少し難し目の問題に当たったくらいのタイミングで1〜2分おやつタイムを取って、また難問に集中して取り組めるようにリズムを変えました。
完全に休憩するのはさすがにちょっと時間がもったいないので、次の問題を読んで内容を把握したくらいの状態で、ざっくり方針を考えながら休憩を取るようにしています。
その他の努力
当然ではありますが、黄レートに到達するには年齢対策以外の普通の努力も必要です。他の方々の色変記事でもいろいろ触れられていると思いますが、自分がやったことを簡単に書いておきます。
競プロ典型90問
2021年4月から競プロ典型90問という企画があり、これにリアルタイムで参加しました。競プロ歴はそこそこ長かったものの、典型と言われる手法を系統立てて学んだことがなく、コンテストに参加していても知らない解法が必要なケースも結構多かったので、大変勉強になりました。
典型90問については、紹介されていた類題も含めて(難易度が高すぎたものを除いて)ほぼ解きました。
これで基礎力がだいぶ上がったと思います。
AtCoder Problems Recommendation
AtCoder ProblemsというサイトにRecommendationという機能があります。これは自分にちょうど良い難易度の問題をオススメしてくれるものですが、これをひたすら解きました。結果的に現時点でほぼ青埋めした状態(96.7%)になっています。
典型90問とこのRecommendationで、最低1日1問解いて、Streak365日を達成しました。(ただStreakが呪縛になるのも嫌だったので365日に到達したところで一度切りました)
これにより、青diffまではかなり高い割合で解けるという自信ができました。
コンテスト参加
冒頭のグラフを見てもわかると思いますが、ここ1年以上は毎週のようにコンテストに参加しています。「GigaCode 2019 | 高校生がプログラミングイベントを主催したおはなし」でも紹介されていますが、問題を1500問以上解いている人の87%が黄色以上だそうです。問題数をたくさんこなしていくというのは力になります。現在1266問なので少し早めでしたがおおよそこの基準に当てはまっているかと思います。
レートは上がったり下がったりを繰り返してきましたが、黄色を目指す上でこの1500問を目指すというのを1つの励みとして頑張ることができました。解いた問題数は減らないですからね。
おわりに
競プロの世界は若者の活躍が目立ちますが、40代を過ぎてもそれなりに楽しんで取り組むことができます。この記事が現在の40代以上の競プロerの参考になるとともに、今の若い方々が歳を取った時に参考になると嬉しい限りです。
黄色になったとは言え、黄色レートの方々と比べると解くスピードも解ける問題の難易度の上限もまだまだ差を感じています。またすぐに青に戻ってしまうかもしれませんが、少しでも黄色に定着できるよう今後も頑張っていければと思います。