📈

AtCoder Heuristic Contestのレーティング予測計算機を作った

に公開

作ったもの

競技プログラミングサイトAtCoderのコンテストの一種であるAtCoder Heuristic Contestレーティング予測計算機を作りました。

https://github.com/3w36zj6/atcoder-rating-estimator

https://atcoder-rating-estimator.pages.dev/

過去のコンテストの出場記録を元に、次回のコンテストでどれくらいのパフォーマンスを得るとどれくらいのレーティングに到達できるかをグラフで確認できます。

(よろしければstarを頂けると幸いです)

このWebアプリの開発にはSvelteKitというフレームワークを使用しています。技術面に興味のある方は公式サイトをご覧ください。

https://svelte.jp/

Rating計算について

Ver. 1

https://www.dropbox.com/s/ne358pdixfafppm/AHC_rating.pdf

まずi回目(1\leq i \leq N)のコンテストのパフォーマンスをP_iとします。このときに1\leq i\leq Nを満たす全ての整数i1\leq j\leq 100を満たす全ての整数jに対してP_i-724.4744301\ln{j}を計算し、これらを降順にソートしたものを数列Qとします。

このときQは少なくとも100個の要素を持ち、補正前のRatingであるrは以下の式で与えられます。

r = \frac{\sum_{i=1}^{100}Q_i \times 0.8271973364^i}{\sum_{i=1}^{100}0.8271973364^i}

そして補正後のRatingであるr'は以下の式で与えられます。

r'= \begin{cases} r & r\geq 400 \\ \frac{400}{\exp{\frac{400-r}{400}}} & r < 400 \end{cases}

Ver. 2

https://img.atcoder.jp/file/AHC_rating_v2.pdf

Ver. 2では、レーティングの時間減衰と、コンテストごとの重みが導入されました。

あるRatedのコンテストでのパフォーマンスをp'としたとき、減衰パフォーマンスpは、そのコンテストの終了日から最新のRatedコンテストの終了日までの経過日数 (UTC+9 における終了日を基準とする)dを用いて以下の式で与えられます。

p = p' + 150 - 100 \times \frac{d}{365}

また、Ver. 1と同様にソートされた数列Qi番目の要素に対応するコンテストの重みをw_i、この累積和をs_i=w_1 + \cdots + w_i(ただしs_0=0)、Qの要素数をmとします。このとき、補正前のRatingであるrは以下の式で与えられます。

r = \sum_{i=1}^{m} Q_i \times (0.8271973364^{s_{i-1}} - 0.8271973364^{s_i})

rに対するRatingの補正はVer. 1と同様です。

おわりに

不具合や機能面での要望があれば、お気軽にIssueやPull Requestをお寄せください。また、この記事がAtCoder関連のWebアプリの開発を検討されている方の参考になれば幸いです。

Discussion