Null als Zerlegungszahl zulassen (z. B. 7 = 7 + 0)
This commit is contained in:
parent
3896a6cabb
commit
97cff09c4e
|
|
@ -6,8 +6,8 @@ describe('generateTask', () => {
|
|||
for (let i = 0; i < 50; i++) {
|
||||
const task = generateTask(target);
|
||||
expect(task.target).toBe(target);
|
||||
expect(task.given).toBeGreaterThanOrEqual(1);
|
||||
expect(task.given).toBeLessThanOrEqual(target - 1);
|
||||
expect(task.given).toBeGreaterThanOrEqual(0);
|
||||
expect(task.given).toBeLessThanOrEqual(target);
|
||||
expect(task.given + task.answer).toBe(target);
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,12 +1,9 @@
|
|||
// Zahlzerlegungs-Aufgabengenerator.
|
||||
//
|
||||
// Eine Aufgabe für Zielzahl T besteht aus:
|
||||
// given: vorgegebene Zerlegungszahl in [1..T-1]
|
||||
// given: vorgegebene Zerlegungszahl in [0..T] (inkl. der trivialen 0/T-Zerlegung)
|
||||
// answer: T - given (das Kind muss diese tippen)
|
||||
// choices: 3 große Buttons (richtige Antwort + 2 Distraktoren), gemischt
|
||||
//
|
||||
// Für sehr kleine Zielzahlen (T=4) gibt es nur 3 mögliche Antworten gesamt,
|
||||
// daher ggf. nur 2 oder 3 Choices.
|
||||
|
||||
export type Target = 4 | 5 | 6 | 7 | 8 | 9 | 10;
|
||||
|
||||
|
|
@ -35,9 +32,9 @@ function shuffle<T>(arr: T[]): T[] {
|
|||
}
|
||||
|
||||
export function generateTask(target: Target, prev?: Task): Task {
|
||||
// Mögliche given-Werte: 1..target-1.
|
||||
// Mögliche given-Werte: 0..target (inkl. 0 und target selbst).
|
||||
const candidates: number[] = [];
|
||||
for (let i = 1; i < target; i++) candidates.push(i);
|
||||
for (let i = 0; i <= target; i++) candidates.push(i);
|
||||
|
||||
// Vermeide identisches given wie zuletzt, wenn Auswahl groß genug.
|
||||
const givenPool =
|
||||
|
|
@ -49,7 +46,7 @@ export function generateTask(target: Target, prev?: Task): Task {
|
|||
const answer = target - given;
|
||||
|
||||
// Distraktoren: alle möglichen Antworten außer der korrekten.
|
||||
// Mögliche Antworten = 1..target-1 (gleicher Wertebereich).
|
||||
// Mögliche Antworten = 0..target (gleicher Wertebereich).
|
||||
const distractorPool = candidates.filter((n) => n !== answer);
|
||||
const numDistractors = Math.min(DESIRED_CHOICES - 1, distractorPool.length);
|
||||
const distractors = shuffle(distractorPool).slice(0, numDistractors);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user