waffensachkunde

Waffensachkunde – Lernsoftware für die Sachkundeprüfung nach § 7 WaffG. Barrierefrei, offline, EUPL-1.2.

/ app src shared hartnaeckig.ts

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