update
This commit is contained in:
@@ -28,6 +28,25 @@ LEVELS = (("beginner", 0.2), ("advanced", 0.4), ("expert", 0.6), ("master", 1.0)
|
||||
|
||||
POINTS_BASE = 25 # Points per subblock. Master cap = (all subs) × 25.
|
||||
|
||||
# Leitner boxes for the flashcard practice deck: roughly doubling intervals cover
|
||||
# session → day → week → month. Box 1 with interval 0 = a failed card stays due in
|
||||
# the running session. Absolute UTC times, no day-boundary semantics (timezone-free).
|
||||
LEITNER_INTERVALS = {1: 0, 2: 1, 3: 3, 4: 7, 5: 21} # days per box
|
||||
LEITNER_MAX_BOX = 5
|
||||
PRACTICE_NEW_PER_SESSION = 10 # new cards offered per deck fetch
|
||||
|
||||
|
||||
def leitner_step(box: int | None, correct: bool) -> tuple[int, int]:
|
||||
"""(new box, interval in days). New card + correct → box 2; wrong → box 1 (due now);
|
||||
correct → one box up, capped at LEITNER_MAX_BOX."""
|
||||
if not correct:
|
||||
new = 1
|
||||
elif box is None:
|
||||
new = 2
|
||||
else:
|
||||
new = min(box + 1, LEITNER_MAX_BOX)
|
||||
return new, LEITNER_INTERVALS[new]
|
||||
|
||||
|
||||
def _levels(n_je_level: dict[int, int]) -> list[int]:
|
||||
return [n_je_level.get(k, 0) for k in (1, 2, 3, 4)]
|
||||
|
||||
Reference in New Issue
Block a user