feat: PHP API foundation - router, config, helpers, SM-2 algorithm
Dieser Commit ist enthalten in:
Ursprung
9f942a0e56
Commit
581888e142
4 geänderte Dateien mit 152 neuen und 0 gelöschten Zeilen
39
edu/api/sm2.php
Normale Datei
39
edu/api/sm2.php
Normale Datei
|
|
@ -0,0 +1,39 @@
|
|||
<?php
|
||||
/**
|
||||
* SM-2 Spaced Repetition Algorithm
|
||||
* Ratings: easy=5, medium=3, hard=2, wrong=0
|
||||
*/
|
||||
function sm2_calculate($rating_name, $current_ease, $current_interval, $current_reps) {
|
||||
$rating_map = ['wrong' => 0, 'hard' => 2, 'medium' => 3, 'easy' => 5];
|
||||
$q = $rating_map[$rating_name] ?? 3;
|
||||
|
||||
$ease = $current_ease;
|
||||
$interval = $current_interval;
|
||||
$reps = $current_reps;
|
||||
|
||||
if ($q < 3) {
|
||||
$reps = 0;
|
||||
$interval = 1;
|
||||
} else {
|
||||
if ($reps === 0) {
|
||||
$interval = 1;
|
||||
} elseif ($reps === 1) {
|
||||
$interval = 3;
|
||||
} else {
|
||||
$interval = (int) round($interval * $ease);
|
||||
}
|
||||
$reps++;
|
||||
}
|
||||
|
||||
$ease = $ease + 0.1 - (5 - $q) * (0.08 + (5 - $q) * 0.02);
|
||||
if ($ease < 1.3) $ease = 1.3;
|
||||
|
||||
$next_review = date('Y-m-d', strtotime("+{$interval} days"));
|
||||
|
||||
return [
|
||||
'ease_factor' => round($ease, 2),
|
||||
'interval_days' => $interval,
|
||||
'repetitions' => $reps,
|
||||
'next_review' => $next_review
|
||||
];
|
||||
}
|
||||
Laden …
Tabelle hinzufügen
Einen Link hinzufügen
In neuem Issue referenzieren