UNPKG

supermemo

Version:

A JavaScript/TypeScript implementation of the SuperMemo 2 (SM2) algorithm for spaced based repetition flashcards.

44 lines (43 loc) 1.29 kB
/** * Applies the SuperMemo 2 (SM-2) algorithm to update an item's learning parameters * based on a given recall grade. * * @param item - The current SuperMemo item containing interval, repetition, and ease factor. * @param grade - The grade (0-5) assigned to the recall attempt. * @returns The updated SuperMemo item with adjusted interval, repetition, and ease factor. */ export function supermemo(item, grade) { let nextInterval; let nextRepetition; let nextEfactor; if (grade >= 3) { if (item.repetition === 0) { nextInterval = 1; nextRepetition = 1; } else if (item.repetition === 1) { nextInterval = 6; nextRepetition = 2; } else { nextInterval = Math.round(item.interval * item.efactor); nextRepetition = item.repetition + 1; } } else { nextInterval = 1; nextRepetition = 0; } nextEfactor = item.efactor + (0.1 - (5 - grade) * (0.08 + (5 - grade) * 0.02)); if (nextEfactor < 1.3) nextEfactor = 1.3; return { interval: nextInterval, repetition: nextRepetition, efactor: nextEfactor, }; } /** * Default export of the SuperMemo function. */ export default supermemo;