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:
+23
-5
@@ -141,7 +141,7 @@
|
||||
<main class="sb-content">
|
||||
<div class="tr-wrap">
|
||||
<div class="tr-head">
|
||||
<h1 class="tr-h1">Тренажёр<span class="tr-pill" id="tr-subject">Алгебра · 7 класс</span></h1>
|
||||
<h1 class="tr-h1">Тренажёр<span class="tr-pill" id="tr-subject">Алгебра · 7–8 класс</span></h1>
|
||||
<div class="tr-sub">Задачи генерируются автоматически и проверяются мгновенно. Решай по одной — бесконечно.</div>
|
||||
</div>
|
||||
|
||||
@@ -161,7 +161,7 @@
|
||||
<div class="tr-eq" id="tr-eq">—</div>
|
||||
|
||||
<div class="tr-inrow">
|
||||
<span class="tr-eqx">x =</span>
|
||||
<span class="tr-eqx" id="tr-eqx">x =</span>
|
||||
<input class="tr-input" id="tr-input" type="text" inputmode="text" autocomplete="off"
|
||||
placeholder="ответ" aria-label="Ваш ответ"/>
|
||||
<button class="tr-btn tr-primary" id="tr-check" type="button">Проверить</button>
|
||||
@@ -299,6 +299,7 @@
|
||||
cur = wordPool[wordIdx % wordPool.length]; wordIdx++;
|
||||
$('tr-skill').textContent = cur.title;
|
||||
setMath(eq, null, cur.display, true); // условие как текст
|
||||
applyInputMode();
|
||||
var inp = $('tr-input'); inp.value = ''; inp.disabled = false;
|
||||
setMode(false); inp.focus();
|
||||
}
|
||||
@@ -362,6 +363,19 @@
|
||||
answered = done;
|
||||
$('tr-check').textContent = done ? 'Дальше' : 'Проверить';
|
||||
}
|
||||
// Префикс «x =» и подсказка ввода зависят от типа задачи.
|
||||
function applyInputMode() {
|
||||
var k = cur && cur.kind;
|
||||
var multi = (k === 'roots' || k === 'simplify');
|
||||
var eqx = $('tr-eqx'); if (eqx) eqx.style.display = multi ? 'none' : '';
|
||||
$('tr-input').placeholder = (k === 'roots') ? 'корни через ;' : (k === 'simplify') ? 'упрощённое выражение' : 'ответ';
|
||||
}
|
||||
// Текст ответа в фидбеке/раскрытии — по типу задачи.
|
||||
function answerLabel() {
|
||||
if (cur.kind === 'roots' && cur.answers) return 'Корни: ' + cur.answers.map(fmt).join('; ');
|
||||
if (cur.kind === 'simplify') return '= ' + (cur.answerExpr ? fmt(cur.answerExpr) : '');
|
||||
return 'x = ' + fmt(cur.answer);
|
||||
}
|
||||
function updateStats() { $('tr-solved').textContent = solved; $('tr-streak').textContent = streak; }
|
||||
|
||||
function stepHtml(st, n) {
|
||||
@@ -384,8 +398,9 @@
|
||||
|
||||
$('tr-skill').textContent = curGen.title;
|
||||
var eq = $('tr-eq');
|
||||
eq.classList.toggle('tr-eq-text', !cur.latex); // текстовый prompt (проценты) — другим шрифтом
|
||||
eq.classList.toggle('tr-eq-text', !cur.latex); // текстовый prompt (проценты/упрощение) — другим шрифтом
|
||||
setMath(eq, cur.latex, cur.display, true);
|
||||
applyInputMode();
|
||||
var inp = $('tr-input');
|
||||
inp.value = ''; inp.disabled = false;
|
||||
var fb = $('tr-feedback'); fb.className = 'tr-feedback'; fb.textContent = '';
|
||||
@@ -467,7 +482,8 @@
|
||||
streak = 0;
|
||||
$('tr-input').disabled = true;
|
||||
var fb = $('tr-feedback'); fb.className = 'tr-feedback';
|
||||
setMath(fb, 'x = ' + cur.answer, 'Ответ: x = ' + fmt(cur.answer), false);
|
||||
if (cur.kind === 'roots' || cur.kind === 'simplify') fb.textContent = 'Ответ: ' + answerLabel();
|
||||
else setMath(fb, 'x = ' + cur.answer, 'Ответ: x = ' + fmt(cur.answer), false);
|
||||
setMode(true);
|
||||
recordAnswer(false); submitAttempt(false);
|
||||
updateStats();
|
||||
@@ -486,7 +502,9 @@
|
||||
if (r.ok) {
|
||||
solved++; streak++;
|
||||
fb.className = 'tr-feedback ok';
|
||||
fb.innerHTML = ICON.ok + ' <span>Верно!</span> ' + (kat('x = ' + cur.answer, false) || esc('x = ' + fmt(cur.answer)));
|
||||
var lbl = (cur.kind === 'roots' || cur.kind === 'simplify') ? esc(answerLabel())
|
||||
: (kat('x = ' + cur.answer, false) || esc('x = ' + fmt(cur.answer)));
|
||||
fb.innerHTML = ICON.ok + ' <span>Верно!</span> ' + lbl;
|
||||
recordAnswer(true); submitAttempt(true);
|
||||
} else {
|
||||
streak = 0;
|
||||
|
||||
Reference in New Issue
Block a user