harryのブログ

ロードバイクとか模型とかゲームについて何か書いてあるかもしれません

アラフォーエンジニアがAtCoderで緑色になるまでの話

なにこれ

  • チラシの裏
  • 2023/03 から ABC(AtCoder Beginner Contest) 始めて緑色になった
  • 時間かかり過ぎじゃない?(はい)

スペック

短いまとめ

  • 必ずやる
    • 鉄則本をやり切ろう
    • 毎週 ABC に参加して復習しよう
    • 競プロ典型90問やろう
  • 人による
    • 「勉強の仕方」を学ぶ
    • 「勉強」をする

本編

きっかけ : Rust とアルゴリズムの勉強を始める

  1. コーディング面接対策しておきたい
    • 人は働いておちんぎん貰わないとご飯が食べられない、という真理
      • と言いつつあまり真面目に就活してなかった
    • コーディング試験やると頭が真っ白になって何も考えられなくなるタイプ
      • 時間制限あってやり直し(再試験)ができない状態でコーディングするのがクッソ苦手
      • 場数こなせば改善するかも、という淡い期待
  2. Rust でも始めるか
    • なんで???
  3. Rust の勉強ついでに、Rust でアルゴリズムの勉強するか
  4. LeetCode とかやる
    • 数年ぶり
  5. 2023/03/02 購入した鉄則本が届く
  6. 2023/03/04 AtCoderABC292 に参加するか…(沼)
    • なお2完だった模様(バカ)

勉強

  1. 鉄則本を読んでやり切る
  2. 「勉強の仕方」を学んで「勉強」する
    • 大学受験系の動画を YouTube で見るのがマイブーム(だった)
    • そもそも「勉強の仕方」が分かってない(はい)
    • 今まで「勉強」らしい「勉強」をしてこなかった(それはそう)
    • 参考動画
    • 写経する時は脳死しない
      • 脳死写経は何も考えてない(記憶の引き出し/アウトプットしてない)から頭にほぼ何も残らない
        • ただの経験則だけど、手書きで自然言語を写経するのとは少し勝手が違いそうに感じる
        • 「プログラミング初心者」ではないので、解法に至るまでの過程の方が重要そう
          • 解法まで行ければコードは書ける
      • なので、なぜそれで解けるのかとか考えながら書く(写す)
      • 最終目標が「何も見ずに0から書ける/解ける」であることを忘れない
        • snuke さんが ABC 解説放送で何度か仰っている金言
        • 前述の通り「完璧」になっている必要がある
  3. ABC だけ必ずリアルタイム参加する
    • 自分的にはこれだけで充分だった
      • ARC とか他のコンテストにも出たい人は出ればいいと思う
        • 自分がやりたいと思ったことを制限する理由はない
        • 基本的に ARC は ABC の E 問題が安定して解けるレベルまでやらなくてよさげ (公式解説放送の snuke さん談)
    • 無職のバカに失うものなどないので、常時 Rated 参加
    • 余裕があるときだけ過去問にバーチャル参加
      • 基本的に鉄則本やり切るまでトピック網羅できないので、週一の本番受け続ける方が重要
    • 鉄則本始めたての頃は後ろの章にあるグラフ問題が出ないように祈祷力を高めておく
  4. ABC で解けなかった問題と1~2つ先の問題ぐらいまで復習する
  5. 休憩がてらに蟻本(第2版)で気になったトピックを読む
    • 「読める!読めるぞ!」
    • トピックの網羅度がすごいので、補完によい
    • 無理に買う必要はない
  6. 鉄則本やり切ったら競プロ典型90問

ABC 日記

鉄則本購入後

  • 2023/03 ~
  • 競プロ、アルゴリズムをゼロベースから勉強したい場合の must buy アイテム
  • 良くも悪くも鉄則本の影響で C~D 問題の難易度が上がってる気がする…
  • 就活そっちのけで読んだり演習問題解いたりしていた(働け)
  • Rust の構文の勉強もやっていた

ABC292 初参加

  • 鉄則本届いて2日後にノリと勢いで参加
  • C 問題が解けずに 2完
  • C 問題で早々に心を折られた後、Ex 問題やって WA & TLE 出して終了
    • なぜ解けると思ったのか、コレガワカラナイ

ABC293 - 297 3完安定期

  • 鉄則本最強
    • とはいえ意外と C 問題に壁があることを感じた
      • Zenn に C 問題攻略記事の下書き作ってまとめ始める
  • 3回目の 294 で初4完
    • 297で2回目の4完

ABC298 - 299 unrated 回

  • 悲しいなぁ
  • 勉強の甲斐あって引き続き3完は安定
  • 相変わらず D 問題が解けない(バカ)
    • Zenn に D 問題攻略記事の下書き作ってまとめ始めた気がする
      • C 問題が意外と早々に安定してしまったため

ABC300 大躍進回

  • 1855位 1096 パフォーマンスで rating +144
  • 終了直前で D - AABCC の AC を通した
    • 41分で C 問題が終わった後、残り時間を D に全力投球することを決め、考察してなんとか解法ひねり出せた
    • 典型がまだ身についてないので簡単な考察系の問題の方がワンチャンある(ない)
  • この回から proconio を使い始める
    • 元々コーディング試験対策で始めていたが、標準入力取得コードは完全に覚えたため
  • 余談
    • この前日、数年前に解けなかった paiza の「A012:最適な練習」が解けた

ABC301 - 302 ?????www??www?w???wwww

ABC301/302のコンテスト成績表

  • あと1回3完で入茶できるでしょ、って状態から2回連続で3完すらできず(なにしてんの???)
    • 302 は B 問題の WA が取れずに1完終了とかいう体たらく
      • C 問題も初見だとだいぶ厳しい問題だった
  • この反省から自分が間違えたことをルーズリーフに書き出すの始めた
  • 結果的に C 問題攻略メモの内容が強化された気がしないでもない

ABC303 入茶

  • 気合の 0 WA 4完で入茶
  • とりあえず3完して入茶、みたいな考えを完全に捨てていた気がする

鉄則本読了後

求職活動期

  • 2023/08 ~
  • いい加減お仕事探さないといかんでしょって感じだったので、転職ドラフトに登録
  • 指名対応とか面接対策で競プロの勉強の時間が全く取れなくなってきた時期
    • 単純なコーディング能力よりも設計能力とかの方が求められがち
    • 競プロ典型90問の進捗が完全に止まる
    • ABC 参加後の復習は引き続きやっていた

ABC313 - 315 暗黒期

  • 4完すらできなかったり、4完でも時間かかり過ぎで rating が横ばいになる
    • 4完安定(笑)とはなんだったのか
  • 「最強プログラマー学生選手権-予選-」ではボコボコにされ2完
    • 最後までバグが取れなかった
  • 就活のコーディング課題でクソコード書いたり時間足りなくて落とされたりもしたけど、私は元気です
    • そもそもこの対策のために始めたのでは…
  • 316 は けつばん

ABC317 初5完

  • E 問題が425点のラッキー回で初5完達成
  • E 問題を徹底的に安全なコーディングに倒して、40分ぐらいかけて解いた
    • なお変数を間違えて WA 1回出した模様(バカ)
      • この WA を冷静に修正できた点に成長を感じなくもない

ABC318 - 319 グダグダ期

  • 4完すらできない時期が続いて凹む…
  • 就活で2社ほど体験入社の話が進んだり、色々ゴタゴタして相変わらず全く勉強ができてなかった
  • 特に319は方針は合ってたのにバグり散らかして2完で終わったり散々
    • ABC ワースト順位を更新
      • Bot アカウントみたいなの考慮しても、初参加より順位低いとかある???
    • リファクタリングして再提出して不貞寝した
    • 調子が悪い日はなにやってもダメ

ABC320 入緑

  • 2社の体験入社が始まっていて相変わらず勉強してなかった
  • 超久しぶりに競プロ典型90問 ( 070 - Plant Planning(★4) ) やったけど、解き方分からず死亡
  • 前日寝不足で体調が最悪だったので「今回もアカンかなぁ…」と思いつつ、開始30分前に仮眠取って頭を整えた
  • 結果、なんと2回目の5完で入緑達成
    • ABC 過去最高順位 & パフォーマンス
    • E 問題が475点の割に解きやすかった
      • 過去の復習が活きたのを実感した回
      • WA 0だったので、前回2回分の反省も活かせた気がする

mstdn.jp

まとめ

ポイントは tl;dr に書いた通り。

  • 基本的に「鉄則本」&「ABCリアルタイム参加 & 復習」&「競プロ典型90問」やるだけで rating は上がっていく
    • 上がり方は人それぞれなので、比較対象を常に「過去の自分」にする
    • 意外とボリュームはある
      • 自分で考えたりまとめたりする時間も含まれるため
  • 今まで勉強習慣がなかった人は、自分にあった勉強の仕方を学んで実践するのが良さそう
    • 自分が継続して努力できる方法を探す
      • ハードルを上げ過ぎない (基本的に ABC だけやり続けた文脈)

雑感

  • 早く ABC 5完安定させて ABC & ARC で水色になりたい…。
  • rating の上がり方的に水色目指すなら6完目指すことになるので、だいぶ時間がかかりそう
    • アルゴリズムの勉強は楽しいのでまだ続けられそうな気はしている
  • ただし勉強の時間が取れず競プロ典型90問の記憶が薄れてきてる
    • 早く職を決めて勉強(生活)のリズムを安定させたい…(社会は厳しい)

Appendix

比較対象を常に「過去の自分」にすることについて

あるいは他人と比較しないことについて。

音ゲー(IIDX)の記事でも書こうと思ってたやつ。

「競技で他人と競い合う」ことと「自身の成長スピードを他人と比較しない」ことはそれぞれ独立で直交っぽい。勝負の世界に生きているトッププレイヤー方々は成長の基準点を自分自身に置いてることが意外と多い。*2

gendai.media youtu.be www.youtube.com youtu.be youtu.be www.youtube.com


*1:というか授業で微積を習った記憶がない

*2:もちろんそうでない人もいるだろうけど