競プロ始めて半年経った

いわゆる競技プログラミングというものに手を出し始めて半年ほど経ったので、マイルストーン的な意味合いで文章を残しておきます。

お前は誰だ

プログラミングとは無関係の事務職についてる新卒一年目です。ただ学生時代は半分情報系のような研究室にいて授業とか研究でコードは書いてました。

コンテスト

AtCoder, yukicoder, Codeforcesのコンテストには時間が合うならできるだけ参加するようにしています。競プロの代名詞的存在っぽいところのTopcoderもやりたいんですが開催頻度と時間帯の問題でまだ一回も参加できてません。レートは11/23現在でそれぞれ以下のような状況です。

AtCoder f:id:fluffyowl:20161123152408p:plain

Codeforces f:id:fluffyowl:20161123152525p:plain

過去問を解くこと

今はコンテストよりもむしろ過去問解くのがメインのような状況で、AtCoder, yukicoderを中心に解けそうなものから手を付けていっています。過去問埋めは時間にも拘束されないし基本的に積み上げていくだけでマイナスがないのでモチベーションが保ちやすく、RPGの素材集めみたいなのが好きな人にはおすすめです。取り組み方として、最初のうちはなるべく解説を見ないでがんばる、わからなかったら撤退して別の問題に当たる、という方針でやってましたが、最近は割とさっさと解説見てしまうことが多いです。ただしわからん問題は解説読んでもわからんことが多く、そういう場合は周辺知識を調べたり他の解説がないか探したり解説を踏まえて考え直したりして出来る限り納得してから実装に取り掛かるようにはしています。

過去問埋めはAtCoderに関しては AtCoder Problemsをとても便利に使わせてもらっています。yukicoderはそもそもサイトの仕組みとして問題一覧のソート、絞り込み機能が充実していて、最高です。

Atcoderの埋め状況 f:id:fluffyowl:20161123155255p:plain

yukicoderの埋め状況
★1: 103/103
★2: 122/122
★3: 82/134
★4: 6/70
★5: 0/18
★6: 0/2

感想

別に競プロに限らずなんでもそうだろと言われてしまえばそれまでなんですが、新しいことを知れる、それによって今までできなかったことができるようになったという実感を得られるのが自分にとって競プロのいちばん楽しいところです。

たとえば自分はPythonが好きで競プロでもPythonばっかり使ってたんですが、最近はD言語を勉強し始めて本番の軽そうな問題以外はD言語で書くようにしています。昔は新しい言語を覚えようとして少しかじってすぐやめる、みたいなことが多かったんですが、明確なタスクがあると書かざるを得ないんで競プロの範囲ではだいぶ違和感なく書けるようになってきました。こういう新しいことの積み重ねが楽しさに繋がっています。(ちなみにTopcoderではD言語は使えないらしい、死)

で、初めのうちは暇つぶしで気ままにやってるだけでこういう進捗が適度に得られて十分楽しかったんですが、さすがに半年も経つと頭打ち感がでてきてしまいまして、これ以上目に見える進歩を得たいならそのための取り組みを意識的にやってく必要があるな〜と感じてます。がんばるぞい。

今後の目標

レーティングに関して、AtCoderでは黄色になること、CodeforcesではDiv1に参加できるようになること、Topcoderは参加すること。あとは蟻本を一度ちゃんと読むこと、時間に余裕があれば作問側の考え方を学ぶこと。あと転職してえ