追いコンを開催した

はじめに

本記事は,競技プログラミング Advent Calendar 2022の12月23日の記事です. qiita.com


追いコンとは,追い出しコンテストの省略形で,組織から抜ける者が組織に残る者に対して開催するコンテストを指します. 例えば,大学のサークルなどでは,卒業生がお世話になった下級生に対して感謝の思いを込めて競技プログラミングコンテストを開催することがよくあります. 実際私も,先輩が自身の卒業のタイミングで開催した競技プログラミングコンテストに参加させていただいたことがあります. chut1130m.hatenablog.com

そして,2022年の9月30日に,私も無事に半年留年して博士課程を修了したため,それまでお世話になったプログラミングサークルの後輩に感謝の思いを込めて追いコンを開催しました. 本記事では,この追いコンについて述べます.

追いコンの概要

追いコンの概要は以下の通りです.

  • 参加者:私の所属するプログラミングサークルの中で,お世話になった方々(コンテスタント7人,協力者1人)
  • 時間:1時間30分
  • 問題数:30問
  • 難易度:AtCoder Beginner Contestの100点から500点までの間程度
  • 日時:2022年12月11日の18:00から19:30まで
  • 会場:Discord
  • プラットフォーム:QingdaoU/OnlineJudge github.com

準備

以下の準備を行いました.

  1. 参加者の確保と日程調整
  2. プラットフォームの準備
  3. 問題の作成

参加者の確保と日程調整

まず,開催に必要な最低参加者数を,4人と定めた上で,最も参加してくれそうな数人に声をかけ,参加を確約してもらいました. 彼らをコア参加者と呼ぶこととします. コア参加者を確保できたことにより,最低参加者数が達成できました. また,協力者も1人確保しました.

次に,コア参加者が参加可能な日程を複数確保し,これを開催候補日程としました.

その後,顔を思い出せるサークルメンバーにDiscordでDMを送って追いコンに誘い,参加したい場合は開催候補日程の中から参加可能な日程を教えてもらい日程調整を行いました. 具体的には,調整さんというサービスを利用し,開催候補日程の中で参加可能な人の最も多い日程のうち最も近い日程に決定しました. chouseisan.com

プラットフォームの準備

追いコンのプラットフォームとして,QingdaoU/OnlineJudgeというオンラインジャッジシステムを使用することとしました. このシステムはOSSのオンラインジャッジシステムで,コンテストサイトとジャッジサーバーを含むdocker-compose.ymlを起動するだけで準備が整います. https://github.com/QingdaoU/OnlineJudgeDeploy/blob/2.0/README.en.md

実際の作業として以下の作業を行いました.

  1. 私が契約しているVPS内でオンラインジャッジシステムを起動する.
  2. 私が持っているドメインにコンテストサイト用のサブドメインを設定する.
  3. VPS内のリバースプロキシにコンテストサイト用の設定を加える.

ここで1つ躓いたことがありました.ローカル環境でオンラインジャッジシステムの起動を確認しようとして失敗しました.原因は定かではありませんが,ローカル環境がApple M1チップ搭載のMacBook Airだったからかもしれません.

問題の作成

準備の中で最も時間がかかったのが問題の作成でした.問題の作成では1人の協力者と協力して,問題文の作成,テストケースの作成,解答の作成,問題のチェックを行いました. 問題の構成は以下の通りとなりました.

Number Title Score
1 Hello 20
2 Naming rules 40
3 Go 20
4 Linear Transformation 30
5 Numbers 20
6 Count vowels 20
7 max - min 20
8 Compare 20
9 Memoized Recursion 50
10 GCD Rectangle 400
11 Shepherd 300
12 Segment Eraser 500
13 String Power 20
14 Sum of numbers 20
15 Tri Tri Tri 400
16 Java 20
17 Parallelogram 40
18 Many Swaps 20
19 Calc 30
20 Transaction 40
21 Recursive Parity 50
22 Quadratic Equation 50
23 MAX LCM 300
24 ASC 20
25 Sort Unique 20
26 Compare2 50
27 Compare3 40
28 Switch Case 20
29 Sorting integers as strings 20
30 Linear Equation 20

Scoreは,難易度の高い問題ほど高くなるように設定しました. AtCoder Beginner Contestで100点以上300点未満くらいの点数になりそうな難易度の問題は,大量に用意した上でScoreが100点未満となるように調整しました. AtCoder Beginner Contestで300点以上の点数になりそうな難易度の問題は,その点数をScoreとしました. このような構成としたのは,参加者のレベルにばらつきがあったとしても,難し過ぎて手が止まってしまったり,易し過ぎて時間が余ってしまったりすることがないようにするためでした.

問題の作成で最も大変だったことは,厳密な問題文を記述することでした. また,注意が必要だったこととして,追いコンで利用したオンラインジャッジシステムは,AtCoderと異なり,テストケース毎にACとなればScoreが加算されるということが挙げられます.

問題のチェックは,問題文に不備が無いか,制約は適切か,テストケースは正しいか,難易度に対するScoreは適切か,といった点について協力者と互いにチェックすることができました.

開催

追いコン当日のスケジュールは以下のようになりました.

17:30に集合して最初に,オンラインジャッジシステムのアカウントを作成してもらいました. アカウント作成の間に,私から卒業の挨拶として,同級生がおらず寂しかった博士課程の私に,構ってもらったことへの感謝を述べました. また,アルバム鑑賞ということで,私のツイートを画面共有して遡りながら思い出を懐かしみました.

18:00になるとコンテストがスタートしました. 私は協力者と一緒に順位表を見てお喋りをしたり,質問への対応をしていました.

19:00を過ぎた頃,コンテスタントからの質問により異変に気がつきました. コンテスト終了時刻を19:30と設定していたのに,コンテストが終了してしまったのです. 原因はVPSの時刻が10分以上進んでいたことだったため,ずれた時間の分だけコンテスト終了時刻を遅く設定し直しました.

19:30にコンテストが終了した後は,AmongUsをして遊びました.

21:00からはAtCoder Beginner Contest 277に参加しました. 終了後はAtCoder反省会の中で,AtCoder Beginner Contest 277や追いコンの問題について振り返りました.

追いコンの結果と振り返り

追いコンの結果は以下の通りでした.

参加者の得点と順位

以下に追いコンの振り返りとして,良かった点,悪かった点,今後に向けてするべきことを示します.

良かった点

  • 参加者や協力者を集めることができた.
  • 自分の作成した問題を解いてもらえるのがとても嬉しかった.
  • オンラインジャッジシステムの準備と操作の仕方を習得できた.
  • 全員1問以上ACすることができた.
  • 全問ACしてしまう参加者が出なかった.
  • 得点のグラデーションが緩やかで,問題の構成や配点が適切だった.
  • 協力者と互いにチェックできたため,問題に大きな不備が無かった.
  • 当日,協力者と順位表を見ながらおしゃべりを楽しめた.
  • AmongUsも楽しかった.
  • AtCoder Beginner Contest 277の直前での開催だったため,ウォーミングアップにもなった.

悪かった点

  • オンラインジャッジシステムを動作させているVPSの時刻が狂っていて,終了時刻前に終了してしまった(終了時刻を設定し直すことで復帰するができた.).
  • Discordで質問を受け付けたが,質問内容や質問への回答が参加者全体に共有されてしまうことがあった.

今後に向けてするべきこと

  • VPSの時刻合わせをする.
  • 質問方法について検討する.
  • 今回は,追いコンということでサークルでお世話になった後輩に参加してもらったが,次は,他の知り合いや会社の同僚にも参加してもらえるようなコンテストを企画したい.

まとめ

  • 博士課程を修了したため,それまでお世話になったプログラミングサークルの後輩に感謝の思いを込めて追いコンを開催しました.
  • QingdaoU/OnlineJudgeというオンラインジャッジシステムを利用しました.
  • 参加者全員に楽しんでもらえるように,問題の構成と配点を工夫しました.
  • 問題の作成はとても時間がかかりましたが,みんなに解いてもらえてとても嬉しかったです.

謝辞

追いコンに参加してもらった方々に感謝します.