feat(trainer): P5 — несколько корней, эквивалентность выражений, новые темы

- движок: gen.answers → несколько корней (_checkMultiRoot, ввод через «;», сверка мультимножеством)
- kind simplify: эквивалентность выражений численным сэмплингом (_sampleEquiv, _checkEquiv), фикс. точки без Math.random
- exprToLatex: знаковые коэффициенты — -5x, x²−5x+6, a−(−b)→a+b (вынос ведущего минуса, схлопывание)
- темы: Упрощение (подобные, скобки) + Квадратные (Виета x²+bx+c=0, разность квадратов) → 17 генераторов, 5 тем
- страница: префикс «x=»/подсказка ввода и ответ-лейбл по типу задачи
- смоук движка 291/291 (T11 roots, T12 simplify, T13 latex), страница 26/26, adaptive 12/12; план P5 → DONE

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-06-25 14:15:21 +03:00
parent 8c4c9bf04c
commit 7cc2a9d526
4 changed files with 204 additions and 28 deletions
+12 -2
View File
@@ -108,9 +108,19 @@ practice.test.js 11/11 (+SR box/due).
- **Acceptance:** учитель собирает рабочий генератор без кода; ученик решает; права/видимость
как у custom-sim (own + раздано).
## Phase 5 — Типы ответов и проверки
## Phase 5 — Типы ответов и проверки — DONE (частично)
**Цель:** не только «корень-число».
**Сделано:** движок получил **несколько корней** (`gen.answers``problem.answers`;
`_checkMultiRoot` — ввод всех корней через «;», сверка мультимножеством) и
**эквивалентность выражений** (`kind:'simplify'`, `gen.srcExpr`/`answerExpr`;
`_sampleEquiv` — численный сэмплинг в фикс. точках, без Math.random; `_checkEquiv`).
`exprToLatex` чинит знаковые коэффициенты (`-5x`, `x²−5x+6`, `a(b)→a+b`). Новые
темы: **Упрощение** (привести подобные, раскрыть скобки) и **Квадратные** (Виета
`x²+bx+c=0`, разность квадратов — 2 корня). Страница: префикс «x=» и подсказка ввода
по типу, ответ-лейбл (корни/выражение). Смоук движка 291/291 (T11 roots, T12 simplify,
T13 latex). **Осталось (стретч):** неравенства (нужен парсер отношений) — не вошло.
**Цель (исходная):** не только «корень-число».
- Множество корней (квадратные/факторизация), интервалы (неравенства), упрощение выражений
(эквивалентность через численный сэмплинг по диапазону, а не строковое равенство).