summaryrefslogtreecommitdiff
path: root/script.js.bak
diff options
context:
space:
mode:
authorJakob L. Kreuze <zerodaysfordays@sdf.org>2025-07-19 17:11:19 -0400
committerJakob L. Kreuze <zerodaysfordays@sdf.org>2025-07-19 17:11:19 -0400
commitd79ef14711c0c9c03c2373b823ecd55b4f7f5345 (patch)
treeaba0fb4b12e52b57ad1da852ecad3469f4514a2b /script.js.bak
parent9af0c928eac7971c3e4e3a3485ee2d4f20a2f790 (diff)
Scheduling
Diffstat (limited to 'script.js.bak')
-rw-r--r--script.js.bak108
1 files changed, 0 insertions, 108 deletions
diff --git a/script.js.bak b/script.js.bak
index c81f2e5..e9b9378 100644
--- a/script.js.bak
+++ b/script.js.bak
@@ -90,111 +90,3 @@ function main() {
// All functions
}
-const W = [
- 0.40255, 1.18385, 3.173, 15.69105, 7.1949, 0.5345, 1.4604, 0.0046, 1.54575, 0.1192, 1.01925,
- 1.9395, 0.11, 0.29605, 2.2698, 0.2315, 2.9898, 0.51655, 0.6621,
-];
-
-const F = 19.0 / 81.0;
-const C = -0.5;
-
-const Grade = {
- Forgot: 1.0,
- Hard: 2.0,
- Good: 3.0,
- Easy: 4.0
-};
-
-function retrievability(t, s) {
- return Math.pow(1.0 + F * (t / s), C);
-}
-
-function interval(r_d, s) {
- return (s / F) * (Math.pow(r_d, 1.0 / C) - 1.0);
-}
-
-function s_0(g) {
- switch (g) {
- case Grade.Forgot: return W[0];
- case Grade.Hard: return W[1];
- case Grade.Good: return W[2];
- case Grade.Easy: return W[3];
- }
-}
-
-function s_success(d, s, r, g) {
- const t_d = 11.0 - d;
- const t_s = Math.pow(s, -W[9]);
- const t_r = Math.exp(W[10] * (1.0 - r)) - 1.0;
- const h = g === Grade.Hard ? W[15] : 1.0;
- const b = g === Grade.Easy ? W[16] : 1.0;
- const c = Math.exp(W[8]);
- const alpha = 1.0 + t_d * t_s * t_r * h * b * c;
- return s * alpha;
-}
-
-function s_fail(d, s, r) {
- const d_f = Math.pow(d, -W[12]);
- const s_f = Math.pow(s + 1.0, W[13]) - 1.0;
- const r_f = Math.exp(W[14] * (1.0 - r));
- const c_f = W[11];
- const result = d_f * s_f * r_f * c_f;
- return Math.min(result, s);
-}
-
-function stability(d, s, r, g) {
- return g === Grade.Forgot ? s_fail(d, s, r) : s_success(d, s, r, g);
-}
-
-function clamp_d(d) {
- return Math.min(10.0, Math.max(1.0, d));
-}
-
-function d_0(g) {
- const g_value = Grade[g];
- return clamp_d(W[4] - Math.exp(W[5] * (g_value - 1.0)) + 1.0);
-}
-
-function difficulty(d, g) {
- return clamp_d(W[7] * d_0('Easy') + (1.0 - W[7]) * dp(d, g));
-}
-
-function dp(d, g) {
- return d + delta_d(g) * ((10.0 - d) / 9.0);
-}
-
-function delta_d(g) {
- const g_value = Grade[g];
- return -W[6] * (g_value - 3.0);
-}
-
-function sim(grades) {
- let t = 0.0;
- const r_d = 0.9;
- const steps = [];
-
- // Initial review
- if (grades.length === 0) {
- throw new Error("Grades cannot be empty");
- }
-
- let gradesCopy = [...grades];
- let g = gradesCopy.shift(); // Remove the first grade
- let s = s_0(g);
- let d = d_0(g);
- let i = Math.max(Math.round(interval(r_d, s)), 1.0);
-
- steps.push({ t, s, d, i });
-
- // n-th review
- for (let g of gradesCopy) {
- t += i;
- const r = retrievability(i, s);
- s = stability(d, s, r, g);
- d = difficulty(d, g);
- i = Math.max(Math.round(interval(r_d, s)), 1.0);
- steps.push({ t, s, d, i });
- }
-
- return steps;
-}