アルゴリズムを武器に闘え!『PG BATTLE 2021』のベースにある「競技プログラミング」の魅力と未来を訊く

最終更新日時:2021.10.15 (公開日:2021.10.13)
アルゴリズムを武器に闘え!『PG BATTLE 2021』のベースにある「競技プログラミング」の魅力と未来を訊く

2021年10月23日(土)、競技プログラミング大会『PG BATTLE 2021』がオンライン開催されます。PG BATTLEは企業・学校対抗の競技プログラミング大会。3名のメンバーで構成されるチームが「ましゅまろ」「せんべい」「かつおぶし」とユニークにレベル分けされたプログラミングバトルを繰り広げます。

PG BATTLE 2021 - [第4回]企業・学校対抗プログラミングバトル

近年はPG BATTLEのベースとなっている競技プログラミングへの注目が大きく高まっており、採用活動の参考にする企業も増加していますが、基本となるのはゲーム的なアルゴリズムを考える「楽しさ」です。

そこで、囲碁や将棋のような知的スポーツとして、eスポーツのように世界的に盛り上がりを見せている競技プログラミングの魅力とPG BATTLEのポイントを世界トップレベルの競技プログラマーでAtCoder株式会社・代表取締役の高橋直大氏に伺いました。

なお、Qbookでは、大会の開催に至った背景や大会の見どころなどを、主催者である株式会社システムインテグレータ・代表取締役社長の梅田弘之氏に話を伺っています。こちらも合わせてご覧ください。

今回話を伺った方

img01.png
高橋 直大氏

AtCoder株式会社 代表取締役

東京都出身。筑波大学附属駒場中学校・高等学校、慶應義塾大学環境情報学部卒業、慶應義塾大学 政策・メディア研究科修士課程修了。大学在学中にマイクロソフト主催のプログラミングコンテストである「イマジンカップ2008」のアルゴリズム部門で世界3位となる。2012年、競技プログラミングの楽しさを世界に発信するためAtCoder株式会社を設立し、多彩な活動を展開している。

もくじ
  • 「競技プログラミング」の魅力とは?
  • 「競技プログラミング」と『PG BATTLE』の共通点、相違点
  • 『PG BATTLE』に攻略法はあるのか?
  • 『PG BATTLE』と競技プログラミングの未来

「競技プログラミング」の魅力とは?

かんたんな自己紹介をお願いします。

AtCoder株式会社の代表をしている高橋直大です。AtCoderはプログラミングコンテストを運営する会社で年間70~80ほどのコンテストを開催しています。作った問題も5,000問を超えました。

AtCoderは、今、日本で盛り上がっているコンテストの一つだと思っています。ほぼ毎週コンテンストを開催していまして、参加者は毎回1万人以上です。

報道記事などを見ると、AtCoderは「世界3大コンテスト」とされていました。世界規模で盛り上がっているのですね。

現在、「世界3大コンテスト」のなかでロシアのCodeforcesが一番強いと言われています。実質的2番手がAtCoderです。そして、アメリカのTopCoder。TopCoderは昔からあり、1強時代があることから権威があります。

実は、これらとは別にグランドスラム大会的に年1回、開催される「世界3大コンテスト」もあります。「Google Code Jam」「Facebook Hacker Cup」「TopCoder Open」の3つです。実は当社の副島(副島真氏)はこの全てで優勝しています。こういったことは、もっとテレビ等で報道してほしいですね。

AtCoderの凄さが伝わってきます。ところで、高橋さんが競技プログラミングを始めたきっかけは何でしたか?

高校まで野球をやっていたのですが、肘を悪くしてしまい止めることになりました。次にやることを探しているとき、友人がいたパソコン研究部で3人1組が参加するプログラミングコンテストとかあると聞いたのです。

当時、プログラミング経験はほぼゼロでしたが、昔からコンピュータが好きだったこともあって自分もチームに入って出場したのが初めての競技プログラミング体験です。

この東京工業大学が主催している「スーパーコンピューティングコンテスト(スーパーコン)2006」に出場してから、もう15年間、競技プログラミングに関わり続けてきたことになります。

話が前後しますが、競技プログラミングの概要を教えてください。

競技プログラミングは単純には問題が与えられ、それを解いていくものです。例として、AtCoderの最近のコンテストを見てみましょう。

image2.png

図:競技プログラミングの問題例(AtCorder社のウェブサイトより)

これはビギナーコンテストの問題です。ビギナーコンテストと言いつつ、ビギナー向けではない問題が出ることがあったりしますが、この一つを開くと算数のような問題が表示されます。今回の問題は単語のような文字列が2つ与えられるので、どちらが辞書順で小さくなるか、つまり辞書で先に出てくるかを判定するというものです。文字列「abc」と「atcoder」の並びだと、「abc」の方が辞書で先に出てくるので「Yes」と回答することになります。

この問題を解いてプログラムで回答を提出するとリアルタイムで採点されます。問題が難しくなってくると、与えられるデータが大きくなったり、単純にコンピュータに計算させるだけでは間に合わない問題があったりするので、コードを書くには工夫が必要です。基本的に、この工夫ができるか、できないかというところで参加者は競い合っています。

そして、コンテストで問題を解いた結果と参加者の順位表が出ます。今回の問題で1位の人が8問目までを解いた時間は39分でした。このようにして成績に応じて参加者のレーティングが表示されます。

image4.png

図:競技プログラミングでのレーティング事例

レーティングの色が参加者のだいたいの実力を現していると言えます。そのため、参加者はまず色付きレベルを目指すのが第一歩ですね。このようにして毎週、競い合い、楽しく盛り上がっています。

最近では、問題が1問しかないヒューリスティックコンテストを開催して、SNSで注目を集めることもありました。

image5.png

図:回答例。第三者が見ても楽しめるためSNSにも多く投稿されている(AtCorder社のウェブサイトより)

さらにeスポーツの大会とコラボすることもあり、「これ(競技プログラミング)もeスポーツだよね」といったスタンスで取り組んでいるところです。

競技プログラミングのスコアが高いほど実務能力があると考えていいのでしょうか?

image6-280x160.png

それは単純に「Yes」とは言いがたい面があります。ITエンジニアという広いくくりで考えると実務能力として考えられるスキルの幅が広すぎるからです。WEB系にしてもバックエンド、フロントエンドがあり、さらにWEB系ではないものもいろいろあって、組み込みやインフラもあります。それぞれ何がどれくらい役立つのか条件が異なってきます。

ただ、先ほどの競技プログラミングのレーティングで言えば、ITエンジニアになるのであれば、茶色レベルにはなっておきたいというのはあります。茶色レベルがあればできる仕事は大量にあります。

緑色レベルがあった方がうれしいのは、WEB系などでデータをたくさん扱う場合などです。計算量の概念等を理解しており、計算量を落としたりとかできる人たちが緑色レベルになります。

水色や青レベルになってくると、もっと専門的です。極端なことを言うと、大半のIT業務においてここまでの能力は実は必要とされてない面があります。ただ、このレベルが無意味かと言ったらそんなことはなく、これらを要求する業務も当然あるわけです。

企業や業務ごとに求められるものが異なるので、そこは各エンジニアがどこまでやるべきかを見極めて、ちゃんと考えることが重要だと思っています。

競技プログラミングを教育やスキルアップと結びつける見方もあるようですが、その点をどう捉えられていますか?

競技プログラミングは教育的なものだと考えられがちですが、実際にやっている人の多くは趣味でやっています。スキルアップは意識していますが、とはいえ直接的に役立つかと言われると、たしかに役立つ部分もありますが、"考え方そのもの"といったベースが役立っている感じです。

スキルアップというよりも、むしろ"脳みそ自体を鍛える"感じです。そういう意味で、教育ではなく知能ゲームとして捉えてほしいと思っています。

高橋さんご自身が競技プログラミングの一線で活躍し続けているのは、やはり、楽しいからでしょうか?

楽しさがあって始めたものですし、AtCoderを立ち上げた理由も競技プログラミングの楽しさを広めたかったからです。

英語のネットゲームをやる人は多くありませんが、言語が日本語になるだけで参加する人が一気に増えます。AtCoderはネットゲームの日本語バージョンを提供する気持ちで作った会社です。楽しいなら、自分も当然やり続けますよね。

競技プログラミングへの注目が高まり、名だたる企業がスポンサーに名を連ねるようになりましたが、この理由をどのように分析されていますか?

様々な要因が噛み合った結果だと思っています。競技プログラミングはゲーム、eスポーツ、娯楽とさまざまな言い方をされますが、単純にスポーツとして見ると競技人口はそれほど多くありません。毎週1万人が参加しているのでマイナースポーツくらいの規模感はあるかもしれませんが、マイナースポーツの大会にこんなにスポンサーはつかないですよね。

10月に開催する『PG BATTLE 2021』にも多くのスポンサーがついていて注目度の高さを感じています。競技プログラミングによって身につく能力が、今、必要とされているIT人材の能力とマッチしている面があるからなのだと思っています。

「競技プログラミング」と『PG BATTLE』の共通点、相違点

10月23日に開催される「PG BATTLE 2021」と一般的な競技プログラミングとの違いは何でしょうか?

違いは大きく2点あります。これまで説明してきた競技プログラミングの例(AtCoder)では、回答を提出したらすぐ点数が表示されていました。もし間違っていたら、やり直すことができたわけです。ところがPG BATTLEでは、提出が一回の「一発勝負」の方式であり、さらに同点なら短時間のほうが勝ちになるというルールです。また、1週間後にYouTubeでオンラインの結果発表会を行いますので、参加者は結果発表まで、自分たちが何位だとか、何点かがわかりません。こういった緊張感があります。

そして、チーム戦のルールが違います。チーム戦と言いつつ、PG BATTLEではチーム内で相談ができません。囲碁将棋の団体戦や剣道で先鋒、次鋒、中堅......と順に戦うように団体戦でありながら個人が戦っていくのがPG BATTLEの特徴です。競技プログラミングで相談禁止のチーム戦というのは珍しいかもしれません。

出題者としてPG BATTLEに関わることになったのは、どのような経緯からですか?

株式会社システムインテグレータがプログラミングスキル判定サービス『TOPSIC』を始めるとき、作問をAtCoderに手伝ってほしいと話がありました。AtCoderは作問のプロフェッショナルですから、「ぜひ」ということで一緒にスタートしています。

そして、TOPSICを広めるための活動の一環として、プログラミングコンテストをやろうという企画が生まれ、PG BATTLEが始まりました。TOPSICの問題をAtCoderが作っているので、その流れでPG BATTLEの作問者であるだけでなく共催企業でもあります。

PG BATTLEの出題者として心がけていることはありますか?

回答は、ちゃんと気をつけて提出してほしいと思っていることもあって、トリッキーと言うか、見落としがあると失敗が起こりやすい、順位などで番狂わせが起こりやすい問題を作っています。

『PG BATTLE』に攻略法はあるのか?

もし、PG BATTLEに「勝利の方程式」があったら教えてください。

やはり実力差が出る勝負なのでTOPSICやAtCoderを使って事前にしっかり練習するのがかなり大切というのは間違いないです。3人の合計得点で勝負が決まるので、3人が実力を持ってないと点数が伸びません。そういう意味で、個人でやるものですが、3人でチーム練習するといいと思います。

練習してメンバー全員が能力を伸ばした上で本番を迎えたら、とにかく「落ち着く」のがポイントです。そして、解ける問題で自分が取れる最大の点数を時間内にちゃんと取り切ることが大事になってきます。

点数があって時間がポイントになってくるので、まず点数が取れていることが前提になるからです。最後まで見直しをして、自信が持てるところまでやって確実に点数を取っていくのが順位を上げることに繋がります。

とはいっても、1位争いをするのであればチキンレース的な要素もあるので、見切り発車をしなければならない場面もたしかにありますね。

PG BATTLEならではのポイントがあったりするのでしょうか?

AtCoderは、できるだけ技術力判定を正確にしたいという思想があるので番狂わせを起こしたくないと考えています。つまり、ふだんのコンテストは順当な結果が出てほしいのですが、逆にPG BATTLEのような大会は"お祭り"ですから、順当な結果が出なくていいと思っているところが正直あります。

出題者として心がけていることでもありますが、PG BATTLEでは多くのチームに優勝の可能性があった方がいいと思っていますし、その上で「今日強かった人を決める」という感じのお祭りのような大会だと認識しています。

そういう意味で、実力を気にせずにPG BATTLEに参加するのは当然「あり」です。多くの人々に参加してほしいと思っています。

番狂わせで運よく勝てるかもしれないなら、チームで気軽に参加しやすいですね。

実際、「これできちゃうんじゃない?」みたいなノリで、高難易度の問題をパッと解かれてしまったことがあります。やはり、参加することが一番大切で、参加して経験を積むと別の世界を知ることができます。

TOPSICやAtCoderをやっていない人でも、とりあえずPG BATTLEに出て競技プログラミングを体験してもらえたらといいなと思っています。

PG BATTLEが競技プログラミングの入り口になっているということでしょうか?

そうですね。PG BATTLEに出て、次の年にもっと良い順位を取りたいと思ってから、TOPSICやAtCoderをやればいいと思っています。そういう感覚で気楽にとりあえず出てみるのがおすすめです。

『PG BATTLE』と「競技プログラミング」の未来

PG BATTLEや競技プログラミングの世界で今後やりたいとお考えのことはありますか?

今、コロナ禍でいろいろ制限がかかっているので、これが明けたらオンラインではないイベントなどをやってみたいですね。PG BATTLEの前哨戦など、実際に交流するイベントが開催できたらうれしいです。

競技プログラミングの大会では表彰式などの後に懇親会が開かれますが、いつも切磋琢磨している仲間やオンラインでしか話さない人に会えるので盛り上がります。

それから、社会人にフォーカスしたイベントを開催したいと思っています。PG BATTLEで面白いのが、TOPSICから参加してきているので、ふだん競技プログラミングやってない社会人が多く参加してくれていることです。企業対抗のプログラミングバトルはかなり熱いと思っています。

AtCoderはこれからどんなことを目指されていますか?

競技プログラミングを盛り上げるのが、AtCoderの使命なので、もっともっとコンテストを盛り上げていきたいですね。インターネット上だけでも何か盛り上げられることはないかと、いろいろ考えています。競技プログラミングをさらに楽しいものにしていきたいですね。

また、競技プログラミングの世界を拡大して楽しいスポーツとして認識してもらいたいと考えています。5年以内くらいに、大きな競技プログラミングコンテストの優勝者がテレビで報道されるぐらいまでは目指ししたいです。競技プログラミング自体がテレビ中継されるようにしていきたいと思っています。

最後に、PG BATTLEに参加する方にメッセージをお願いします。

プログラミングできるのであれば、騙されたって思って、まず参加してみてほしいです。意外と楽しいと思います。競技なので緊張感もありますし、競うのが苦手という人もいますので、万人に合うものではないかもしれませんが、こんな世界があるのを知らないのはもったいないって思うんですよね。

「グローブとバットを持っているのに野球しないの?」という感じの話なので、ぜひ、気軽に参加してみてください。

――本日はいろいろお話をしてくださり、ありがとうございました。

image7.png

今回お伺いした会社

AtCoder株式会社
東京都新宿区新宿4-1-23新宿SKYビル7階
URL:https://atcoder.jp/

PR
[第4回]企業・学校対抗プログラミングバトル PG BATTLE 2021

pgb2020_0.png

PG BATTLEは、1チーム3名による企業・学校対抗プログラミングコンテストです。作品を提出して審査する方式ではなく、出題された問題を解くプログラムを90分間に4つ書いてオンライン提出するガチ勝負。

今年で4回目となるPG BATTLEは、毎年1,000名を超える社会人、学生が参加し、熱いバトルが繰り広げられています。今年も昨年同様、10月に開催予定です。

好評だった、スポンサー制度、賞金などは今年も継続!スポンサー名を冠したスポンサー賞(飛び賞)は、上位に入らなくても賞品をもらえるチャンスがあります。奮ってご参加ください。

執筆者:神田 富士晴

ライター

株式会社アスキー、株式会社光栄、株式会社ビレッジセンター等で書籍・ムック・雑誌の企画・編集、ソフトウエア制作を経験。その後、企業公式サイト運営やコンテンツ制作に10年ほど関わる。現在はライター・マンガ...