OUPC 2023 開催記

はじめに

2024年1月6日・7日にOUPC 2023というコンテストを開催しました。

オンサイトの詳細はhttps://connpass.com/event/298268/、1日目のコンテストサイトはhttps://atcoder.jp/contests/oupc2023-day1、2日目のコンテストサイトはhttps://onlinejudge.u-aizu.ac.jp/beta/room.html#OUPC2023Day2にあるのでそこを参照してください。

私は前回・前々回のOUPCも運営に参加しましたが、今回は初めてのこと尽くしでした。具体的には以下のことが初めてで、おそらくその多くがOUPC全体でも初めてです。

  • 2 Days 開催
  • 他団体からの問題提供
  • 5時間セット作問
  • AtCoderでの出題
  • オンサイト開催

いままでのOUPCの集大成としていいコンテストにできたと自負していますが、開催に当たってやったことは簡単なことではなかったのでここに体験談を記して今後プログラミングコンテストや他のオンサイトイベントを開催する方の参考になればと思います。

北大との接点について

5月に技育博というIT系学生団体の交流イベントに参加して、そこでHCPCの方との交流がありコンテストの共催を提案させていただきました。 技育博、交通費出るし楽しいのでオススメです。

作問について

スケジュール

OUPCの以前の作問はおおよそ以下のスケジュールで行われていました。

  1. 原案を考えた人がとりあえずチャットツールに書き込む
  2. 問題として成り立っていれば共有の場所に問題文やテストケースを置く
  3. チャットツールで様々議論しながら出せるレベルの問題に仕上げていく(出せるレベルに達せなかったらrejectされる)
  4. テスターに依頼し、指摘事項を修正する

今回も同じような感じで行いました。

7月下旬に部内でwriterを募り、8月上旬に今年の作問環境やスケジュールの説明をするキックオフ会議を行いました。 北大とは11月以降にコンテストを開催すると同意していたので、その時点では以下のようなスケジュールを提案していました。 はじめは去年と同じ3時間/AOJ使用くらいの想定でいたので最終的な構想とかなり異なるんですが、それでも今考えると問題調整期間が短すぎて絶対無理です。 結局1月になったわけですが、できる限り早く準備を始めることは全てのイベント準備で大事なことだと思います。

ということで、とりあえず8月中を目処に原案の募集が行われました。 簡易的な問題文とテストケースのセットまで投げてという要求をしていましたが、結局とりあえずざっくりした問題の案だけでも出してくれという感じになりました。

9月上旬に近況報告の会議を行いました。 なんと31問もの原案が提出されていました。 中には問題に昇格するのが不可能そうな問題もあったので1問ずつみんなで検討し、出題可能そう、かつ出題したい問題として15問が選ばれました。(最終的な大ボス問となるHan Burger 2とSpecial Matrixはこの時点では生まれていませんでした)。 テストケースの作成が難しそうなものや、すでに改題によって原案者が完答できないものが生えていたので、原案者に限らない形で各問題のセット作成担当を割り振りました。 また、部分点を追加したいという話が出ていたのでAtCoderでの開催を検討する話がありました。

AtCoderの使用については、9/30の学生選手権決勝でchokudaiさんに軽く話を通して、10月中旬辺りに正式に受諾をいただきました。

9月・10月はひたすら問題セットの改善に努めました。 vwxyzさんがHan Burgerの考察中にHan Burger 2を、Sum Sumの考察中にSpecial Matrixの元となる問題を思いつき、全17問となりました。

maspyさんとygussanyさんに「11月中を目安に問題を仕上げていく手伝いをしてください」という話を受諾していただいていたので、11月はじめ頃に問題セットを渡しました。 まだ内部でも不完全な部分がわかっている状態だったので予定より完成度の低いものを渡してしまって迷惑はかけましたし、結局12月に入っても改題が行われたりして年始ギリギリまで調整をしていました。危ない。

「D問題以降のすべてに部分点をつける」構想は12月はじめになって作られたものだったので、部分点追加の作業は特に大忙しでした。 黄Diff以上想定が多いセットだったので、緑以下くらいの参加者がオンサイト会場で5時間暇にならないように設置したものでしたが、部分点獲得も難しいものが多くなってしまっていたのでもっと簡単な部分点を追加しても良かったのかなと反省しています。 OIで部分点の多い問題を出題しているsquareさんにも「このセットもっといっぱい部分点をつけれるよ」と言われたので、部分点はもっと時間をかければ洗練できたのかなと思います。

分担

AtCoderの公式コンテストやUTPCは1問を1〜2人くらいで仕上げることが多いかと思いますが、阪大のメンバーでは1人だけで1問仕上げられる能力(橙以上かつ作問経験ありくらい?)を担保できないので、OUPCでは以前から各問題についてwriter内でオープンに話し合っています。 特に去年・一昨年同様vwxyzさんに全問題にコントリビュートしていただいたので問題のレベル(質とともに難易度も…)がグッと上がりました。本当に感謝しています。

テスターは去年は慣れているygussanyさんとE869120さんに加えて内部の学生(WA_TLE, Daylight, littlegirl112, hiiragi589)を呼んでいました。 今年はmaspyさんとygussanyさんにお世話になりました。 内部学生テスターの話や北大との相互テスターの話もありましたが、阪大生や北大writerにはオンサイト会場に来てコンテスタントとして参加してもらうことにしました。

使用ツールの難しさから問題文やテストケースの更新作業はほぼすべてKowerKointが行っていまいしたが、すぐに反映させたいものだと思うので、少ない環境構築でも自動でアップロードできるような体制を次はもっとちゃんと作ろうと思っています。

ツール

チャットツールは去年まではSlackを用いていましたが、無料枠の制限がついたのでDiscordに移動しました。

問題の管理はGitHubで行いました。 別の問題に影響を与える変更による事故を防ぐために今年も問題ごとにブランチを分けて作業してもらいましたが、どちらかというと本当はそれならリポジトリを分けるのが正しいんだろうなという気持ちになっています。

テストケース作成・検証ツールとしてはRime(https://rime.readthedocs.io/ja/latest/)を使用しました。 Rimeは去年から使用していましたが、以下のような問題があります。

  • あるSOLUTIONのテスト実行が失敗したケースで止まってしまう
  • 部分点への対応が難しい
    • validatorでテストケースファイル名を受け取れないため部分点ケースのvalidateが難しい(TESTSETを2種類作ればよかったのかも)
    • 得点の設定はできて解法の検証はできるらしいが、しなかった

使い方が洗練できてないのもあると思いますが、Rimeを引き続き使用するのか、Rimeに必要な機能を追加してコントリビュートするのか、代替ツールを自作するのかはまた次回考えることにします(りあんさんにはできればRimeに追加してほしいと言われた)。

また、今年から新たに制約・問題文管理ツールとしてstatements-manager(https://statements-manager.readthedocs.io/ja/stable/)を使用しました。 制約ミスを予防できたので良かったかなと思います。 Pythonでのgenerator作成は想定されていなかったので自分でかなり簡易的なパーサーを載せていました。 これも来年もっとうまくやりたいです。

講評・解説について

問題の質が最優先かつ手一杯だったので、解説はあまり質を求めない形でいきますと言いました。

わりとギリギリ、年が明けてから解説用のスライドを作成しました。 会場の解説で少し手間取ったりしたので流石にもう少し早く準備すべきだった気がします。

講評で出すいつもの棒グラフ(下図)もDay 2の朝に会場に来てから急いで作りました。

北大の解説スライドがきれいだったので、流石にオンサイトで発表するならもう少し質を求めるべきだったかも知れません。

オンサイト会場運営・告知などについて

日程について

9月上旬のwriter会議で、12/16-17を目標に開催する話が出ていましたが、第2回緑以下コンテストが被りそうだったり(https://twitter.com/kusirakusira/status/1707235862373888222)会場予定の中之島センター7Fが12/16は埋まっていたりの理由で1月開催に伸びました。

北大とも相談して1/6-7に決定しました。

正月明けすぐで都合の悪い日もいるかと思いましたが、

  • 帰省ついでに行けて移動コストが軽くなったという人
  • 次の日が祝日なので後泊して大阪観光をする人

がいたので悪くなかったのかなと思います。 一方で卒論・修論に追われている人もいました。

特に次の日が休みなのは好評っぽかったので今後やるとしたらまた3連休や長期休暇の時期を狙いたいと思っています。

会場について

会場選びについては、

  • 100人くらい入れたい
  • 1人1000円以下の参加料で借りれる場所、できれば無料で!

というかなり難しい条件でスタートしました。

安く大きな施設を借りるとなるとやはり大学の施設になりそうだったので、大阪大学中之島センターに目星をつけました。 100人を入れられる7階の会議室は2日で434,000円と本来なら高額ですが、公認団体の課外活動として認められたのでなんと無料になりました。 公認団体にしておいてくださったこたまねぎさんに大感謝です。

次回開催時により大規模にすることやスペースを広くすることを考えるならスポンサーをお願いする必要がありそうです。 企業との交流も大事にしていきたいです(協力いただける企業様お待ちしております)。

5時間/4時間コンテストの会場で懸念だったのが

  • 飲食場所
  • 電源
  • インターネット

の確保でした。

まず飲食については、センターのQ&Aに禁止とあったので厳しかったです。 許可されていればICPCのようなお菓子コーナーの設置ができて楽しかったですが仕方ないですね。 行事の性質上水分補給が不可欠なので許可してくださいと申請して飲料水の持ち込みは許可されました。 ありがとうございます。 昼食を会議室で取ることはできませんでしたが、1日目の解説を11時に終わらせることで2日目の昼食も十分間に合わせられたはずです。

電源についても、人数分のコンセントはないことがわかっていたので電源タップの参加者への持ち込み依頼をしました。 参加者に電源タップを持ち込ませることの前例は第2回緑以下コンテスト開催記 - kusira’s blogから得られたので安心しました。 持参していただいた方ありがとうございました。

インターネットについてもセンターに問い合わせてお借りできたので確保できました。 接続が不調という話を1件だけ受けましたが基本的には不便なかったのではないかなと思います(不便だった話があったら教えていただければ今後の参考にします)。

電源・インターネットについてははじめ検討し忘れていましたがないと崩壊する要素なので必ず確認するようにしましょう。

告知について

今回は告知のXもすべてKowerKointが担当しました。 以前はこの枠はBadlyluckyさんやHerring101君におまかせしていましたが、その頃に比べて無愛想なポストが私です。 以前は「このタイミングでこの文章をツイートする」というのを会議で決めてそれ通りにツイートしていたので準備が良かったですが、今回はかなり突発的にポストしていたためあまりよい内容にできず、反省しています。 ハッシュタグも使えればよかったです。(公式が使っていないにもかからわず積極的にタグ付けでポストしていただいた方ありがとうございます)

AtCoderのコンテストサイトも締切1週間前には出したいという思いがありました。 AtCoderはOUPCの公式Xアカウントよりも明らかに多くの競プロerがいますし、AtCoderでの開催やtester: maspy, ygussanyに安心して参加登録される方もいると思ったのでできるだけ早めに出しました。 TTPCの二番煎じっぽいですがクリックするたびに加速するmarqueeも話題になったので功を奏しました。 自分の作ったネタHTMLでみなさんが遊んでくださるのは嬉しいです。

名札について

他のオンサイトコンテストの様子を見ても名札は交流のために必須で、コンテストのお土産にもなるので作りたいと考えました。

名前とアイコンを載せる必要があるのですが、compass登録のものよりSNSAtCoderで使っている名前・アイコンのほうが交流しやすいという人もいるので困りました。 いちごさんにHUPCでどうしたか聞いたら、「自分で調査した」とのことでしたが、勝手に検索して設定されるのが嬉しくない人や間違えられたくない人、強いこだわりがある人などのために事前にフォームを出しました。 フォームは1/1-1/3ととても短い期間での募集でしたが、半分以上の人から回答をいただきました。ありがとうございました。

さて、集めた情報をひたすらPowerPointに切り貼りしました。名札ホルダーを持参してもらうということもあって一般的な名刺サイズ(91mm x 55mm)に合わせたいと思いました。 理論上名刺サイズはA41枚に10枚配置することができますが、ギリギリなので4枚配置していました。 これをPowerPointで作成する方法は検索してもあまりでてこなくて自分で以下の方法で対応することになりました。

  1. スライドサイズを91mm x 55 mmとして1人分の名札を全面に作る
  2. スライドサイズをA4に変更する(元のオブジェクトはスケールしない)
  3. 同じものを9個コピペしてきれいに配置する

グループ化ができれば配置も「整理」をつかってより簡単に行うことができますが、プレースホルダーを入れていたので手作業選択→マウスドラッグでなんとか頑張りました。 さて、これをダイソーの厚紙などに印刷して自分で切り取る予定だったのですが、1月4日に行けたのが大学生協の購買だけだったためそこで写真のような名刺専用の台紙を買いました。

この台紙は場所が決まっている10枚配置だったため新たに配置し直す少し大変な作業が割り込みましたが、ズレ1mm以内でうまく印刷できました。 印刷業者に頼むより安いので今後のオンサイトイベント用に自分の名刺を作るときにも利用してもいいなと思いました(印刷の質は明らかに業者の方がいいですが…)

これをオンサイト会場に持ち込む…はずだったんですが、なんとDay 1の朝に家に置いてきてしまいました… 行く前にチェックはしていたのですが、修正が合った人の名札がちゃんと合っているか不安に合って最終確認をしていたらそのままかばんの外に… 忘れ物が多いので本当に直したいです。 私の家は会場から片道1時間強で、引き換えしてもギリギリ受付に間に合うので戻っても良かったのですが、こたまねぎさんが機転を利かせて梅田まで戻って厚紙印刷→カットをやってきてくれました。 結局受付には少し間に合わず先に名札無しで部屋に入れることになってしまったし、裁断も急ぎだったので専用台紙よりはズレが目立つことになっていまいました。こたまねぎさん並びに参加者の皆さんには大変ご迷惑をおかけしました。 こたまねぎさんは名札ホルダーを忘れた人のための予備も用意してくれていたり、前日に会場の下見に行ってくれていたり、Day 1夜のバックアップ用に近くに泊まっていたり最終日の忘れ物対応をしてくれたりで、常時めちゃくちゃ助けられました。

Day 2は元の名札を持ってきました。 2日間で別々の名札を配布したので出席数の把握が楽という利点はありました。

当日運営について

部屋の配置はサイトで見たとおりでほとんどレイアウト変更がいらなかったため設営に時間は要しませんでしたが、前述した名札事件の対応ができたので早く来てよかったです。

会場に掲示するスライド(諸注意や無線LAN接続情報が書かれたもの)を 即席で作りました。 自分のPCは別で使うので別にスライド投影用のデバイスが必要でしたが、前日に購入していたLightning-HDMIアダプタが活きて、あまり使わないiPadをスライド投影に活用することができました。

受付や1階での案内役を運営に割り振ってなんとか回しました。 幼女先輩が運営でないに関わらず受付とチーム分けを先導して手伝ってくれて助かりました。

ところでチーム分けに関しては当日のチーム分けを予定しているかどうかを事前にアンケートで取っていました。 事前に決めてくる人が大半だと思っていたので実際は半分くらいの人が会場で組むというイメージを先につかめてよかったです。 Day 1は適当に3人ずつ取って作ったそうですが、不本意にも赤赤灰チームなどが生まれてしまった(それはそれでおもしろかったのかもしれない)ので、Day 2は「完全ランダム」と「レート順に3人ずつ」で別れてそれぞれその方針で組むことになりました。それぞれ同じくらい希望者がいたので今後合っても同じような感じで分けると良さそうだと思っています。

大層な進行は必要なかったので会場の運営は当日の状況を見てその場で回そうと考えていたのですが、流石に少し準備不足だったかも知れません。 しゃべるセリフを考えていなくてかなりコミュ障の進行になっていまいました。 いちごさんのDay 2解説の進行がうまかったのであれくらい準備していくべきだなーと思い知らされました。 参考になりました。

参加者として

運営もやりつつ参加者や北大スタッフとの交流もたくさん行いましたし、Day 2はコンテスタントとして参加しました。 UPCなので大学生が半分以上だった気がしますが、中高生、ベテラン競プロer社会人、社会人になって始めた人など様々な年齢層の人が参加されていて楽しかったです。 JOIやICPCは同世代ばかりなので新しい景色を感じました。

Day 1の夜に双子と同テーブルで食事をしてすごいパワーを感じました。 気合を入れられた感じがします。 主に来年のICPCに向けて実装のスピードを上げたいと思います。

Day 2はレート順チーム分けに参加しました。 希望した中で3番目のレーティングだったので、りあんさん、vwxyzさんと組むことになりました。 赤コーダーと同じチームなのは初めてなのではじめ緊張しましたが、やりたいと言った問題はやらせてくれて、考察やデバッグも一緒にやってくれたので安心しました。 A、C、J、Kをやらせてもらいました。 オンサイトのなかでは(赤赤赤のSayaka_Manipulatorsには流石に勝てないとして)橙橙黄のKenchonKechonKechonに負けて悔しいですが、めちゃくちゃ楽しかったです。 コンテスト終了後にGの楽な解法を聞かされて3人であ〜ってなったり、Hの解説がすごくてびっくりしたりしました。 面白い問題セットを提供いただき本当にありがとうございました。

おわりに

OUPCのオンサイト開催は2年前からやりたかったことなので、ついに形になって嬉しいです。 writerのvwxyzさん, shinchanさん, くれはさん, shogo314さん、testerのmaspyさん, ygussanyさん、オンサイト運営を支えてくださったkotamanegiさん,olpheさん,幼女さん、HCPCのitigoさん,hato_さん,misaizuさん,ococonomyさん,tardigradeさん,Slephyさん,titanさん,tsutajさん,Today03さん,usatyoさん,winterさん、AtCoder,AOJの運営の方々、オンサイト/オンライン参加者の方々、過去のOUPCの築き上げた阪大OBの方々、OUPC準備に理解を示してくれた身の回りの人々、全てに感謝しています。

次回はどういう形になるかまだわかりませんが、2024年度も多分何かは開催するのでまたのご参加をお待ちしております。

ありがとうございました。