summaryrefslogtreecommitdiff
path: root/script.js.bak
blob: e9b9378ebe0652986125324feaaff10f3dd90014 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
// Define a list of objects with "front" and "back" HTML content
const pages = [
  { front: "This is the front page!", back: "This is the back page!" },
  { front: "Another front page", back: "Another back page" }
];

// Select the first page from the list
let currentPage = pages[0];
let showFront = true;

// Replace the page with the front HTML initially
document.body.innerHTML = currentPage.front;

// Add an event listener for the spacebar press
window.addEventListener('keydown', (event) => {
  if (event.code === 'Space') {
    // Toggle between front and back content
    if (showFront) {
      document.body.innerHTML = currentPage.back;
    } else {
      document.body.innerHTML = currentPage.front;
    }
    showFront = !showFront;
  }
});

// Constants: W as an array of f64 values
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
];

// Grade enum representation
const Grade = {
  Forgot: 1.0,
  Hard: 2.0,
  Good: 3.0,
  Easy: 4.0
};

// Helper to convert Grade to f64 (as in From<Grade> for f64)
function gradeToNumber(g) {
  return Grade[g];
}

// Constants
const F = 19.0 / 81.0;
const C = -0.5;

// retrievability(t: T, s: S) -> R
function retrievability(t, s) {
  return Math.pow(1.0 + F * (t / s), C);
}

// interval(r_d: R, s: S) -> T
function interval(rD, s) {
  return (s / F) * (Math.pow(rD, 1.0 / C) - 1.0);
}

// s_0(g: Grade) -> S
function s0(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];
  default: throw new Error("Invalid grade");
  }
}

// s_success(d: D, s: S, r: R, g: Grade) -> S
function sSuccess(d, s, r, g) {
  const tD = 11.0 - d;
  const tS = Math.pow(s, -W[9]);
  const tR = 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 + tD * tS * tR * h * b * c;
  return s * alpha;
}

// s_fail(d: D, s: S, r: R) => number
function sFail(d, s, r) {
  return Math.exp(W[8]) - 1.0;
}

// Main function
function main() {
  // All functions
}