チームの人数が何人でも、どんな計算環境を使ってもいいが、超難問を72時間ぶっ続けで解かなければならない――そんな破天荒な条件で、プログラミングの腕を競う国際大会がある。関数プログラミングで最も権威がある国際学会「ICFP」が主催する「ICFP-PC」というコンテストだ。
例えば、昨年の大会では「折り紙」の超難問が出題された。折り紙のシルエットを見て、そのシルエットを再現する折り方を答えるというものだ。全ての折り方を試そうとしていては、とても72時間では解き終わらない。
そんな過酷な大会を制したのは、日本人のチーム「Unagi」。驚くべきことに、彼らは2013年、15年、そして16年と3度も優勝している“常連チーム”だ。「Unagi」の代表を務める秋葉拓哉さんに、ICFP-PCのこと、優勝の秘訣、大会の魅力などを紹介してもらった。
こんにちは。Unagiの秋葉拓哉です。昨年、国際プログラミングコンテスト「ICFP Programming Contest」(ICFP-PC)で、Unagiが3度目の優勝を達成しました。ICFP-PCはどんなコンテストなのか、Unagiはどのようなチームで、なぜ強いのか――昨年のコンテストの問題とともにご紹介します。
ICFP-PCは、年に1度開催される「なんでもあり」が特徴のプログラミングコンテストです。20年近い歴史を持ち、大きめのタスク1問にチームで72時間取り組んで成績を競います。プログラミングを通じて問題を解くコンテストは、ACM-ICPC、TopCoder、AtCoderなど国内外で多数開催されていますが、ICFP-PCは次のような特徴があります。
・プログラミング言語の制限なし
利用するプログラミング言語に制限がなく、幅広いプログラミング言語を使って参加できます。
・計算環境の制限なし
問題を有利に解くために、米Amazon.comの「Amazon Web Services」(AWS)のようなクラウド計算機環境を利用して処理を分散させる場合もあります。
・チーム人数制限なし
問題を解くためには幅広い知識が必要です。ただ、時間が短く密な連携が重要となってくるため、チームの人数を闇雲に増やせばいいというものでもなく、チーム構成でも工夫が求められます。
・72時間ぶっ続け勝負
コンテストはノンストップで進みます。「どのタイミングで誰が睡眠をとるか」という計画も必要です。
コンテストの題材や問題の形式が毎年大きく変わることも特徴です。それに伴って要求される能力も大きく変わります。
特に、問題には言語処理系に関するタスクが絡むことが多いです。例えば、未知の言語の仕様のみが与えられ、その言語を使ったプログラムの提出が求められる――という形式の年も少なくありません。その場合は、まずその言語のインタープリタを書かなければスタート地点に立つことすらできません。
その言語が、直接プログラミングすることが困難な「esolang」(難解プログラミング言語)の場合もあります。この場合は、他の言語からのコンパイラ(トランスレータ)を書くことになります。他にも、フォーマットが明記されておらず、暗号解読のようなことをして初めてデータが読めるようになったり、コードの長さに制限がありショートコーディングをする(コードを短く書く)必要があったりします。
私たち「Unagi」は、秋葉拓哉、今城健太郎、岩田陽一、岩見宏明、片岡俊基、高橋直大の6人が組んでいるチームです。このメンバーでの出場は昨年で4回目。2013年に初優勝、14年は惜しくも準優勝、そして15年、16年に再び優勝しました。
Copyright © ITmedia, Inc. All Rights Reserved.
Special
PR