読者です 読者をやめる 読者になる 読者になる

hama_duのブログ

ノンジャンル記事置き場

プログラミングコンテスト(WUPC2012)開催にあたり、僕が考えたことのだいたい全て

内容はタイトルのとおり。プログラミングコンテストWUPC2012の開催記です。

コンテンツ

  • はじまり
  • メンバー募集・会場手配
  • 企画の詰め
  • 作問・難易度調整
  • コンテスト準備・当日
  • 謝辞

はじまり

 2011年6月。ICPC国内予選において、早稲田は1チームも地区予選に進出できなかった(2011年国内予選の順位表)。 僕自身は周り(研究室内)にプロコンに興味がある人が見つけられなかったのと、「一緒に出よう」といっていた人も休学をしてしまったので、チームが作れず、不参加だった。当時僕は修士1年だったが、国内予選の参加資格を勘違いしており、「まぁ来年僕が出て予選突破してやるか」などと気楽に考えていた。(実際は、早生まれの人でない限り修士2年生は参加できないのだ。)

 それがICPCに参加できる最後のチャンスだったことは就活中(11月ぐらい)に他の人と話して初めて知った。絶望。この時からコンテストを早稲田で開くことをなんとなく考え始めた。大学プロコンにおいては僕はもう現役の選手ではなく、後輩を育てていく立場にならなければならないのだと。

 また、他大学の学生有志主催のプロコン(RUPC2011, KUPC2011など)も開催を後押しした。早稲田でもぜひやろうと。入学して以来、早稲田でのプログラミングコンテストなんて金輪際聞いたことがない(僕のアンテナが低かっただけかもしれないが)ので、「僕がやらなきゃ誰がやるんだ」的な感じではあった。

 コンテスト開催の目的は、2012年のICPC国内予選で早稲田から予選突破チームを出すこと、そして、早稲田におけるプロコンのコミュニティを作ることだ。その趣旨から、例年6月に行われる国内予選までには開催したい。

メンバー募集・会場手配

 4月。ある程度作問作業が進んだので、開催の目処は全然立っていないのだがTwitterで運営のお手伝いの募集をかけた。すると3〜4人が集まってくれた。ありがたいことだ。あとは、開催にあたり教室と、協力してくださる先生が必要だった。

 早稲田の情報理工の先生の中で、「アルゴリズムとデータ構造」の授業を担当されている筧捷彦先生に相談をした。先生は担当授業でICPCの宣伝をよくされていたし、まず協力は得られるだろうと踏んでいた。(あとで知ったことだが、筧先生はコンテストを主催するACMの日本支部長で、高校生向けのプロコン、情報オリンピックの理事長だった)そして、快く協力してくださり、開催は6月2日(土)と決まった。先生は学内向けにコンテストの宣伝をしてくださることになった。

企画詰め

 正式に開催が決まったので、メンバーを集めて運営者会議をした。この時はコンテスト運営の具体的な内容(コンテストの時間、問題の難易度、コンテスト終わったらどうするのか、宣伝のことなど)が全く決まってなかったので、意見を募った。

 対象はコンテスト初心者〜中級者と決まり、「長すぎるとダレるよね」という話から、2時間5〜6問のコンテストになった。また、コンテスト後に懇談会をやることになった。「誰をターゲットにするのか」というのはコンテストにおいて大事な命題で、これが運営チームのお陰で早めに決まったことは幸運だった。

 また、学内に向けた宣伝は大きな課題の一つだった。筧先生は宣伝に協力してくださることになったが、宣伝するにも媒体がないとどうしようもないので、登録ができる公式ウェブサイトを作ろうという話になった。ウェブサイトを作っていくに連れ、決めなきゃいけないことがどんどん浮き彫りになってきた。(賞品はどうしようか、会場には外部生も入れるのか、登録のフローはどうしようか、など。)やがてウェブページは完成したが、絵がなにもないのは寂しいので運営スタッフの知り合いに描いてもらえることになった。ここら辺が個人的に苦しい時だったが、企画が前に進んでいるので充実感はあった。

 登録フォームを公開すると、応募がぽつぽつ来て、一週間で10人を超えた。一安心。そして、大学のウェブサイトにお知らせが乗ったあたりから登録数が加速した。宣伝の力ぱない。

作問・難易度調整

 難易度調整はコンテスト開催において一番苦労した。難産。問題数や難易度が決まったので、当時考えていた問題プールのうち6個をとって問題セットにした。そして、適当にストーリーをつけて仮公開。

 没だった問題で、D問題として幾何の問題を考えていた。内容は本番で出した最後の問題の三角形版(内部に点を含まないような三角形を求めよ)で、Nが小さくて全探索で解けるというもの。これはあまりにも安直すぎるし、ライブラリゲー(三角形に点を含む判定があったらそれを貼り付けるだけ)になってしまう気がしたので没になった。内部生向けにもコンテストの趣旨的によろしくない。またもうひとつ没にした問題があって、内容について詳しくは述べないがこれは自分で作っておいて自分で解けなかった

 結局、F問題(最後の問題)とC問題(自宅からの脱出)を追加して現在の形になった。C問題は「初心者にも解ける迷路問題があった方がいい」という意見から、F問題は複雑な幾何が要求されない四角形の問題を考えた。全体的にTopcoderのdiv2で出てくるような難易度になった。改めて見れば典型問題ばっかりだな、と完成してから感じたが、今思えばこの難易度設定が少なくとも内部生向けにはベストだった。D問題(三角パズル)はテストプレイ時に同じ問題を指摘してもらえたが、DPを説明するのに良い題材だと思ったのでそのまま出した。F問題は最初の思いつきでは N ≦ 5000 で座標圧縮が必要だったが、2時間6問のコンテストとしては実装量が多くなってしまうのでやめた。杞憂だったが。

 そして、AtCoder運営チームと連絡を取り、問題とテストケースを送ってコンテストページを公開してくれることになった。AtCoderで実際にACがもらえるかどうかをテストしたところ、B問題やF問題のテストケースにミスが見つかり冷や汗モノだった。コンテスト中、B問題では辞書順ソートしてから先頭2つをくっつけるという誤解法が多かったが、想定解を作るときに僕も同じミスを犯していた。

 また、コンテスト後に思ったことだがC問題の制約がきつすぎた。迷路の大きさは N, M ≦ 500 だったが、これはキューを使うなどしてうまい実装をしないとTLEしてしまう。プログラミングコンテストに慣れている人たちにとってはこれは当たり前で、楽勝なのかもしれないが、今回の参加者たちは必ずしもそうではないので、N, M ≦ 50 でもよかったなと。

コンテスト準備・当日

 当日は11時から準備を始めた。黒板に案内の文字を書いたり、教室の前に張り紙をしたり、インターネットへの接続テストをしたり、スタッフがほとんどすべてやってくれて、この時点で僕の作業は殆ど無かった。強いて言えば、コンテスト開始前のスライドができてなかったので急いで作った。でもやったことといえばそれだけだ。

 また、開催日の少し前に入賞者に賞品だけでなく賞状を配ろうという意見が出た。これはスタッフが準備してくれた。また、コンテストの様子をリアルタイムに更新してはどうか、という提案があった。更新作業は提案した人におまかせすることにした。僕はコンテスト中何をしていたか、というと、順位表を眺めつつ質問に対応していた。内部生用と外部生用の両方を見なきゃいけなかったので割りと忙しかった。

 そしてコンテストが終わり、休憩後解説タイム。解説はSlideshareにアップしたものを使った。A〜Fまで淡々と説明。1時間しゃべるのは結構辛い。先生の大変さを理解した。

 懇談会は大いに盛り上がった。ひたすらHaskellの話をしていた人、ICPCに出ると言ってくれた人、情報基礎教育のTAがひどいという話。また、早稲田でかつてICPCに出たことのある先輩方も急遽参加。うんにゃ、コンテストやってよかった。

謝辞

  • コンテスト運営を手伝って下さったスタッフの皆様
  • 会場提供や宣伝にご尽力いただいた筧先生
  • @chokudaiさんをはじめとするAtCoder運営チームの皆様
  • 事前に問題をテストプレイして下さった@drken1215さんと@tomerunさん
  • コンテストに参加して下さった皆様

ありがとうございました。特に、運営スタッフの方々には助けられました。

プログラミングコンテストはいいものです。またやりたいね。

次回

年内に第2回を開催するべく現在作問中です。前回ほど大々的にはやらないかもしれないけど。