はじめに
数理・計算科学系の学部 3 年の noya2 です。
数理・計算科学系の学部 3 年の Sotatsu です。
数理・計算科学系の修士 1 年の tatyam です。
12 月 14-15 日に東京工業大学プログラミングコンテスト2024 (TTPC2024) を開催しました。ジャッジシステムは AtCoder, Universal Cup をお借りしました。また、オンサイトも開催しました。
この開催記は、オンサイトを伴うコンテスト開催の手引書のようなものになっています。来年以降の TTPC (略称未定)の開催の参考になれば嬉しいです。コンテスト開催やオンサイト運営などを考えている他の団体の方も、いくらか参考になることがあれば嬉しいです。
2023 年 12 月 作問会
実は TTPC2024 は 1 年前に部分的に動き出していました。
10月に TTPC2023 が終わり、noya2 は TTPC 作問陣の強い人を活かす作問スタイルを模索しているところでした。
注目したのは、作問過程で問題を解くことと、コンテストで(あるいは、解けるように用意された)問題を解くことのギャップです。このギャップを埋めるために、まだ解けていない問題をコンテストの問題として出題する ことを思い付きます。しかし、これでは出題者として不誠実な気がします。(身内ならまだ許されそうではありますが、果たして...?)そこで、解けている問題も混ぜて出題し、いくらかは解けるので解いてくださいという形式でコンテストを開く ことにしました。
滝プラザで開催しました。shobonvip, potato167, tatyam の 3 人に参加してもらいました。4 x 2 問(うち 2 問だけ解けていた)出題したのですが、解法を用意していなかった問題が 2 つ解かれました。すごいです。
詳細は別の記事で触れますが、このイベント自体には手応えがありました。チーム作問の良さを活かすことができそうな予感がしたので、次回の開催も視野に入れていました。それが次に説明する 解法証明コンテスト です。
5 月 解法証明コンテスト
問題のより本質的な部分に焦点を当ててもらうべく(これは建前で、証明が難しい問題が偶然たくさんできた)、解法を出すだけではなく正当性の証明まで求めるようなコンテストを開きました。原案がたまった 4 月頃に shobonvip さんをお誘いし、問題準備を進めました。
会場は再び滝プラザでした。noshi91, simasima, potato167, tatyam の東工大赤コーダー 4 人に参加してもらいました。6 問(うち 5 問が解けていた)出題したのですが、解けていなかった 1 問も解かれました。本当にすごいです。
セット確定時には 3 問しか解けていなかったのですが、出題前に準備陣が頑張ったため 5 問が解けている状態で出題することになりました。解けていなかった 1 問は、12 月の作問会でも出した、 tatyam さんに「この予想が正しいなら綺麗すぎる」と評された問題です。noshi91 さんに正しいことを証明してもらいました。
コンテスト後は問題を強化したり詳細を議論したり時間を設けました。TTPC への出荷を念頭に置いていたので、難しい証明部分を問えるような形式へのバージョンアップを話し合い、Div. 1 - D A xor B plus C の原案が生えました。
1 問は難しい問題への昇華が難しそうだったので yukicoder に出荷しました( Cut and Eat )。他にもいくつか用意していた予備問題を yukicoder に放流しました。
残りの 5 問はすべて TTPC2024 の原案に提出されました。イベント開催日に TTPC2024 のレポジトリが建ちました。かなり早い始動です。
7 月 TTPC2024 発足
スタッフメンバーとして AtCoder のレーティングが黄色以上の学生を集めると相当な人数になるため、スタッフ募集の際の制限をどれだけかけるかの議論が必要でした。結局人数は多ければ多いほど良いということで、黄色以上と認識している学生には声をかけました。結局 19 人集まりました。
TTPC2024 の discord サーバーを立てました。TTPC の writer が初めての人も多かったので、vcで問題提案の仕方などを共有しました。
この時点で、解法証明コンテストで出題された問題が数問提案されました。大学の授業期間ではありますが、問題の提案が活発に行われていました。
提案される問題が多くなることが予想されたので、採用が濃厚な問題については早めに作業してもらうことを念頭に、問題選定を 2 回に分けて行うことに決めていました。そこで、この時期から問題提案をするよう宣伝し、スプレッドシートを活用しながら質の高い問題を作っていきました。
このときは ICPC World Finals 級の難しいセットにすることを目標にしていました。12 問程度で、ボス問級を 3 問程度用意することを目指します。ライブラリをあまり要求しない、考察重め・実装そこそこの良問をたくさん用意しようと張り切っていました。
8 月上旬 問題選定 1
大学が夏休みに入り、スタッフメンバーも動きやすくなったところで、 1 回目の問題選定を行いました。 10 問程度仮採用し、問題準備担当者を割り当てて、作業に入ってもらいました。
次の問題選定までに作業を終えてもらう予定でしたが、開催時期が遅れることが分かったためか、全体的に準備はほとんど進んでいませんでした。
夏休みに入ってからも、問題提案は多数行われていました。質の高い難しい問題が多くなりそうだったので、 Div. 1, Div. 2 の同時開催を視野に入れます。もともと難しいセットを目指していましたが、オンサイトに来てくれる主な層(ガチ勢とまではいかなくても、競プロに熱心に取り組んでいる人たち)にも楽しんで欲しいという思いもあったので、難易度帯を 2 つに分けることは悪くないアイデアでした。しかし、作業量はいつもより多くなってしまうことが明らかです。スタッフの人数も多いですが、それでも 2 セット組むのは少しリスキーな気もします。そこで、いくつかの問題を共通させることを考えます。
9 月下旬 問題選定 2
1 回目の問題選定では結果的に Div. 1 の問題を主に選定する形になりました。ここからさらに Div. 2 のセットを組み、追加で提案された質の高い難しい問題を Div. 1 に採用することになります。
13 問 x 2 セットで、何問か共通させることで、スタッフの人数と同じくらいの問題数になるように調整する算段でした。
Div. 1 のセットは途方もなく難しくなっていそうだったので、 Div. 2 のセットを手厚くするため、 15 問採用することになりました。最終的に Div. 1 が 13 問、 Div. 2 が 15 問、共通問題が 7 問あり、あわせて 21 問の問題が最終的に採用されました。
問題準備担当者と副担当者を割り当て、作業に入ってもらいます。この時点で例年の開催より遅れることは確定的でしたが、Universal Cup との同時開催も視野に入れていたため、そちらの都合も考慮することになります。
他にも ICPC2024 Yokohama Regional の日程などを考慮し、 12 月 14-15 日での開催を決定しました。
開催日が決まったため、会場やジャッジシステムを借りるための連絡を進めていきます。
9 月下旬 AtCoder, Universal Cup への TTPC2024 開催連絡
AtCoder への連絡事項は以下の通りです。(後で連絡まとめでも触れます)
- 開催予定日時が 12 月 15 日の 13:00 ~ 18:00 であること
- Div. 1, Div. 2 の同時開催をすること
- Universal Cup において Div. 1 のコンテストを同じタイミングで開催すること
- オンサイトを東京科学大学大岡山キャンパスで行うこと
- スタッフメンバー全員の AtCoder ID (今年は 19 人いましたが、漏れなく全員)
最初はお問い合わせフォームから、以降はメールへの返信を繋いでやり取りを行いました。
AtCoder 上に掲載する問題が別の場所にも掲載されることは、 AtCoder にとっては変な話かもしれません(せっかくジャッジを貸して問題を掲載してあげているのに、他のジャッジにも掲載するなんて、ナメてんのかと(勝手な想像です))。少なくとも Universal Cup のことを通知しないわけにはいかないと判断しました。
それから、オンサイトを開催する場合は通知が必要です(あえて言い切ります)。オンサイト会場を企業に借りる場合が問題で、オンサイト会場での企業の宣伝には強い制限がかかります。AtCoder の指示を仰ぎ、ルールを企業側と入念に確認しておく必要があります。もともと学生団体の特権で AtCoder ジャッジシステムを無料でお借りできているのであって、企業の場合はそうはいきません。AtCoder との良好な関係を築くためにも、そういった点に十分に気を配るようにしましょう。
今回は大学の講義室を会場にするため、そのような難しい話は出てきません。その場合でも、企業が絡んでいないことをしっかりと伝えておきます。オンサイトを開催しない場合でも、 AtCoder 側から確認されるより先に、オンサイトを開催しない旨を伝えておくと良いでしょう。
その後も必要な連絡をいくつか行いました。
Universal Cup への連絡事項は以下の通りです。(後で連絡まとめでも触れます)
- 希望開催日時
- 同時にオンサイトイベントを行うこと
- 日曜日の 13 – 18 に Time Window を追加して欲しいこと
Universal Cup での開催は 3 回目なので、連絡事項は少なめです。
9 月下旬 traP庶務に会場予約やイベントネット申請の依頼
traP 庶務との連絡(閲覧には traP の権限が必要です)
イベントネット概要
10 月下旬 優先予約のための企画書提出
企画書提出に関する traP との連絡(閲覧には traP の権限が必要です)
11 月上旬 test-runner の依頼
UC チーム MXXVIII の kaichou243 さんと私用で会った際に、チームメンバー全員の参加の都合がつかないことを教えてもらいました。せっかくなので事前にセットを走ってみるのはどうか、ということで test-run をお願いする運びになりました。
test-run は AtCoder 上で走るようお願いしました。この際、 test-runner には問題を閲覧し、提出する権限が必要です。 AtCoder に事前に test-runner の AtCoder ID を伝え、権限を付与してもらいました。
11 月上旬 TTPC2024 告知
Connpass のページを作り、X の TTPCアカウントでポスト。(#TTPC2024 をちゃんとつける)
Connpass で名札の表示名やアイコンのためのアンケートをとりました。
11 月下旬 名札デザインの依頼
昨年名札デザインを作ってくださった@kamij_iさんに今年もデザインの依頼をしました。(2~3週間前というギリギリになって依頼しているのは結構まずいです。)
12 月 1 日 Div.1 test-run
この前日までに Div.1 のセットの準備はいったんすべて済ませた状態になっていました。
あらかじめ discord サーバーに test-runner のロールを用意して、専用の考察チャンネルとボイスチャンネルを作成していました。
5h の間、ボイスチャンネルに入ってもらい、noya2 もミュートで入って Clar 対応をしました。
順位表情報がないので test-runner にとっては苦しい時間も続いたようですが、ざっくりとした難易度感を改めて認識できました。
また、準備者が気づけなかった致命的な問題文ミスなどの指摘がいくつかあり、助けられました。
12 月 4 日 ~ 5 日 polygon への移植
昨年までの経験もあるため、問題準備の担当者には AtCoder 上で作業をしてもらっていました。昨年までは AtCoder 上での開催の数ヶ月後に Universal Cup での開催を行なっていました。今年は同時開催ですが、ほぼすべての準備が完成してから Universal Cup での開催のために別のジャッジへの移植を始めました。
移植作業は少し複雑ですが、問題ごとに特別な作業はあまりありません。ほぼすべての移植作業を tatyam さんが引き受けてくれました。(実は TTPC2022, TTPC2023 の移植作業も tatyam さんがほぼすべて行ってくれました。)
tatyam :
Universal Cup への移植は Polygon を経由するとスムーズです。Polygon は Codeforces の作問プラットフォームで、testlib.h を利用した統一的な作問ができます。また、Polygon のサーバー上ですべての実行が行われ、結果だけが返ってくるので、Web 上で作問作業が完結します。
ここでは、Polygon を問題 PDF の作成・ジャッジデータ等の受け渡しに使用しています。
詳しい移植方法は Universal Cup / CF Gym に移植する方法 - HackMD にまとめてあるので、こちらをご覧ください。
12 月 6 日 イベントネットのテスト, 部屋の確認, IPアドレスをAtCoderに連絡
延長コードの数、コンセントの位置などを確認しました。足りなそうなので、traP の部室にあるものを追加で使うことを連絡しました。
オンサイト当日に飛ばしてもらえる Wifi のネットワークテストがこの日にありました。各デバイスから接続して、IP アドレスを確認します。調べたところ、東京科学大学は多くの IP アドレスを保有しているようです。主要なサーバーの IP アドレスが特定の prefix を持つことから、 AtCoder にその prefix を連絡し、その prefix から始まるすべての IP アドレスのアクセス制限の緩和をしてもらいました。
12 月 13 日 名札完成・印刷
kinko's 渋谷店で印刷しました。A4 で印刷するとちょうど裏表(両面にしておくと視認性が良いです)いい感じに名札サイズになる pdf を USB に入れて持っていくと、店員の指示に従えば30分くらいでできます。紙番号は 012 にしました。
名札ケース は Amazon で買いました。
印刷した A4 の紙を traP の部室にある裁断機で切り分けてケースに入れる作業が地味に大変でした。
名札のあれこれが後回しになってしまいました。デザインの依頼を早めに行っておくと良いと思います。印刷は参加者が確定するまで待つ必要があるため直前にならないと行えないです。印刷所の営業日を確認しておきましょう。
12 月 14-15 日 Universal Cup での Div. 1 開催
Universal Cup では同じコンテストが複数の Time Window に分かれて開催されます。最初の Time Window は日本時間で 14 日の 9:00 ~ 14:00 、最後は 27:00 ~ 32:00 です。 Clar 対応のため、すべての問題に目を通している noya2, Sotatsu, tatyam のうち少なくとも 1 人が開始後 12 時間は待機していました。結局来た Clar は 1 件のみで、しかるべき対応を行いました。
Clar 対応は通常のコンテストページと同じ場所で行うことができます。権限があれば、 Backstage というカラムが見えるようになり、そこから Clar を確認して回答することができます。
さらに、Universal Cup と AtCoder で同時タイミングでコンテストを開催するために、追加の Time Window を 15 日の 13:00 ~ 18:00 に設けてもらいました。これは運営にお願いすると作ってもらえます。
12 月 15 日 AtCoder での Div. 1, Div. 2 開催
有志の 5h セットは 13:00~18:00 での開催が多い気がします。昨年度の開催経験も踏まえ、その時間で開催します。
コンテスト中は、会場に配置するスタッフは 2,3 人にして、ほぼすべてのスタッフが滝プラザと traP の部室に散らばりました。一般にスタッフが会場に集まるとうるさくしてしまいがちなので、スタッフ部屋を用意するなり準備しておくと良いです。今回は滝プラザと部室で足りるという判断のもと、追加の教室予約は行いませんでした。
スタッフメンバーが何人か交代で Clar 対応を行いました。重要な変更が必要な場合は、問題担当者にすばやく連絡を取り、しかるべき対応をします。 noya2 が sample にサンプルを入れていないミスが 2 ケース発覚したため、テストケースの再アップロードと、その旨の通知を行いました。この判断は tatyam, noshi91 による議論と指示を仰いだものですが、一般にそういう重要な判断は 1 人では行わない方が無難です。
Universal Cup での順位表凍結に合わせ、AtCoder でも順位表凍結を行いました。終了 1 時間前の凍結で、凍結解除はコンテスト終了後すぐに行いました。なお、凍結や凍結解除の制御はコンテストの Manager なら コンテスト情報を編集 ボタンから行うことができます。
解説公開のタイミングはコンテスト終了直後です。この時点で日本語版・英語版の解説を全 21 問に対して作成していました。
12 月 15 日 東京科学大学大岡山キャンパスでのオンサイト開催
タイムテーブル
時間 | やること |
---|---|
10:00 | 集合( W2-401 ) |
10:00~11:00 | 会場設営 |
11:00 | 運営昼ごはん |
12:00~12:30 | 開場 |
12:30~13:00 | 諸注意・チーム決め |
12:45 | UC参加チームを調べる(挙手してもらう) |
13:00 | コンテスト開始 |
13:00~18:00 | Clar 対応・集計 |
17:00 | 順位表凍結 |
18:00 | コンテスト終了 |
18:00 | 順位表凍結解除 |
18:15 | 解説 |
19:00 | 懇親会・解散 |
20:00 | 撤収 |
会場設営
休日に大学の講義室を借りる場合は、守衛所に行って鍵をもらう必要があります。一貫して noya2 が管理しました。返す際も守衛所に行って手続きをする必要があります。 学生証を用意しましょう。
教室を開け、スピーカー・プロジェクター・延長コードなどの機材の搬入を行いました。
教室に設置されたスクリーンを 2 つ降ろし、Wifi 情報やトイレの位置などを案内するスライドを映しました。
名札の印刷後に参加登録をしてくれた人の名札を、通常のコピー用紙に印刷しました。紙の質は劣りますが、ケースがしっかりしていたので、悪くない出来になっていたのではないでしょうか。
受付・名札渡し
来た人に名前を聞き名札を渡します。遅刻者も入れますよとXでポストしました。
コンテスト時間のスタッフの配置
遅刻者の対応をするために建物の 1 階に 1-2 人、講義室内 2-3 人が常にいるようにしました。あとの人は滝プラザでゆったり順位表を眺めたりClar対応をしたりしていました。
表彰・解説の段取り
あらかじめ表彰・解説用のスライドを用意しておきます。必要な統計情報はコンテスト中やコンテスト終了後に急いで集計します。
まず表彰を行いました。
Div. 2 は得点順、 Div. 1 は AtCoder と Universal Cup の Combine を
- 部分点を削除
- ペナルティを削除
- タイブレークは Last AC 時刻
として順位をつけ、1~3 位のチーム名を発表しました。前に出てもらうなどはしませんでした。
次に解説を行いました。今回は問題数が 21 問と多かったため、Div. 1, Div. 2 で共通する 7 問のみを対象にしました。解説を行わない問題でも、問題に関わった人(提案者、作業担当者など)の ID を載せたスライドを用意して紹介しました。
解説は 1 問あたり 5 分を目安に行いました。少し長引いたものが多かった印象です。一般にチーム戦の問題解説は全く見ていない問題の時間もあって退屈しがちです。懇親の時間を長く取ることが重要だと考え、共通問題のみの解説としましたが、これは良い判断だったと思います。
最後に、 noya2 による Ligitning Talk 「TTPC2024 の作り方」を行いました。先に述べた解法証明コンテストについて触れ、難しい問題の作り方やチーム作問のメリットなどを紹介しました。10 分ほど話したと思います。重要なポイントでしっかりと反応を得ることができてよかったです。面白かったという声もあって、助かっています。
懇親会・解散
解説が終了した後、懇親の時間となりました。PCから充電ケーブルを抜いてもらい、延長コードの回収を行いました。他にも、スピーカーやプロジェクターを箱にしまうなど、撤収の準備を進めました。
参加者のフィードバックを得る重要な機会でしたが、もう少し手広く情報を集めるべく、google form で感想を集めるというのはやってみても良い気がします。余裕があれば。
撤収作業
スタッフメンバーがたくさんいるので、手分けして撤収しました。
- 機材を traP の部室に戻す
- 教室を出るよう参加者を誘導する
- ゴミ拾いなど、簡単に掃除をする
- 照明や空調設備をオフにする
- 黒板を消す
- 落とし物や忘れ物を X(旧 Twitter) の公式アカウントで報告する
- 教室を施錠し、鍵を守衛所に返す
12 月 16 日 AtCoder 上にオンサイト用の解説スライドを投稿
noya2 が当日使用したスライドを微調整して、アップローダから投稿しました。全体解説として admin 名義(noya2 など、アップロードした人名義ではなく)で投稿されるはずです。
連絡事項まとめ
AtCoder との連絡事項
AtCoder との連絡は noya2 が行いました。
- 開催連絡
- この時点で Div.1, Div.2 の同時開催を連絡した
- Universal Cup に Div.1 のみ掲載することも連絡した
- オンサイトを開催することも連絡した
- すべてのスタッフメンバーの AtCoder ID を伝えた(AtCoder 上での作業に必要な権限をもらうため)
- 問題数の連絡
- Div.1 は 13 問、Div.2 は 15 問
- test-runner への権限追加の申請
- すべての test-runner の AtCoder ID を伝える
- 準備陣と同様の Manager 権限をもらうことになるはず
- 英語版の AtCoder コンテストトップページの Upcoming Contests に TTPC2024 を掲載するよう申請
- 通常の有志コンテストは英語版には掲載されない
- TTPC2024トップページ・問題文・解説のすべてを英語で用意する準備があったので、それも伝えた(実際の掲載基準はわからない)
- オンサイト会場の IP アドレスを通知、アクセス規制の緩和を申請
- Div.1, Div.2 に共通する問題を同一のものにするよう申請
- 太古の ARC は ABC と同時開催していた。このときの共通問題は ABC の問題リンクが ARC の問題を指すようになっていた。
Universal Cup との連絡事項
Universal Cup との連絡は tatyam が行いました。
連絡は Qingyu との DM で行っています。
9/2 - 8 にかけて、IOI2024 がエジプトのアレクサンドリアで行われていました。 IOI2024 参加記 (tatyam 視点) – togetter
tatyam は日本チームの副団長として参加しており、なんと Universal Cup 運営の Qingyu と chenjb もエジプトチームの団長・副団長として参加していました。
そこで Qingyu に、「今年もうちの大学でコンテストを準備していて、Universal Cup で開催したい。今年はオンサイトと Universal Cup を同時に開催したい。開催予定日は 11/16 か 11/23 あたりかな」と英会話をして、いいねと反応をもらいます。
その後怠惰だったのでテキストメッセージでのフォローを入れていませんでした。
9 日後、開催日は 11/23-24 かもとなっていた頃、たくさんの中国 Regional が入った UCup の日程がリリースされ、11/23-24 が埋められてしまいました 😱
おそらくこの日程は運営次第でずらすことも可能だとは思うのですが、(一度 11/23 に入れられませんか?とは連絡した (9/17) が、返答は帰ってこなかった) 12/14 の会場が確保できることを確認して、「12/14-15 なら開催できそうだけど、空いてますか?」と連絡します (9/22)。5.5 日後、12/14-15 に開催できるとの返答をもらって、開催日時が決定します (9/28)。
日曜日の 13–18 にオンサイト参加者のための Window を作ってほしいと連絡して、OK をもらいます。
(11/7) UCup の日程にアップデートがあり、12/14 に Hangzhou Stage が入っています (!?) 急いで連絡して、直してもらいます。
(12/6) 問題を Polygon に移植して、権限を付けておいたよと連絡します。H の ML を 2GiB にしたいこと、I がインタラクティブであること、J でビジュアライザを配布したいことを書いておきます。
(12/13) UCup にコンテストが準備されます。Clar 対応のために、運営の UCup アカウントに Moderator 権限を付けてもらいます。Moderator は Moderator の追加・削除ができるので、修正のために連絡をする必要はありませんでした。
traP との連絡事項
traPには庶務という大学とのやり取りや講義室の予約などをしてくれる方々がいて、オンサイトイベントに関して困ったことがあったら庶務に聞いていました。本当にいつもお世話になっております。
東京科学大学との連絡事項
traP を介してすべての連絡を行いました。ゲスト用の Wifi のための申請、学外の参加者が構内に入るための申請が必要です。企画書を提出する必要があります。それから、学外参加者のおおまかな人数を把握しておく必要があります。今回は connpass での募集人数に合わせて 100 人と記しました(TTPC2023 のオンサイト参加者を参考にしました)。
所感・反省
by tatyam
- 英語問題文・解説の作成ができたのは、完全に ChatGPT のおかげです。ChatGPT を使った翻訳自体は 2 年前からやっていますが、精度が年々上がっていて、今年はついに「翻訳が作業になった」のを感じました。生成 AI の進化には驚かされるばかりです。
- UCup とオンサイトの同時開催は調整が大変なので、やるべきではなさそうです。UCup 運営は少ない労力で多くを運営しているので、調整には時間がかかります。日程が急に変わることもあります。これに会場 + AtCoder の都合も加わるので、調整は困難を極めることになります。
- 問題文が読みやすくあることに対するこだわりがあるので、全ての問題に対し、日本語の問題文の修正 → 英語の問題文の作成 or 修正 を行いました。何個かミスが発生して、注意不足だったかも (日本語の推敲も ChatGPT でできたらいいなあ)。何件かこれに対する労力はかけるべきものとしてやっているので良いのですが、(もっと多くの競プロer が) 読みやすい問題文を書くことにこだわりをもってほしいと思っています。(思想)
- コンテストを Division で分けたことは、(部分点が少なめのコンテストにとって) より多くの人が楽しめるようになってとても良かったと思います。こんな問題数を用意しなくても成り立つと思いますので、ぜひ他のコンテストでも…
- Div. 2 の英語問題文を用意したのは、ちょっとやる気がありすぎたかも
- Polygon への移植は、statement_en.md がすでにあった + 2 回分の経験によるのテンプレート化 + ChatGPT の精度向上のおかげで、思ったより早く終わりました。(全部で 5~6 時間くらい?)
- 私提案の問題 (https://yukicoder.me/problems/no/2988) は、「log の差が区別できず、それだと典型要素が強くなってしまう」という理由で没にしてしまいました。(それでもそれなりに評価していただけたようですが。)
std::vector
のメモリ確保・ランダムアクセスが実行時間のかなりの割合を占めていて、きびしい… - 最近は作問に時間を掛けられていないので、原案を出さず問題を強化することばかりしている気がします。1 年くらい競プロ強化期間が欲しいんですが…
- 卒業に向けて継承・ドキュメント化もやらないといけませんね
by noya2
少し規模を大きくし過ぎてしまった感があります。すべての問題に眼を通す役目を tatyam さんから(実質的に)引き継いだのですが、21 問はやはり多いです。特に tester 作業の統制がきちんととれていたとは言いがたい印象です。問題文校正は tatyam さんが独断で行うことが多かった、テストケース生成がうまくいっているかの確認が十分に行われていないように見える問題がいくらかあった、というのは改善すべき点です。
改善案として、次のような作業プロセスを提案しておきます。
- 問題文・バリデータ・解説など、確認するべき事項 1 単位について、その時点での確認者を表すリストを用意する。
- 変更を入れた者は、該当単位の確認者のリストを空にする。
- 変更を入れた者は、必ず確認を行う。
- 該当単位を確認した者は、確認者リストに自分の ID を書き込む。
(例) Div. 1 D - A xor B plus C の担当者が noya2, 副担当が potato167 である。
- noya2 が問題文を書いた。問題文を確認するべき事項の 1 単位とする。確認を行い、リストに noya2 を書き込む。
- potato167 が問題文を確認した。リストに potato167 を書き込む。
- noya2 が問題文を変更した。リストを空にする。再度 noya2 が確認を行い、リストに noya2 を書き込む。
- tatyam が問題文を確認した。リストに tatyam を書き込む。
- この時点のリストは
[noya2, tatyam]
である。potato167
は入っていない。つまり、この時点では副担当 potato167 の確認ができてない状況である。出題直前の状況としてはよろしくない。- potato167 が問題文を再度確認した。リストに potato167 を書き込む。
GitHub の CI を活用して、1 単位ごとの確認者リストの更新を自動化できればより良いかもしれないですね。
- 確認するべき 1 単位を登録する。対象とするファイルや目標とするリストの中身を定義する。
- 問題文なら
statement_ja.md
など - 担当者と副担当者の ID が含まれるべきである、など
- 問題文なら
- 該当単位への変更が commit されたらリストを空にする。
- リモート上で確認したことを報告できるようにする。
- マイルストーンを設け、定期的に確認者が足りていないときに通知を飛ばす。
それから、UC との同時開催は、特にこだわる必要がなさそうなことも(個人的には残念ながら)わかってしまいました。UC に積極的に参加している競プロ最上位勢に向けたセットを用意したつもりで、それでも多くの人を対象にしているつもりでしたが、同時開催を喜んでくれる人は少なかった印象を受けました。少なくとも労力には見合っていない気がします。現状は polygon への移植作業をほぼすべて tatyam さんが行っていて、スタッフの人数の多さを活かせていなかったのも反省点です。
また、今回は UC との同時開催をしてしまうならそれほど作業量が増えないだろうということで、 AtCoder 上のコンテストページや問題文および解説について英語版も用意しました。これについては完全に誤算でした。Div. 2 についても用意することになったのは個人的には想定外でしたが、結局半分以上の問題についての英語版の作業は tatyam さんに行ってもらいました。各問題の担当者にやってもらえれば良いのですが、そうアナウンスしてもこれだけ人数がいればどうしても足並み揃わないものです。ただ、やる気のある人だけを集めるというのも違いそうです。悩ましいところです。いずれにしても tatyam さんがいないとほぼすべての作業に支障が出る状況をなんとかする必要があります。
もちろん、良かった点も多くあります。スタッフの人数が多かったこともあって、難しい問題がたくさん集まりました。赤 3 人チームが十分(すぎるほど)に楽しめるセットになったと自負しています。問題が面白かったという声をたくさんいただいて、嬉しい限りです。それから、traP の協力を得てオンサイトを開催するという実績を得ることができました。オンサイト会場を企業から借りるのはそれなりに大変で、それに比べれば大学キャンパスでの開催はいくらか負担が少ないです。スタッフの人数の多さを活かして、機材の移動や誘導などの人員不足に悩まされることはあまりありませんでした。
問題セットに対する反省点があるとすれば、 Div. 1 が難し過ぎたことです。UC チームの USA1 (tourist, ksun48, ecnerwala)(実質の人類代表?)に全完されてしまったことへの驚きを隠せませんが、それでも HoMaMaOvO (hos.lyric, maroonrk, maspy)(実質の日本代表?)を 10 完(13 問中)に抑えたのは、それだけ難しいセットであったこと物語っています。オンサイトに限れば 7 完が最大で、AtCoder と UC を合わせてもその 2 チームを除けば 8 完にとどまっていました。もう少し簡単でも良い気がします。そもそも今年は自分が開催した解法証明コンテストが赤コーダーの協力により大成功を収めたことが難化の大きな要因でしょう。来年の開催は未定(というか、そこまでうまくいくことばかりではないはず)なので、少なからず易化するはずです。
また、オンサイトの方に多く参加してもらった Div. 2 についても、「分けてくれたのはありがたいが、それでも難しかった」といった声をいくらかいただきました。正直なところ Div. 2 は Div. 1 に採用されなかった問題が集まっていた、正確には Div. 2 用に狙って作られたわけではない問題が集まっていたため、そこそこ難しくなっていました。はじめから Div を分ける判断ができていれば、狙って難易度を当てに行けたかもしれません。
それでも Div を分けたこと自体にはかなり手応えを感じました。作問者としてはやはり難しい問題を出題したいものですが、多くの参加者(特にオンサイトに来てくれる参加者)は今回のような難しいセットを望んでいるとは限りません。これを解決する手段として Div を分けるのは悪くない判断でした。今回は結果的に、それでも難しくなってしまったという印象ですが、仮に分けずに Div. 1 のみでオンサイトを開いたことを想像すると、幾分かマシだったと思います。(分けなかった場合、オンサイト 0 完が大量に発生し、阿鼻叫喚間違いなしです。)
難しい問題が集まり過ぎた場合、来年に回すというのも手ですが、スタッフメンバーは毎年少しづつ入れ替わることを考えると得策とは言えないでしょう。余力があれば Div を分ける以外にも day 1, 2 で分けることまで視野に入れても良いと思います。また、半分冗談ですが、 AR/GC に回してしまうのも検討してみても良いかもしれません。とにかく、今回の Div. 1 は難易度感としてはかなり納得のセットでしたが、後ろ 4 問を提案した身として担当問題の解かれなさを見ると、寂しさともったないなさを感じてしまいます(TTPC2024 の名誉のためはっきりと言っておきますが、後悔は全くしていません)。自信作の放出機会は慎重に伺いましょう。
いずれにしても大きな問題なく TTPC2024 を終えることができて良かったです。このドキュメントがこれから競プロイベントを企画する人のいくらかの助けになれば幸いです。ありがとうございました。
by Sotatsu
運営陣が大人数で大変だった面も多かったが、当日はとても助かりました。来年以降、TTPC主催を頑張ってくれる後輩が出てきてくれるとうれしいです。TTPC Never Ends...