この記事はCompetitive Programming (2) Advent Calendar 2019の3日目です。
人は弱い生き物です。競プロでもっと強くなりたいと思いつつも必ずしも精進し続けられるとは限りません。ということで、競プロ勉強会が立ち上がったりするわけです。
そこで、競プロ(AtCoder)勉強会に参加する上でやっていて良かったことを紹介したいと思います。
参加者のAtCoder IDを返すAPIを作る
競技プログラミングをするくらいなので、恐らく参加者はプログラミングの嗜みがあり、勉強会をより良くしようとbotなりなんなりを作ることになると思います。
そこで便利なのが、参加者のIDを返すAPIを用意することです。進捗をつぶやくbotを作ったとして面倒なのが、参加者の情報の更新です。1個のアプリケーションだけなら1回の更新で済みますが、アプリケーションの数Nに対してO(N)の変更が必要になってしまいます。
APIを作るのに便利なサイトが以下です。
https://sheetdb.io/
GoogleのSpreadsheetと連携させるだけで、create, read, update, deleteなどのAPIが勝手に作成されます。
slackでメンションするために、slackのidやニックネームをカラムで持って使っていました(過去形)
メンバーのsteak数をつぶやくbotを作る
AtCoder Promelemsで見れるcurrent steakを各メンバーの分呟くやつです。
「お、○○結構やってんな」みたいな感じでコミュニーケーションのきっかけになったり、続いているように見られたいという気持ちから忙しいときも頑張ってみようと思えたりして導入当初はいい感じでした。
しかし、一旦途切れるとまた稼ぎ直すのは中々大変で、時間が経つにつれて虚無になってしまったかなという印象があります。
考えてみるとsteakというのは中々ストイックな指標で、モチベーションが様々な人が共通して追うには若干合わないかなと思います。週末にまとめて問題を解いても1日続いた扱いになりますし。
ざっくり進捗を追うのであれば、一週間単位で解いた問題数orスコア合計とかで出せばもう少し続けるハードルが低くできたかもしれません。
今日の一問botを動かす
一瞬だけ#chokudai今日の一問というものがありましたね。
参加者のレベル帯の問題のうち、解いた人が少ない問題を毎日slackで通知するbotでメンバーの一人が作ってくれました。(例のAPIを使って)
とりあえず解くものが決まっていないときに手をつけられるし、共通の話題になるので1問用意されることのメリットは結構あると思います。
レベルが合わない問題がでると、解くモチベーションがないみたいな原理的な問題がどうしてもありますが。
以上です。
思ったより何もやっていなかったことに気づきました。
逆に、こんなことをしていたら盛り上がったみたいな話を聞きたいですね。