プログラム

  • 高度IT人材育成のための実践的ソフトウェア開発専修プログラム
  • ビジネスアプリケーション分野
  • 社会人のための 博士後期課程 早期修了 プログラム
  • ICT教育プログラム

2015年国際大学対抗プログラミングコンテスト(ACM-ICPC)
アジア地区予選つくば大会 ~筑波大学チームの記録【後編】~

2015年国際大学対抗プログラミングコンテスト(ACM-ICPC)アジア地区予選つくば大会が、2015年11月28日(土)~30日(月)につくば市で開催されました。本稿では、筑波大学からこの大会に出場した3チームの活躍ぶりを紹介します。

記事(前編)はこちら

コンテスト(11月29日)開始前(9:00頃)開始(9:20)途中(12:20頃)終了間際(14:00頃)
結果発表(11月29日)
おわりに

コンテスト(11月29日)

コンテストは、大会2日目の、11月29日9時20分から、つくばカピオサイバーダインアリーナで行われました。

開始前(9:00頃)

コンテスト開始前
コンテスト開始前
コンテスト会場には、スマートフォンなどの電子機器や、USBメモリなどの記憶媒体、飲食物の持ち込みは禁止ですので、持ち物検査が厳重に行われていました。但し、紙媒体の辞書や参考書、筆記用具、ぬいぐるみ(チームのマスコットキャラクタなど)の持ち込みは許されています。

コンテスト会場に入ったら、コーチや他のチームとの会話は禁止されます。会場に入る前に、筑波大学チームに話を聞いたところ、調子はまあまあとの声があった一方、寝不足気味で、あまり調子が良くないとの声もありました。

開始(9:20)

9時20分にコンテストが始まりました。全員で問題文を読んでいるチームや、2人が問題文を読み、1人はプログラムを作成する準備をしているチームもありました。

コンテスト開始

開始時の様子

コンテスト開始

マスコットキャラクターが乗っているテーブルが見られる

これから、コンテストが終了するまでの5時間は、会場から出ることはできません。会場のリフレッシュコーナーには、昼食用と思われるパンやおにぎりも置いてありました。
コンテスト開始
選手以外は会場には入れませんので、記者は2階の観覧席へ。ここには、大型のディスプレイが設置されており、そこに、各チームの進捗状況と順位が表示されています。この順位表は、インターネットでも公開されています。

また、提出したプログラムが正解だと、各チームのテーブル脇に立てられているポールに、問題番号に応じた色の風船が追加されるので、観客席からも、各チームの進捗状況が分かります。1番最初に解けたチームの風船は形が違っていると、後で、コーチのアランニャ先生に教えてもらいました。なお、大型ディスプレイの近くにもリフレッシュコーナーがあり、コーチやスタッフ用の飲み物やパン、お菓子が用意されていました。

コンテスト開始

上海交通大学チーム(写真右奥)と東京大学チーム(写真右手前)のポールに、風船が追加されている

などと会場を観察している間に、上海交通大学と東京大学のチームが、開始5分で最初の問題を解き、正解したことが、順位表に表示されました。順位は、正解した問題数の多さで決まり、同じ問題数の場合は、正解するまでの時間が短い方が上位になります。解答は何度でも提出できますが、不正解の度に、20分間のペナルティが追加されるので、慎重に解答することが求められます。

問題が公開されたので、記者も挑戦してみました。問題はAからKまでの11問あり、A4の用紙で31ページに渡るものでした。各問題には、説明と、プログラムに与えられる入力、それに対して得られる出力、そして、入力例と出力例が記載されています。また、問題の冒頭には、プログラムに入力を与えてから、出力が得られるまでの制限時間が記載されています。

最初の問題Aは、A4用紙2ページに記載されており、与えられた数字の列から、この列には含まれない最小の正整数を求める問題でした。数字は最大999文字で、出力が得られるまでの制限時間は1秒間です。

値が含まれているかどうかを調べる数の上限を正しく定められれば、記者でも何とかプログラムを作れそうだ、と思いましたが、問題を理解して、プログラムを作り、それから動作を確認するとなると、30分以上はかかりそうです。

ちなみに、当日はインターネットからもコンテストに体験参加できたそうで、この正解者数の見ると、問題の難易度が推測できます。

コンテスト開始

※クリックすると大きな画像が表示

コンテスト開始

※クリックすると大きな画像が表示

などと考えている間に、開始から12分が経過しました。順位表を見ると、上海交通大学が問題AとBに正解して、単独1位でした。それ以外に、問題Aに正解したチームは11チーム、問題Bに正解したチームが1チームあり、チーム「logicmachine」も問題Aに正解したようです。チーム「UNYOLER」は、問題Aのプログラムを提出したものの、不正解だったようです。
コンテスト開始
コンテスト開始

途中(12:20頃)

開始3時間後の12時20分頃に、観覧席を訪れました。コンテスト終了まで残り2時間です。

コンテスト途中

※クリックすると大きな画像が表示

コンテスト途中

※クリックすると大きな画像が表示

トップは上海交通大学で9問正解、これに東京大学の2チームが、7問正解で続いています。筑波大学チームの状況ですが、チーム「-D_GLIBCXX_DEBUG」とチーム「logicmachine」が4問解いて、それぞれ、16位と18位、チーム「UNYOLER」は、2問解いて24位でした。

観客席で見守っていた、コーチのアランニャ先生に伺ったところ、「今回は厳しい」とおっしゃっていました。また、問題の順位表は、終了30分前に更新されなくなり、風船も追加されなくなるので、表彰式のときまで、最終的な順位は分からないとも教えていただきました。

コンテスト途中

13時40分頃の会場の様子、各チームの風船が増えている

終了間際(14:00頃)

14時頃に会場に来ました。コンテスト終了まで、残り30分ほどです。このときは、まず、コンテスト会場隣にあるホールで行われている実況中継を見学しました。この様子はインターネットで配信されていたようです。

コンテスト終了間際

10時頃のホールの様子、左側のスクリーンには順位表が表示

実況中継では、問題の解説や順位表の紹介などが行われるようでしたが、記者が行ったときは、スペシャルゲストとして、日本大学の谷先生が招かれていて、2018年につくばで開催される予定の、情報オリンピック世界大会について、お話しされているところでした。情報オリンピックは高校生のプログラミングの大会ですが、ICPCと違って個人戦であり、少数の本格的なプログラム(3問が標準)を5時間で作成し、これを2日間実施して、合計ポイントを競うという説明が印象的でした。

谷先生のお話しが終わった後にアナウンスがあり、システムの都合で開始が遅れたチームがあり、該当のチームだけ、コンテストの終了が、最大12分遅れるとのことでした。コンテスト終了まで残り十数分になったので、コンテスト会場へ戻りました。

コンテスト終了間際

※クリックすると大きな画像が表示

コンテスト終了間際

※クリックすると大きな画像が表示

コンテスト終了間際

※クリックすると大きな画像が表示

順位表は、既に更新が停止されていました。更新停止直前のトップは相変わらず上海交通大学で、10問正解でした。筑波大学チームは、チーム「logicmachine」が6問正解で12位、チーム「-D_GLIBCXX_DEBUG」が5問正解で16位、チーム「UNYOLER」は、伸び悩んでおり、2問正解で29位でした。

コンテスト終了10分ほど前に、荷物を片付けているチームがありました。どうやら、全ての問題に正解したようです。
コンテスト終了間際

荷物を片付け終えた上海交通大学チーム
ポールについている星型風船の多さが、彼らの解く速さを物語っている

14時20分に、コンテスト終了が宣言されました。しかし、システムの都合で、コンテストを継続するチームがあるので、静かに待つようにとの指示がありました。
コンテスト終了間際
14時32分頃に、全てのチームのコンテストが終了しました。荷物を持って、会場を出て、隣のホールに移動するようにとの指示がありました。会場から出てきた筑波大学チームに感想を尋ねたところ、「logicmachine」からは、手も足も出なかった、あまり調子が出なかった、との声がありました。また、「-D_GLIBCXX_DEBUG」からは、デバッグが難しかった、「UNYOLER」からは、問題が難しかった、との声がありました。
コンテスト終了間際

リフレッシュコーナーがロビーに移動していた
パンやおにぎりを食べている選手が見られる

結果発表(11月29日)

実況中継をしていたホールに、選手が集まって来ました。

結果発表
まず、「問題解説」があり、その後、「Javaチャレンジ」の結果発表がありました。「Javaチャレンジ」では、一度に4チームのプログラムが対戦します。予選で勝ち残った16チームが準決勝に、これに勝ち残った4チームが決勝に進出します。
結果発表

予選のハイライトシーン
4匹のキャラクター(犬?)が移動、方向転換、攻撃(床に穴を開ける)を繰り返し、相手を穴に落とす
最後まで残ったチームが勝ち

結果発表

別の予選にて
チーム「-D_GLIBCXX_DEBUG」の勝利

Javaチャレンジのプログラム名が、コンテストのチーム名と、必ずしも一致している訳ではなさそうですが、決勝に残ったプログラムに「-D_GLIBCXX_DEBUG」の名前がありました。そう言えば、コンテスト前に尋ねたときに、チーム「-D_GLIBCXX_DEBUG」から「ランダムシード次第」という声がありましたので、良い乱数を引いたのかもしれません。
結果発表
決勝の様子が、スクリーンで紹介されました。しかし、「-D_GLIBCXX_DEBUG」は最初に穴に落とされてしまい、残念ながら、4位に終わりました。
結果発表
続いて、コンテスト順位の発表です。まず、更新停止前の順位がスクリーンに映し出されます。各チームの順位には、正解した問題番号の他、終了までに提出された問題番号が点滅して表示されており、これが正解したかどうかは、この時点では分かりません。
結果発表

※クリックすると大きな画像が表示

最下位のチームから、提出された問題が正解したかどうかを確認していきます。問題が正解していると、順位が大きく上がるので、会場からどよめきが上がります。
結果発表

横浜国立大学チームは正解数が1問増えて25位から順位上昇中
※クリックすると大きな画像が表示

しかし、筑波大学の3チームは、正解した問題数を増やすことができず、チーム「UNYOLER」が31位で確定、そして、チーム「-D_GLIBCXX_DEBUG」は17位、チーム「logicmachine」は13位で確定しました。順位の詳細については、コンテスト順位表を参照して下さい。
結果発表

※クリックすると大きな画像が表示

結果発表

※クリックすると大きな画像が表示

おわりに

まずは、筑波大学チームを始め、全てのチームの皆さんの健闘を讃えたいと思います。世界大会の出場校は、他国で行われるアジア地区予選の結果も含めて決まりますので、筑波大学チームの出場がどうなるかは、執筆時時点では分かっていません。ただ、海外の大学を含む強豪校を相手に、筑波大学チームは善戦したと思います。今年度で卒業し、今大会が最後の方もいますが、アジア地区予選に出られなかった皆さんも含め、次回の大会目指して、今後も頑張って欲しいと思います。

記者は、これまで、プログラミングコンテストを間近で見る機会はなかったのですが、各チームの皆さんが、協力し、また、苦悩しながらプログラムを作成している姿を見て、とても感銘を受けながら、この2日間を過ごしました。

最後に、アジア地区予選つくば大会の準備や設営、運営に関わりました、筑波大学を始め、数多くのスタッフの皆様に、このような素晴らしい大会を、ここつくば市で開催して下さったことに感謝して、本稿を終わります。


記事(前編)はこちら