競プロサークルで Codeforces のバチャ会を開いた話

この記事は、Competitive Programming (1) Advent Calendar 2020 20 日目の記事です。
アルゴリズムの記事を書くと言ったな。あれは嘘だ。

前書き

私は東北大学競技プログラミングサークル puzzleknot に所属しています。
2020年度前期は対面でのサークル活動が禁止され、週に一回のABC解説会が行われていました。*1
後期も引き続きABC解説会が行われているのですが(私個人の気持ちとして)他にも活動をしたいということで、定期的にバーチャルコンテストを開催することにしました。
12月14日時点で AtCoder の AC Counting Rank 7 th と 11th (他にも 59th, 153rdなど)が在籍しており、そういう人も楽しめる会にしたかったのでコンテストサイトに Codeforces を選びました。
私はこの活動をバチャ会と呼んでいます。

バチャ会の内容

Codeforces の virtual 参加機能を使って全員が同時にバチャをします。(一般に並走と言われるやつ)
コンテスト後に後述する Gather.town を使い参加者同士で議論をし理解を深めます。
開催頻度は週に二回(火曜日と水曜日の21:00から)で、特に強制力とかはないゆるい会(のはず)です。

主催者としてやったこと

バチャ会を開くにあたり、初期メンバーを募ります。
slack の random で告知をし、2週間くらいで参加希望を締切ました。

その後専用のチャンネルを作り、詳細な時間帯を決めました。
また、Codeforces に参加したことがない人もいたので、提出方法やシステムについての記事を読んでもらうことにしました。

開催日当日の20:30くらいにリマインドをし、参加する Div をスタンプで確認しました。

こんな感じ*2

f:id:lily728-gg:20201220141139j:plain

開催ポリシー

全員が1問も解いていない回を選びました。
AtCoder の問題でバチャをしたとき、「問題名を見て解法を思い出す」といったことをしがちなので、そういうことがないようにしました。
また、できるだけ全員が楽しめるように Div.1 と Div.2 の併設回のみを選び、レートは関係なく参加者の意思に合わせて好きな Division に参加していいことにしました。

コンテスト後の議論の仕方について

Gather.town というオンライン交流スペースを使っています。*3
Google meet でもいいんですが、入室のときの承認が面倒なのでこちらにしました。
また、チャットでの議論は(基本的に)せず、音声での議論をしています。

バチャに使えるコンテストを探す方法について

ほんへ?
以前であれば、
Codeforces Problems や Contest Mania で良さそうな回を探し、friend standings を見て全員が参加していないことを確認する。
ということをしていたはずです。
Div.1 しかないのであれば問題ないですが、 Div.2 もあるとなると結構大変です。

なので、Codeforces API を叩いてバチャに使える回を列挙するプログラムを書きました。(えらいね)

github.com

(ここにgithubのリンクを貼る)

純粋培養 C++er でもできたので、Python が書ければ誰でもできると思います。
register.txt に参加人数と参加者のIDを入力して実行すると該当回が一覧となって出力します。
Beta Round と Div.3, 4 と ECR は除外されるので安心です。

お世話になった色々について

たまに 2hour 30min の回があって、事前アナウンスのときに使えます。

keymoon さんありがとうございます。

課題とか

参加人数について

もう少しバチャ会参加者を増やしたいと思っていますが、まあこれは各々の生活に依存するので厳しいかなと感じています。*4
課題とかバイトとか研究とかで優先すべきことは優先してほしいですし……。
前に書いた 『Codeforces の便利ツール集』の記事*5も整備して、参加しやすいようにしたいです。

運営について

slack で毎週告知アナウンスするのが面倒になったので slackbot に全てを任せるつもりです。

展望とか

以前 Twitter 見たで「有志五人でバチャ合宿、例えば一日 5 本やって一人が一セットの解説を担当する」をやったら面白いかなって思っています。
Mashup contest 機能も使いこなしたいですね。

まとめ

Twitter で並走者募集してあまり知らない人と並走しても正直あんまり燃えないタイプなので、よく知っている身内と一緒にやるのは結構楽しいです。
いつまで続くか不明ですが、試行錯誤して楽しい会にしたいです。

おまけ

Codeforces #255 は Codeforces Round #FF (Div. 2) と表記されているので、上手くコンテスト名をパースできない。
Codeforces Round #FF(255) - Codeforces

*1:http://puzzleknot.org/category/compro/でスライドを公開しています。更新情報はTwitterでアナウンスしています。

*2:編集が雑なのは許してほしいです

*3:レトロなゲーム世界でエモい気持ちになれる。オンライン交流スペース、「Gather Town」を知ってほしい|Kura|noteが参考になるかも?

*4:人が多い日と少ない日の差が大きい

*5:ちょっと問題があったので現在は非公開