文系公務員がAtCoderで入緑するまで

# 自己紹介
はじめまして、東雲情報処理部と申します。
Bigfeetという名前でAtCoderをやっています。
レーティングが700を突破した３月辺りから「入緑したらポエム書くんだ……」と~~フラグを立て続け~~己を鼓舞し続け、6/15に行われたABC358でようやく入緑を果たしました。

私のスペックは次のとおりです（４点目以外適宜飛ばしてください）。

- 地元の小中高→国公立大法学部卒
中学受験の経験なし。数学力は普通よりちょっと上ぐらい。迂闊さに定評があり、大学入試では１桁の足し算を間違え大量失点。
競プロには不向きとしか言えないバックグラウンドです。
- 公務員
新卒から同じところに勤めています。窓口仕事、労務管理、レポート執筆、会議の設営と幅広くこなします。
今の部署は結構忙しく、精進に使える時間は午後11時以降と限られています。
- 使用言語：（競プロ）C++／（仕事）Word VBA、Excel VBA、VB.NET
大学時代にサークルでHP管理の仕事をすることになり、手打ちだったHTMLタグを自動生成すべくVB.NETでアプリケーションを作ったのがプログラミング歴の始まりです。
職場はセキュリティが厳しく、使えるのはVBAのみ。業務の性質上文書添削の需要が大きいので、主にWord VBAを使ったツール開発を行っています。
- [稲場愛香](https://x.com/inabamanaka_)
努力に裏打ちされた確かなダンススキル、バラエティもいける高いユーティリティ性、見せ方を熟知した自己プロデュース力、逆境にも苦手にもしっかり向き合って乗り越える姿勢。我が鑑です。

# 競プロを始めた目的
- 実装力向上のため
私のツール開発は建前上プラスアルファの取組であり、本務そのものではありません。ただ事務処理能力がイマイチで、ツールがないと繁忙期に詰んでしまうことから開発をやめるわけにいきません。任される本務自体が年々増えていき、開発に使える時間が限られてきたため、短時間で仕上げる能力を身に付ける必要がありました。
- 消去法的な趣味
コロナ禍以降のおうち時間は資格試験の勉強に費やしてきましたが、昨春頃から試験会場でマスクもなしに咳き込む人の姿が目立つようになり、安全面から撤退することにしました。完全在宅でできる趣味となると競プロぐらいしか残っていなかったのです。

# 入緑までにしたこと
## 0. 開始前の状態
ループ、全探索、累積和が使える程度。VBAはソートや連想配列といった、アルゴリズム的には必須な機能の多くが存在しない、あるいは気軽に使える状態にない言語なのです。
なおC++は触ったこともなく、初出場のコンテスト（[ABC318](https://atcoder.jp/contests/abc318)）では配列の作り方が分からず１完に終わっています。
## 1. 開始～入茶
約３か月で茶色になりました。
ビット全探索を苦しみながら実装できるところまで成長しました。
- [APG4b](https://atcoder.jp/contests/apg4b)、[AtCoder Beginners Selection](https://atcoder.jp/contests/abs)
プログラミング自体が初めてだった頃は[Visual Basic 中学校](https://www.umayadia.com/)さんに大変お世話になりましたが、今回も最高の教材に出会えて大感謝です。
- [AtCoder Problems](https://kenkoooo.com/atcoder/#/)
RecommendationのModerateをひたすら消化していました。
## 2. 入茶後１～２か月
入緑のためにはD問題を安定して解けるようになる必要があります。ちょうど年末年始でまとまった時間が取れたので、新しいアルゴリズムを習得することにしました。
レーティングが順調に伸び、とても楽しい時期でした。
- [典型90問](https://atcoder.jp/contests/typical90)
星３、星４を埋めました。半分以上は解説ACです。
DFS、BFS、Union-Find、二分探索、「割った余り」の計算テクニック、いもす法等を一通り頭に入れました。
- AtCoder Problems
典型90問の類題を中心に。RecommendationのDifficultに挑戦していたので緑diffが多かったです。
## 3. 入茶後３～４か月
次第に持病の実装難が顔を出すようになり、レーティングが停滞し始めます。
年度末の繁忙期で疲れていたのもあるかもしれませんが、技術面の対策も必要なので試行錯誤していました。
- AtCoder Problems
RecommendationのModerateを消化。実装の重いグラフ問題を選んで解くなど、テーマを絞って苦手を集中的に潰すことにしました。
- ローカル環境の構築
AtCoderのコードテストは開始直後と終了間際に非常に重くなります。これは「ミスる→再テスト→重い→焦る→ミスる」の悪循環を引き起こします。そこで[こちらのサイト](https://zenn.dev/gnz/articles/361773e44fcc41)を参考にさせていただき、VSCodeでローカル環境を構築しました。
構築過程で頻繁に接続エラーが発生して七転八倒しましたが、現在は快適な競プロライフを送れています。感謝です。
## 4. 入茶後５か月～入緑
苦手分野は減りましたが、テストケースがなかなか通らなかったり、B問題でWAを出したりとミスが目立つようになりました。生成AIの台頭が界隈を賑わした時期でもありますがそれ以前の問題です。
考察に時間の掛かる問題に精進の比重が偏って実装感覚が鈍り、早解きすべき400前後のdiffで著しくパフォーマンスが落ちているようでした。
- AtCoder Problems（Boot camp for Beginners）
休日は１日10問ペースでMedeumを埋めることにしました。物量作戦で感覚と自信を取り戻します。
- AtCoder Problems（Recommendation）
Easyを解きました。ちょうど苦戦している難易度帯の問題が並んでいて有難かったです。
# 入緑してみて
### **時間掛かったなぁ……（溜息山王）**
入茶時のAC数が182問、入緑時のAC数が503問。フラグを立て始めた頃はまだ333問だったので、700から800へと残り100のレーティングを上げるのにかなりの労力を要したことになります。
GW頃には入緑しているつもりが、突然パフォーマンスが急降下するようになり、先が見通せない苦しさを味わいました。
ただ、足踏みした期間に知識だけでなくスピードを上げることができ、両者を兼ね備えたイメージどおりの緑コーダーになれたのは良かったと思っています。
# 今後の目標
水色を目指します！
緑ぐらいの実力があれば仕事でも困らないかなと思っていたのですが、いざ緑コーダーになってみると目指す水準にはまだ遠いことを痛感します。

- 実装スピード
少なくともCまでは常に淀みなく実装できるようにしたいです。
- アルゴリズムの知識
E問題を解けるようになりたいです。
VBAはアルゴリズムの実装に必要な機能が乏しい言語ですが、サブフォルダの参照に再帰を使ったりと競プロの知識が役に立つ場面もあります。足りない機能は作ってしまえばいいわけですし（例えばネット上にはクイックソートのコード例が公開されており、私もカスタマイズして使っています）。
手持ちの知識が役に立つかどうかは使い手の工夫にかかっています。VBAをアルゴリズムの世界に引っ張り込み、新たな価値を作り出したいと思います。

# 最後に
プログラミングが好きという気持ちと失敗から学ぶ姿勢を失わない限り、門外漢であろうが向いてなかろうが緑コーダーになることはきっとできます。
拙稿が異分野から競プロへ参入する一助となれば、そしてあなたの職場に価値をもたらす存在になればこんなにうれしいことはありません。
最後までお読みいただきありがとうございました！