忘却曲線を管理して適切に復習出来る機能
https://twitter.com/chokudai/status/1259521943734087682
個人的に黄 diff や橙 diff を Anki っぽいやつで管理してからコンテストで調子が良いので、これで本当にレートが上がったら AtCoder Problems に実装したい気持ちもあるが、これが有効なのはある一定のレート以上という気もする(少なくとも灰〜水の人は問題管理に気を使わなくても今ある問題を1巡するだけで結構な練習になるはず)
#647 のディスカッションで思ったことを転記します。
ある問題を提示して、その問題をACした場合、適当な日数をおいて再度提示したいです。i 回問題を解いたあと i+1 回目に表示されるまでの日数 d_i を、以下の2つのパラメータから計算することにします。
- i : その問題を AC した回数。これは単純な AC 回数ではなくて、何かしらの処理をする必要があります。例えば、同じ日に何回 AC しても1回にカウントするというのは納得できると思いますが、どの程度短い期間の AC まで1回にカウントするのかは考える必要があります。
- p : その問題を解ける確率。これはユーザーのレートと、問題の難易度推定モデルから計算できます。
日数 d を次のように計算することにします。
d_i := 5 * 2^(i-1) - f(p, i)
これは、基本的には「1回問題を解けたら5日後にもう1回、2回目も解けたらその10日後にもう1回、3回目も解けたらその20日後に…」というように期間をどんどん広げていきながら復習することを考えています。ただ、解けなかったかどうかを現状では検知する方法がないので、f(p, i) でレートと問題の難易度と解いた回数から計算される項によって復習の間隔を狭めます。
「解けなかったかどうか」という情報を自動で判定するのは難しいと思うので、ある程度ユーザーのインプットを期待したらどうでしょうか。例えば、
- 問題1問だけのバチャを作ってもらって、そのバチャ内でACできなかったら解けなかったものとみなす。あるいは、バチャに"推薦に反映させる"的なチェックボックスを作る。
- 問題が解けた/解けなかったという情報を記録する UI/API を作り、そこで手動で記録してもらう。
などです。
問題が解けた/解けなかったという情報を記録する UI/API を作り、そこで手動で記録してもらう。
これはかなり現実的 && 便利そうだと思っているので、やりたいですね。