From 97cff09c4ed56b0eb383b69982a05609e22954fd Mon Sep 17 00:00:00 2001 From: schmop Date: Sun, 31 May 2026 16:12:02 +0200 Subject: [PATCH] Null als Zerlegungszahl zulassen (z. B. 7 = 7 + 0) --- src/lib/game/tasks.test.ts | 4 ++-- src/lib/game/tasks.ts | 11 ++++------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/lib/game/tasks.test.ts b/src/lib/game/tasks.test.ts index b5989dc..7afc602 100644 --- a/src/lib/game/tasks.test.ts +++ b/src/lib/game/tasks.test.ts @@ -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); } }); diff --git a/src/lib/game/tasks.ts b/src/lib/game/tasks.ts index 549936c..e880e69 100644 --- a/src/lib/game/tasks.ts +++ b/src/lib/game/tasks.ts @@ -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(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);