/** * Hartnäckige Fragen – die, die immer wieder danebengehen. * * **Der Anlass.** Die vollständige Fehlerhistorie liegt seit jeher in * `antwort_log`, aber keine einzige Abfrage wertete sie je Frage aus: * `letzteAntwortKarte` liest nur die **letzte** Antwort, und der Filter „Nur * Fehler“ hängt genau daran. Eine Frage, die über Wochen viermal durchfiel und * gestern zufällig saß, verschwand damit aus jeder Liste — obwohl sie das * Gegenteil von gekonnt ist. * * Bei 575 Fragen entscheiden erfahrungsgemäß zehn bis dreißig solcher Fragen * über die letzten Prozentpunkte. Die eigene Messnotiz zur * Ratewahrscheinlichkeit belegt das Problem von der anderen Seite: Der dort * nachgestellte Rater bekam eine Frage an 53 von 61 Tagen vorgelegt — „die * Frage entkommt nicht“. FSRS wiederholt stur; benannt hat den Knoten * niemand. * * **Was das hier nicht ist.** Keine Kennzahl und keine Prognose, sondern eine * Auszählung: So oft ging diese Frage daneben, an so vielen verschiedenen * Tagen. Beides steht im Protokoll und wird nur addiert. * * **Warum verschiedene Tage zählen und nicht bloß Fehlschläge.** Eine Frage, * die in einer Sitzung dreimal danebenging, ist nicht hartnäckig, sondern * gerade neu: Die Wiedereinreihung legt sie in derselben Sitzung noch zweimal * vor (`useSitzung`, `MAX_WIEDEREINREIHUNGEN`). Erst wenn sie an mehreren * **Tagen** durchfällt, hat sie sich dem Behalten wirklich entzogen. */ /** Ab so vielen Tagen mit Fehlantwort gilt eine Frage als hartnäckig. */ export const HARTNAECKIG_AB_TAGEN = 3; /** Eine hartnäckige Frage mit ihrer Bilanz. */ export interface HartnaeckigeFrage { readonly frageId: string; /** Wie oft die Frage insgesamt danebenging. */ readonly fehlschlaege: number; /** An wie vielen verschiedenen Tagen sie danebenging. */ readonly tage: number; /** Zeitpunkt des letzten Fehlschlags, ISO. */ readonly zuletzt: string; /** * Die am häufigsten gewählte falsche Antwort, falls es eine gibt. * * Aus der Spalte `antwort_log.auswahl`, die bis 0.22.0 zwar geschrieben, * aber von keiner Abfrage gelesen wurde. Sie unterscheidet zwei didaktisch * verschiedene Fälle: Wer immer wieder **denselben** falschen Buchstaben * wählt, verwechselt zwei Dinge; wer streut, weiß es schlicht nicht. Das * eine ist mit einem Merksatz zu heilen, das andere nicht. */ readonly haeufigsteFehlwahl?: string; } /** „4-mal an 3 Tagen danebengegangen“ – der Satz zur Bilanz. */ export function hartnaeckigText(frage: HartnaeckigeFrage): string { const fehl = frage.fehlschlaege === 1 ? 'einmal' : `${String(frage.fehlschlaege)}-mal`; const tage = frage.tage === 1 ? 'an einem Tag' : `an ${String(frage.tage)} Tagen`; return `${fehl} ${tage} danebengegangen`; }