タイトル通り、Pythonを使って競技プログラミングを始めてみました。「atcoder」という超有名なサイトでbeginnerコンテストに3回ほど参加した感想を色々書いてみたいと思います。
始める前の偏見
・実行速度的にCとかコンパイラ言語が強くて、Pythonじゃダメなんでしょ?
・アルゴリズム知識の引き出しがないと解けないんだろうなあ。
・数学系のライブラリとか、言語差でかそう。
実際どうだったか
実行速度はPyPyを使えばC++と大差ない(C++の方がわずかに早い?)。順位表を見ればわかるが、実はC++とPythonがユーザーの大半。
アルゴリズム知識はあった方が良いが、なくてもbeginerコンテストならそこそこいける。慣れと考え方が大事で、そこは試行回数の問題だと感じた。つけるべき知識はそのうち、ゆっくりと収集すればいいと思う。
ライブラリについて、問題を解くのにライブラリはほぼ使わない(Pythonの場合)。ビルトインで大体どうにかなる。というか原理的なコードで解こうとした方が、自分のコードの計算量がどれくらいなのかわかりやすい。
システム面の話
思ってたよりも緩い。qiitaとかネット上のドキュメントを参照してもいいらしい。ブラウザ上にエディタみたいなテキストエリアがあるが、公式がローカルのエディタで書くことを推奨している。
途中参加してもいいし途中放棄してもいい。ただ、レートが算出されるコンテストに参加するためには事前にまとまった時間の予定を作らないといけないため、生活習慣によっては難しいかもしれない。
beginerコンテストでは7問くらいが出題されて、初心者は二、三問解ければ良さげ。プログラムの基本的な知識があればA問題は余裕、B問題も普通に解ける。
C問題が曲者で、素直に解こうとすると解自体は出ても実行時間制限に引っかかってしまう。一度同じ内容をC言語で書き直しても数msしか変わらなかったため、本当に言語差はなさそう。これを解くために現在はコンテストの試行回数を稼いで、アルゴリズム改善のコツを掴もうとしている。
なお、時間制限に引っかかるだけで解くこと自体はできるぜ!と調子に乗っていたらどうすれば解けるかはわかっても実装が難しいタイプのC問題に遭遇してへし折られた。なかなかやるじゃねえか。
将来的なあれこれ
まずは灰色コーダーからの離脱やC問題を解くことを目標にとにかく試行回数を増やす感じで取り組んでいます。就活に役立つとか、アルゴリズム関係の能力がつくとかメリットはさまざまですが、そもそも単純にプログラムで問題を解くという体験が面白いですね。
こういうアルゴリズムの改善的なやつは実際の制作、コーディングで都度影響するというほどではないですが、多分プログラミングをしていく中で視点がプロっぽくなっていくんだと思います。メモリ消費とか計算量とか。まだ3回しか参加してないのでアレですけど。