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

Lilliput Steps

小さな一歩から着実に. 数学やプログラミングのことを書きます.

コンテスト開催記

こんにちは, kagamiz(@kagamiz) です!
この記事は, Competitive Programming Advent Calendar Div2013 22日目の記事として書かれました.

今回は, 今年ぼくが携わったコンテストについて, その裏話を交えながら紹介したいと思います.

コンテストの開き方について

それぞれのコンテストについて紹介する前に, ぼくが考えるコンテストの開き方について少し書きます.

コンテストを開くには大きく次の2 つの方法があると思ってます.それぞれについて思うことを書いてみます.

コンテストシステムを1 から作って開催する

自分で1 から作るので, いつ頃開催の目処が立つか分かりやすいです.
ただ, システムを作るときにシステムそのもののテスターさんがいないと苦しい思いをすることになります(なりました)*1.

今年は, 部活で行ったコンテストと, JMC (JOI Mogi Contest) のコンテストシステムを1 から作りました.

どこかのコンテストシステムを使って開催する

TopCoder やCodeforces, AtCoder などの既存のシステムを利用させてもらう方法です.
1 から作るよりはだいぶ楽に開催することが出来ると思いますが, 自分で作ってないコンテストシステムの分少し仕様に戸惑いやすいです.
ただ, 問題関連以外のトラブルで焦ることはまず無いので, 問題に専念できると思います.

今年は, Codeforces #219 のwriter をDEGwerくん(でぐ)と行いました. 問題についてのトラブルばかりでした...()

今年開いたコンテストについて

今年は, 部活でのコンテスト8 回 + でぐとのコンテスト2 回で, 合計10 回コンテストを開催しています. 楽に行ったコンテストは初回の2 つくらいです(と言ってもこの2 つはほとんどオフラインコンテスト).

部活でのコンテスト

2 年生のプログラミング復習コンテスト

今年の1 月くらいに行ったコンテストですが, これは学校で行うプログラミングの授業の習熟度を確かめるのが目的で行ったものです.
strlen 関数を実装したり, 基礎的な再帰呼び出しが出来るかを確かめたりする内容でした.
最後に趣味で$n \leqq 20$ の部分和問題をいれたりしてました.

1 年生到達度確認テスト

4月 ~ 7月にかけて, 1 年生が授業で行うプログラミングをどれだけ理解しているか確かめるテストを3 回行いました.
このときはKagamiz Online Judge を使いました. これらの作問には携わりませんでしたが, Internal Server Error が起きないかずっとヒヤヒヤしてコンテストを見守っていました.

ICT Summer Contest 2013

2014 があるのか怪しい部内夏コンテストを3 回行いました. 問題はここから見れます. 3 回とも10 問ずつ出題し, すべての問題の問題文・テストケース・解答を作っていました. あと, KOJ ではコンテストに余り向いてない側面が多いなあと思ったので, Kagamiz Contest System を作りました.
ジャッジが止まったり, 提出ができなくなったり, ジャッジがすごく遅くなったりといろいろとありましたが楽しく開催出来たと思ってます.
奇跡的にもテストケースはすべて問題がなかったので安心しました. (ただ, ほんとにあってるの?みたいな質問が来る度に泣きそうになりました><)

ICT Review Contest

KCS でやった復習コンテストで, こちらは11 題出題しました. プログラミングの習熟度を見るコンテストだったので作題にはそんなに苦労しませんでした.

あ, ICT Review Contest とICT Summer Contest にはいろんなコンテストの過去問を使ったりしました. その節にお世話になった問題を書いた皆さんにはこの場を借りてお礼を申し上げます.

でぐと開催したコンテスト

JOI Mogi Contest

ここでコンテストを開いていました.
去年のシステムをまるまる使おうと思っていたのですが, 去年サーバサイドを書いていた先輩が主要箇所のソースコードを無くしていて苦労しました. また, UI の変更だったりも行いました.
実はほとんどの作業をでぐに投げようと思っていたのですが, 5, 6 問目のテストケース以外の仕事は全部ぼくがやっていました. 死にかけていて問題文がひどくなったり, サンプルが最初間違っていたのは申し訳ありません...

Codeforces Round#219

今年の3 月の終わりくらいに, でぐと一緒にCf でコンテストを開こう! ということで地道に作問を続けていました.
6 月に最初にGerald さんに依頼をしてから, 結局実現したのは12 月の終わりの方になっていました().
時差の関係だったり, 僕達のスケジュールを頑張って合わせて, 半年近くもずれた開催になってしまいました...
実際のコンテストでは, ぼくが書いたGenerator がシステムの穴を付いてしまったらしく泣く泣くRejudge をすることとなりました. それ以外はうまく行った気がするので良かったです.

ちなみに, Div2C / Div1A のKangaroos の問題は, 開催前日の22 時くらいに思いついた問題です. それまでのDiv1A はぼくが考えた問題だったのですが, ちょっとジャンルが偏り過ぎたので急遽変えることになりました. あとJava で色々書くのがめっちゃしんどかった.

ちなみ2, JMC とCf #219 は2 日連続で行いました. この週は睡眠時間をだいぶ削る羽目になりました...w 今となってはいい思い出です.

最後に

コンテストを開くのって, ものすごく気力が入りますが, みんなに楽しんで貰えればその苦労も吹っ飛ぶものだなあと思いました.
もちろん, 参加してくれた方があってこそコンテストが成り立つので, 今後何かしらの形でコンテストを開くことになった時は, コンテスタントがストレス無く問題を解くのに取り組める環境づくりを徹底したいなあと思いました.

今年はだいぶ開催する側として頑張ったので, 来年はもっとコンテスタントとしても頑張りたいです.
最後まで読んでいただきありがとうございました~.

ついでに

KOJ とKCS, JMC のサイトは本来サーバのレンタル期限が切れて死んでいるはずなのですが, なぜかまだ生きています.
KOJ とKCS は, 攻撃さえされなければ是非使って欲しいので, ログインするための情報が欲しい方はkagamiz にTwitterで連絡するかm.kagamiz at gmail.com までご連絡下さい!

*1:ジャッジシステムが止まったり, 提出がうまくできなくなったり