最近, 趣味で競技プログラミングを始めました.
まだ簡単な問題が解ける程度のレベルですが, 競技プログラミングに関して自分が行っていること, またどういうところが面白いと感じているかについて書きます.

競技プログラミングとは

競技プログラミングは, 「出題されたプログラミングの問題(アルゴリズムや数学に関する問題が多い)を制限時間内に解くこと」のように定義されることが多いです.

大会も数多く開催されており, 問題の内容やルールについては大会毎に異なるようです.
私はまだ大会に参加したことはなく, 大会で出題された問題の過去問を解いています.

利用しているサイト

私が競技プログラミングの問題を解くために利用しているサイトはAOJです.

このサイトの良いところは,

  • 問題文の英語と日本語の切り替えが可能
  • 多数のプログラミング言語に対応
  • 簡単な問題も多いので初心者も始めやすい
  • 他の人が書いたコードを閲覧することが可能
  • 問題毎に解答者の正答率が分かるので, 難易度が大まかに分かる

などがあります.

面白さについて

まず私がプログラミングのどこに楽しみを感じているかについて改めて考えてみると, 「シェルスクリプトやワンライナーを使って普段の作業を効率化する」ところに, 大きな楽しみを感じていることに気付きました.
シェルスクリプトやワンライナーの記述には, 期待した結果を得るためにコマンドを組み合わせるというパズルに似た楽しみがあると思っています.

上記のことを踏まえて競技プログラミングに何故面白さを感じているかを考えると, 与えられた入力に対して期待した出力を得るためにコードを記述するという点に, シェルスクリプトやワンライナーの記述に似た楽しみがあるからだと思っています.
上手くいかず試行錯誤している時は苦しいですが, プログラミングをする中で一番楽しい時間でもあると感じています.

また総当たりで解こうとしていた問題が, 学生の時に習っているはずの数学の定理を利用すれば簡単に解けるということが何度もありました.その経験から最近高校数学の復習も並行して行っているのですが, 学生のときには感じなかった数学の楽しみを感じることができています.定理をどういったところで使うのかが分かっていると, 抽象的な数学の理解も深まります.

おわりに

今後も引き続きAOJの問題を解くことで, 実力を付けていきたいと思っています.
それに加えて数学の学習も継続することで, より難しい問題にも挑戦していきたいです.

また競技プログラミングはオンラインの大会も数多く開催されているので, そういった大会にも少しずつ参加していき, 実力を付けていこうと思っています.