WEBSYSスタッフ日誌

国立大学法人電気通信大学社会人履修証明プログラムWEBSYSの公式スタッフブログです。単なる学び直しで終わらせません!最新情報を発信いたしますので、フォローをお願いします。ご不明点等についてはメール、DM📩にてお気軽にお問い合わせ下さい。

「競技」プログラミングという存在

はじめに

はじめまして、Websysスタッフの後藤です。

今回は私が5年以上続けている競技プログラミングについてご紹介したいと思います。

アプリケーションやWebサイトを作る以外のプログラミングの世界も知っていただければと思います。よろしくお願いします。

最近の話

ところで、4/22(土)の23時ごろ、日本のTwitterトレンド20位に「unrated」という文字列がランクインしました。

これはその日に行われた競技プログラミングのコンテストが無効試合となるアクシデントが起こったことから来ていると思います。
原因はDDoS攻撃という攻撃でジャッジサーバーが機能しなくなり、コンテストを続行することができなくなったからということでした。

1つの競技プログラミングのコンテストがTwitterトレンドに上がるほどの話題になっています。最近少し人気が出ているので、その世界を覗いてみましょう。

競技プログラミングとは?

まず、競技プログラミングというのがどういったものなのかをご紹介したいと思います。

競技プログラミングというとアルゴリズム系を指すことが多いです。これは、ある問題が出され、その問題の要求を満たすようなプログラムを正確に記述する速さを競うというものです。

コンテストの紹介

  • AtCoder
    • 日本最大の競技プログラミングサイトと言っても過言ではないと思います。
    • 冒頭のunratedの話はこのサイト
    • コンテストに参加するとレートが付与される。
    • レート帯ごとに色が振られており、上を目指すモチベーションにしている
    • AtCoder Beginners Contest(ABC)をはじめとし、様々な層向けのコンテストがほぼ毎週開催されている
  • Codeforces
    • 海外版AtCoderのようなサイト。コンテスト頻度が高めですが、時間帯が日本の生活と合わないこともしばしば。
  • ICPC
    • 大学間対抗コンテストです。1年1回国内予選、アジア地区予選、世界大会と段階を踏んで進んでいく大会です。
  • 情報オリンピック(JOI)
    • 高校生以下向けコンテストです。過去問はAtCoderでとけます

AtCoder電通大

所属欄に電通大を書いているアクティブユーザーが4/24現在104人います。

結構多いほうなのではないかな?と思っています。

atcoder.jp

最近はただのオンラインゲームから、就活に役立つようにもなりました。レートに応じてインターンのスカウトが来たりするようになるAtCoderJobsなるサービスがあったり、企業スポンサーのコンテストで希望を出すと説明を受けられたりしますね。

レートの分布はこんな感じです。

所属電通大の人のうち、一番レートが高い人の画像をお借りました。自分は緑と水色の境目くらいにいます。まずは灰色を抜け出して色を付けるところからという感じですかね。

例題

情報オリンピックのサイトの中(こちら)にある例題を眺めて、競技プログラミングの世界を覗きます。

JOI2014改題

基本料金があり、ある程度使うと使った分に比例してお金がかかるプランと、使った分に応じた金額だけかかるプランの比較問題ですね。

どちらが安いのか、現実で考えることもあると思います。これをプログラムで自動化しようという問題になります。とけそうでしょうか?

その他のコンテスト

プログラミングをして競うという意味ではアルゴリズム系以外のコンテストもあります。例えば

  • CTF系
    • セキュリティに関する問題が出され、埋め込まれた旗を探したりするものが多いです
    • SECCONとかが有名ですね
  • Kaggle
  • ゲームAI系
    • 最近は少なくなってきて、codingame くらいしか知らないです...
    • オセロのAIなど、あるルールのもとで強いAIを作り、AI同士の対戦で1位を目指します
  • ヒューリスティック
    • ラソンと呼ばれているやつですね。(TopCoder Marathon Matchから?)
    • 厳密解を求めるのが困難な問題に対し、いかに精度良い近似解を作れるかという趣旨のコンテストです
    • AtCoder Heuristic Contestが最近はメインだと思います。

という感じです。

おわりに

なにかモノを作るためのプログラミング、サーバをメンテナンスするためのプログラミングなどなど色々あると思います。

何もやりたいことが思いつかない場合はこういう道もあるのだと知っていただけるといいのかもしれません。

この記事がなにかの発見になったなら嬉しいです。ありがとうございました。