競技プログラミングのご紹介

皆さん、「競技プログラミング」をご存じでしょうか。
新型コロナの影響もあってか、ここ1年ほどで世界的に参加者が急増したそうです。
競技プログラミングとは
競技プログラミングはプログラミングコンテストの一種です。
プログラミングコンテストには、作品を作るもの、AIを作るもの、ソースコードの小ささを競うものなど、いくつか種類がありますが、競技プログラミングはアルゴリズムに関係する問題を解く速さを競うものです。
例えば以下のような問題です。
こちらは初級者向けコンテストの一番簡単な問題です。
たいていの問題では、標準入力にいくつか値が与えられ、実行制限時間内に結果を標準出力します。
出力結果が合っているかどうかを判定され、全てのテストケースが通ったら得点になります。
競技プログラミングの面白さ
先程の問題はとても簡単であまり面白味は感じないものだったかもしれません。
では以下の問題だとどうでしょう。
for文で1からNまでチェックするという方法が考えられますが、Nの最大が100億のため、C++で書いても実行に数分かかり、制限時間に引っかかってしまいます。(ちなみにこの問題の実行時間制限は2秒です。)
この問題のように愚直に考えると時間がかかり実行しきれないものを、いかに計算量を落として実行可能なアルゴリズムにするか、というのが一番の醍醐味になります。
特にパズルや数学が好きな方は楽しめるのではないでしょうか。
日本最大の競技プログラミングサイト「AtCoder」
競技プログラミングに興味が出た方は、まずは「AtCoder」に登録しましょう。
AtCoderでは毎週土曜21時からコンテストを開催しています。
初級者向けコンテストには毎回およそ1万人ほどの参加者がおり、そのうち半数が日本人とのことです。
参加者は理系の大学生や研究者が多く、10代後半から20代が圧倒的に多い印象です。
競技プログラミングの強さは「レーティング」で表され、コンテストの結果によって、レーティングが変動します。
またレーティングの他にも、レーティングに対応した「色」でレベルが分けられ、AtCoderの場合は以下のようになっています。
レーティング | 色 | 割合 | レベル感 |
---|---|---|---|
2800- | 赤 | 上位0.3% | 世界レベルのトップ選手です。現在日本に 20人 前後しかいません。 |
2400-2799 | 橙 | 上位1% | 各大学で数年に 1 人レベルのトップ選手です。 |
2000-2399 | 黄 | 上位3% | 各大学のエース級選手です。世間的にはアルゴリズム特化のリサーチャーなど、エキスパートとして活躍できる実力です。 |
1600-1999 | 青 | 上位7% | 世間的にアルゴリズムスペシャリストとして活躍できる実力です。 |
1200-1599 | 水 | 上位15% | 世間的にソフトウェアエンジニアとしてトップレベルの実力です。 |
800-1199 | 緑 | 上位30% | ソフトウェアエンジニアとして大変優秀な実力です。 |
400-799 | 茶 | 上位50% | 各大学の情報系学部でしっかりとプログラミングを勉強して上位 1 割の成績を収めている学生さんの実力です。 |
1-399 | 灰 | レーティング 200 以上になるためには、プログラミングに十分に慣れる必要があります。 |
参考:https://qiita.com/drken/items/8a6f139158cde8a61dce
まずは灰色から始まり、茶色、緑色と目指していきます。緑色以上になると普段の業務では使わないようなアルゴリズムが必要になってきます。
一番上は赤色ですが、AtCoder以外のメジャーなコンテストサイトでも赤色が最上位となっており、赤色のレーティングに達した人は「レッドコーダー」と呼ばれるそうです。
競技プログラミングをやってみた所感
初級者向けコンテストである、AtCoder Beginners Contest 200に参加し、100分をかけて6問中4問を解くことができました。
参加者約8000人の中でだいたい1000番目くらいの成績です。
競技プログラミングを実際にやってみて感じたのは、業務でのプログラミングとは全然違うということです。
競技プログラミングは可読性・再利用性を考えずにとにかく速く書いて解くことが目的です。
当然コメントは書きません。
また、競技プログラミングが役に立つかということを考えると、すでに業務でプログラミングをしている方は、業務で必要なデータ構造とアルゴリズムを学んでいると思いますので、役に立つケースはそれほど多くないと思います。
逆に業務経験が少ない方は、基礎的なデータ構造とアルゴリズムを学べ、プログラミングに必要なコンピュータサイエンスも部分的に学べるので有用なのではないでしょうか。
とはいえ、業務経験豊富な方にとっても頭の体操になりますし、解けたときはとても爽快な気分になれるので、試しにやってみてはいかがでしょうか。
◆WEB会議/セミナーシステム『Szia』
https://www.ois-yokohama.co.jp/szia/
◆サーバサイドで動作するミドルウェア『ReDois』
https://www.ois-yokohama.co.jp/redois/wp_redois/
◆AIがトレンドトピックをもとに、読まれそうな記事タイトルを自動生成『AI Title Maker』
https://ai-title.com/