feat(trainer): P10 — контент 8 класса (степени, формулы, неравенства)
- новый тип kind:inequality: answerRel{op,bound}, парсер отношения (_parseRel/_checkInequality) — нормализация «x op c», приём обратной записи, сверка op+границы; self-check внутри/снаружи решения
- темы: Степени (aⁿ, xᵃ·xᵇ, (xᵃ)ᵇ), Формулы сокр. умножения (квадрат суммы/разности, разность квадратов), Неравенства (вкл. смену знака при делении на отрицательное) → 26 генераторов, 8 тем
- движок: simplify рендерит выражение в KaTeX (exprToLatex(srcExpr)); неравенство — в KaTeX с отношением; fallback-display учитывает op
- страница: ввод/лейбл для неравенств, isLabelKind
- смоук движка 397/397 (T15 неравенства, T16 степени/формулы; T3 ≥10 для малых пространств), страница 33/33; ROADMAP_V2 P10 → DONE
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+10
-4
@@ -643,17 +643,23 @@
|
||||
// Префикс «x =» и подсказка ввода зависят от типа задачи.
|
||||
function applyInputMode() {
|
||||
var k = cur && cur.kind;
|
||||
var multi = (k === 'roots' || k === 'simplify');
|
||||
var multi = (k === 'roots' || k === 'simplify' || k === 'inequality');
|
||||
var eqx = $('tr-eqx'); if (eqx) eqx.style.display = multi ? 'none' : '';
|
||||
$('tr-input').placeholder = (k === 'roots') ? 'корни через ;' : (k === 'simplify') ? 'упрощённое выражение' : 'ответ';
|
||||
$('tr-input').placeholder = (k === 'roots') ? 'корни через ;'
|
||||
: (k === 'simplify') ? 'упрощённое выражение'
|
||||
: (k === 'inequality') ? ('напр. ' + (cur.answerVar || 'x') + ' < 3')
|
||||
: 'ответ';
|
||||
var tog = $('tr-step-toggle'); if (tog) tog.style.display = canStep() ? '' : 'none';
|
||||
}
|
||||
// Текст ответа в фидбеке/раскрытии — по типу задачи.
|
||||
var REL_SYM = { '<': '<', '>': '>', '<=': '≤', '>=': '≥' };
|
||||
function answerLabel() {
|
||||
if (cur.kind === 'roots' && cur.answers) return 'Корни: ' + cur.answers.map(fmt).join('; ');
|
||||
if (cur.kind === 'simplify') return '= ' + (cur.answerExpr ? fmt(cur.answerExpr) : '');
|
||||
if (cur.kind === 'inequality' && cur.answerRel) return (cur.answerVar || 'x') + ' ' + (REL_SYM[cur.answerRel.op] || cur.answerRel.op) + ' ' + fmt(cur.answerRel.bound);
|
||||
return 'x = ' + fmt(cur.answer);
|
||||
}
|
||||
function isLabelKind() { return cur.kind === 'roots' || cur.kind === 'simplify' || cur.kind === 'inequality'; }
|
||||
function updateStats() { $('tr-solved').textContent = solved; $('tr-streak').textContent = streak; }
|
||||
|
||||
function stepHtml(st, n) {
|
||||
@@ -764,7 +770,7 @@
|
||||
$('tr-input').disabled = true;
|
||||
var si = $('tr-stepin'); if (si) si.disabled = true;
|
||||
var fb = $('tr-feedback'); fb.className = 'tr-feedback';
|
||||
if (cur.kind === 'roots' || cur.kind === 'simplify') fb.textContent = 'Ответ: ' + answerLabel();
|
||||
if (isLabelKind()) fb.textContent = 'Ответ: ' + answerLabel();
|
||||
else setMath(fb, 'x = ' + cur.answer, 'Ответ: x = ' + fmt(cur.answer), false);
|
||||
setMode(true);
|
||||
recordAnswer(false); submitAttempt(false);
|
||||
@@ -783,7 +789,7 @@
|
||||
setMode(true);
|
||||
if (r.ok) {
|
||||
fb.className = 'tr-feedback ok';
|
||||
var lbl = (cur.kind === 'roots' || cur.kind === 'simplify') ? esc(answerLabel())
|
||||
var lbl = isLabelKind() ? esc(answerLabel())
|
||||
: (kat('x = ' + cur.answer, false) || esc('x = ' + fmt(cur.answer)));
|
||||
fb.innerHTML = ICON.ok + ' <span>Верно!</span> ' + lbl;
|
||||
$('tr-input').disabled = true;
|
||||
|
||||
Reference in New Issue
Block a user