メインページに戻る
Japan Blog

ACM 国際大学対抗プログラミングコンテストに参加してみませんか?



Google のエンジニアは技術的なチャレンジが好きで、各種プログラミングコンテストの参加経験者も多くいます。今回はそのひとつ、 ACM 国際大学対抗プログラミングコンテスト ( ACM-ICPC ) について紹介してみたいと思います。

ACM-ICPC は世界中の大学生を対象としたコンテストで、世界最大規模のコンピュータ関連の学会である Association for Computing Machinery ( ACM ) が主催し、既に 30 年以上の歴史をもっています。選手は 3 人 1 チームで参加し、チーム毎に 1 つの端末が与えられて、8 問から 10 問の問題を 5 時間程度で解きます。今年のコンテストのサイト ( 最後に紹介します ) に、過去に出題された問題が掲載されています。

選手は問題を解くプログラムをつくって、専用の解答システムでプログラムのソースファイルを審判に送ります。審判は送られてきたプログラムをコンパイルし、用意した入力データを使ってプログラムを動かします。プログラムが正しく動き、想定された結果が出れば正答になり、プログラムが動かなかったり、出力が間違っていたりしたら誤答になります。選手は正答が出るまで同じ問題に繰り返しチャレンジすることが出来ます。チームの成績は、解いた問題の数と、解くのにかかった時間によって決まります。

会議室でパソコンを使っている方や、他人と話している方の様子を示す画像。

写真は昨年のアジア予選日本サイト、横浜大会の様子。問題が解けたチームには風船が配られます。 )


プログラミング能力は個人技能だと思われるかもしれませんが、このコンテストではチームワークがかなり勝敗を左右します。コンテスト中、プログラムの小さな間違いや、ちょっとした問題の誤解が原因で、何時間も同じ問題にかかずらうことが良くあります。優秀なチームは、仲間の指摘などでこの壁を打開していきます。私が参加した頃は、コンテストと同じ形式の練習会を自主的に隔週で開いて、チームワークを日々磨いていました。

日本からの参加の場合、まずインターネット上で行われる国内予選に参加します。予選では本大会と異なり、プログラム実行も選手側で行います。入力データを審判サーバからとってきて、作成したプログラムを手元の端末で実行し、実行結果とソースファイルを Web ブラウザからサーバに送ります。Web 上で現在の順位も見ることができ、問題が解けたときなどは順位が一気にあがるのが確認できて爽快です。逆になかなか問題が解けないと、他のチームがどんどん問題を解くのを横目で見ながら作業することになり、心臓に悪いかもしれません。私のチームは順位が見えると動揺しすぎるので、わざと順位は見ないようにしていました。

国内予選を通過すると、日本ほかアジア各地で開催されるアジア予選に招待されます。ここには日本や他国の予選を突破した学生が集まっていて、同世代の優れた人達と数日間交流できるよい機会となります。私の場合、ここで知り合った友人が何人もいます。さらにアジア予選で好成績だと世界大会に出場できます。世界大会は 1 週間近くに渡って開かれ、コンテストの他に催し物があったり、他の国の選手と交流できたりします。世界大会の選手は本当にすごい人達が多く、アジア予選よりさらに刺激になります。前回の世界大会はこの春、東京で行われ、日本からは 3 チームが出場しました。

参加するには同じ大学の学生三人でチームをつくって、さらに大学院生か教職員のコーチを見つける必要があります。学生のみなさんで興味をもたれた方は、気軽に参加してみてはいかがでしょうか。今年の日本サイトのアジア予選は東京で行われます。

さらに、このコンテストに過去に参加した OB / OG の皆さんによる模擬練習会が、予選の前に行われる予定です。

本題とは離れますが、Google では毎年 Google Code Jam というプログラミングコンテストを主催しています。こちらは開催がもうすこし先になりますので、またの機会に紹介したいと思います。