データサイエンティストが競技プログラミングAtCoderをはじめてやってみた

きっかけ

会社の仕事関係で数理最適化を学ぶことになった。
入門書などを読んで以下のように理解した。

  • 数理最適化は連続最適化と組合せ最適化に大きく分かれる
  • 会社の業務レベルで設計や実装に工夫が求められるのは組合せ最適化のほう(連続最適化は問題のモデル化ができた後は優れたソフトウェアに解いてもらえばよい)
  • 組合せ最適化の手法は問題によってまちまちで、実務でも個々の問題をいかにアルゴリズムへ落とし込むかが求められる
  • 実際、組み合わせ最適化の教科書の内容はアルゴリズムの教科書とかぶっている

それならば、問題を解く形式でプログラムを書くのはアルゴリズムを学ぶいい方法だと思い、前から存在は認識していたれどもやろうとまでは思わなかった競技プログラミングに手を出すことになった。

AtCoderへの登録と参加

ほかにも競技プログラミングは存在するのだろうが、おそらく最大手であること、開催頻度と参加可能レベルという意味で参加ハードルが低いことから、AtCoderをやってみることにした。

ふと思い立ったのが土曜に電車に乗っているときで、サイトの登録ページをスマホで開いてから1、2分で登録を完了した。世の中のいろんなサービスへの登録もこれくらいスピーディになればいいのに、と思うほどの手軽さだった。

ちょうど土曜の21:00に初心者も参加しやすいコンテストが開催され、たまたま妻も外出しており暇だったので参加する。

開始1分前までJリーグを観ていたのだが、もうちょっとアディショナルタイムが長かったら時間どおりに始められなかったかもしれない。幸か不幸か贔屓のチームが負けてしまったので、何の未練もなくテレビを消して開始することができた。

結果と感想

本当に何の準備もせずに参加したので、標準入力をどうやって書けばよいかわからずその場で調べたり、なんなら提出の後出てきた赤いマーク(もちろんエラー)の意味がわからずこれも調べたりをしているうちにどんどん時間が過ぎていって、2問目に正解して3問目を考えているうちに時間切れになった。

結果は以下のとおり。
atcoder.jp

2、3問目までくらいは、高度なアルゴリズムを使いこなせるかというよりも、もっと普通の仕様を実装できるかが問われているようだ。このような問題を解くには変数や条件分岐、ループといったプログラミングの基本要素を的確に使いこなすことが必要であり、業務でのプログラミングにもある程度役に立ちそうなので少し続けてみたいと思った。いい感じの実装ができず時間が溶けていく日が定期的に訪れるので。

コンテストのページも興味深かった。最近は企業が協賛していることが多いらしく、今回はサントリーの名前が入っていた。競馬の「神戸新聞杯」みたいな感じなのだろうと勝手に理解している。
企業の採用活動も兼ねているようで、おもに学生向けと思われる企業紹介が載っているのだが、これがけっこうおもしろい。そんなにアンテナを張り巡らしている人間ではないので、自分の仕事と関係のない業界のIT関連情報がこうやって入ってくることは貴重である。
atcoder.jp

コンテスト終了後に出る解説もよい。比較的簡単な問題に対しても自分が考えたこともなかった異なる解法が示されていて驚いた。しかもとても合理的かつ仕事で使えたら役立ちそうな解き方だ。プログラミングができる人にはこういう風に世界が見えているのか、同じことをやっているようでぜんぜん違うのだな、とけっこうな衝撃を受けた。
atcoder.jp

今後

AtCoderには色によるレーティングがあり、最初のレーティングである茶色をまずは目指すものらしい。
最初から茶色をはるかに超えるレベルの人とかでなければ、だいたい最速で2、3ヶ月で茶色になっているようだ。
私は就活でアピールしたい学生でもないしそこまで急ぐつもりはないが、1年後とかだと間延びしそうなので、とりあえず今年度中、だいたい半年後の茶色をゆるく目指して継続しようかと思っている。