競技プログラミングについて

この投稿はrioyokotalab Advent Calendar 2020 25日目の投稿です。

adventar.org

競技プログラミングとは

競技プログラミングとは、全年齢対象のオンラインゲームのジャンルの一つである。定期不定期期間問わず開催されるコンテストにて他の参加者と競い合いその最終結果をもとに、それぞれのプレイヤーのレート、メダルといった評価報酬がもらえるのがスタンダードである。

他のオンラインゲームとの大きな違いが、プレイヤースキルにおける比重が非常に重いことがあげられる。この特徴こそが多くの人をこのジャンルのゲームに引きつける要因とも言えるだろう。さらに、ガチャ、運要素もあり、コンテストの得意不得意や結果に多少の運要素が絡んでくることも、このゲームが人々を引き付けて離さない要因とも言える。しかし、運要素は大きなプレイヤースキルの差を潰すことはなく、圧倒的なプレイヤースキルの前には理不尽を感じ、逆に、圧倒的なプレイヤースキルで理不尽を叩きつけられることに公平性を感じ、その魅力を際立たせている。

課金要素は、競技プログラミングサイトごとによってまちまちであり、重課金によってある程度の成績が出せるようになるものから、課金要素がまったくないものまでまちまちである。しかし、ほぼすべてのサイトで課金するだけでトップクラスにいられるということはない。時に無課金重課金を驚異的なプレイヤースキルで叩き潰すところが見れることもある。そういった、実力第一主義なところがこのゲームの魅力なのだろう。

そして、このゲームの最大の魅力は、ゲームのプレイを通して、その実力が現実のタスクに反映されうるというところにある。競技プログラミングで手に入れたプレイヤースキルは実社会においても使用可能なのである。自己の成長と娯楽を同時に達成しているところが、中毒性を増しているとも言える。

登録済み競技プログラミングサイト一覧

AtCoder

AtCoder

プレイヤースキル: ☆☆☆☆☆

必要プレイ時間: ☆☆☆★★

コミュニケーション能力: ☆★★★★

プロフィール

atcoder.jp

  • 初段
  • Rating 1860
  • 青コーダー

(2020/12/25現在)

アルゴリズムコンテストをメインに開く日本最大手の競技プログラミングサイト。コンテストでは、コンテストによりますが、6問程度の問題が出題され、それぞれの問題では、現実の例に則した問題文と、入力と、その入力に求められる出力が示されます。私たちは、その入力と出力を達成するアルゴリズムを考案し、プログラムし、そのプログラムを提出することが求められます。プログラムには実行時間制限が設けられており、たとえ正しいプログラムであったとしても、非効率なアルゴリズムを実装した場合、不正解とされます。提出したプログラムは10から100件程度のテスト入力によって正しい出力が生成されているかをチェックされ、そのすべてのテストデータに正解することで、そのコンテストにおけるその問題の得点を獲得することができます。 最終結果は、正解した問題の得点の合計で競われ、得点が同じ場合は最後の問題を提出した時刻の速さで競われます。

AtCoderで勝つためには、大量の情報数学とプログラミングの基礎知識を身に着ける必要があります。このことから、AtCoderでの強さはプログラマーとしての強さそのものではないですが、ありとあらゆる方面のプログラマーになるための下地になります。じっくり時間をかけてIT系の道を目指すのであれば、最も上に進むための入り口になり得ますが、ここで身につけた実力が成果に反映されるようになるには、想像以上に時間がかかるかもしれません。

シンプルな実力のみでのぶつかり合いを楽しみたい人におすすめのゲームサイトです。

ICPC 国際大学対抗プログラミングコンテスト

ICPC

プレイヤースキル: ☆☆☆☆☆

必要プレイ時間: ☆☆★★★

コミュニケーション能力: ☆☆☆★★

  • 2019年にunlimited greedyのメンバーとして参加
  • 国内予選 18位 突破
  • アジア予選 38位 敗退

国際大学対抗プログラミングコンテストと呼ばれるこのコンテストは大学内で3人1組のチームを組み参加するコンテストです。AtCoderと同じような形式の問題が10問程度出されます。正解の決め方もAtCoderと同様です。ただし、順位の決め方は、得点順で決めた後、同点のチームについては、解けた問題それぞれの提出時間の合計となっています。

このコンテストサイトの面白いのは、国内予選、地域予選の2つの予選を勝ち抜き、世界大会で優勝者を決めるということです。予選や世界大会は年に1度しか開催されず、大学の一つの青春をそこに捧げます。

チームを組むことで、思考の共有や議論が生まれ、大学の間に身につけてきた実力をさらにひとまわり成長させてくれることでしょう。

Kaggle: Your Machine Learning and Data Science Community

Kaggle

プレイヤースキル: ☆☆☆☆★

必要プレイ時間: ☆☆☆☆☆

コミュニケーション能力: ☆☆☆☆★

プロフィール

www.kaggle.com

  • Kaggle Master
  • 最高ランク 26位
  • 現ランク 78位

(2020/12/25現在)

機械学習系のコンテストをメインに扱うコンテストサイトです。一回のコンテストの期間は、コンテストによりますが、おおよそ3ヶ月程度で、その期間で与えられたデータセットに対する機械学習モデルの設計を行います。機械学習モデルの性能を上げるためには、実験の積み重ねによるデータの知見の蓄積が必要になってきます。そのため、アルゴリズム系のコンテストサイトに比べて、一度のコンテストにかける時間が比較的多いように感じます。また、チームを組むことも可能で、チーム内でデータの知見の共有を行うことで、より良い機械学習モデルの作成を可能にします。そのため、プレイヤースキル以外にも、高いコミュニケーション能力を必要とします。また、開催中のコンテストについて情報をチーム外に共有することが禁止されているため、機械学習についての様々な知見を得て成長するためには積極的にチームを組んでコンテストに参加する方が望ましいです。

順位はPublicとPrivateという二種類があり、それぞれ、Public Test DataとPrivate Test Dataに基づいて提出された機械学習モデルの推論プログラムによる性能が評価されます。Publicはコンテストが開催中であっても見ることが可能で、自分のモデルが他チームと比較してどの程度いい性能を出しているかを図る目安になります。Privateはコンテストの真のスコアで計算される順位で、コンテストの最終成績はPrivateの順位で決定されます。PublicとPrivateの順位の入れ替わりはコンテスト毎に話題になる程多くの人が気に掛ける要素となっています。

機械学習という最先端な技術を扱っているゲームサイトなので、コンテスト毎に面白い発見がなされ、共有されます。自分の持っている知識で、新しい境地を開拓したいという人におすすめのゲームサイトです。

まとめ

競技プログラミングは人生