feat(trainer): страница — ввод систем (пара) + подсказки-разбор ошибок (C1)
Подключение на странице (после редизайна-премиум-консоли): - applyInputMode: kind system в multi (скрыт префикс «x =») + placeholder «напр. x = 2; y = 3» - answerLabel/isLabelKind: для системы показываем пару «x = 2, y = 3» - check(): на неверном ответе зовём TE.analyzeMistake -> адресная подсказка (не разделил на коэффициент / перепутан знак / арифметика), не выдавая ответ; иначе общий текст - смоук страницы 40/40 (системы: пара принята, префикс скрыт; неверный ответ -> разбор-подсказка) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -858,11 +858,12 @@
|
||||
// Префикс «x =» и подсказка ввода зависят от типа задачи.
|
||||
function applyInputMode() {
|
||||
var k = cur && cur.kind;
|
||||
var multi = (k === 'roots' || k === 'simplify' || k === 'inequality');
|
||||
var multi = (k === 'roots' || k === 'simplify' || k === 'inequality' || k === 'system');
|
||||
var eqx = $('tr-eqx'); if (eqx) eqx.style.display = multi ? 'none' : '';
|
||||
$('tr-input').placeholder = (k === 'roots') ? 'корни через ;'
|
||||
: (k === 'simplify') ? 'упрощённое выражение'
|
||||
: (k === 'inequality') ? ('напр. ' + (cur.answerVar || 'x') + ' < 3')
|
||||
: (k === 'system') ? 'напр. x = 2; y = 3'
|
||||
: 'ответ';
|
||||
var tog = $('tr-step-toggle'); if (tog) tog.style.display = canStep() ? '' : 'none';
|
||||
var df = $('tr-difficulty'); if (df) df.style.display = (k === 'word') ? 'none' : '';
|
||||
@@ -874,9 +875,10 @@
|
||||
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);
|
||||
if (cur.kind === 'system' && cur.pair) return (cur.answerVars || ['x', 'y']).map(function (v) { return v + ' = ' + fmt(cur.pair[v]); }).join(', ');
|
||||
return 'x = ' + fmt(cur.answer);
|
||||
}
|
||||
function isLabelKind() { return cur.kind === 'roots' || cur.kind === 'simplify' || cur.kind === 'inequality'; }
|
||||
function isLabelKind() { return cur.kind === 'roots' || cur.kind === 'simplify' || cur.kind === 'inequality' || cur.kind === 'system'; }
|
||||
function updateStats() { $('tr-solved').textContent = solved; $('tr-streak').textContent = streak; }
|
||||
|
||||
function stepHtml(st, n) {
|
||||
@@ -1016,7 +1018,10 @@
|
||||
onSolved();
|
||||
} else {
|
||||
streak = 0;
|
||||
fb.className = 'tr-feedback bad'; fb.innerHTML = ICON.bad + ' Неверно. Разбери решение и реши похожую.';
|
||||
// репетитор (C1): адресная подсказка по типовой ошибке, не выдавая ответ
|
||||
var diag = TE.analyzeMistake ? TE.analyzeMistake(cur, r.value) : null;
|
||||
var msg = diag ? diag.hint : 'Неверно. Разбери решение и реши похожую.';
|
||||
fb.className = 'tr-feedback bad'; fb.innerHTML = ICON.bad + ' ' + esc(msg);
|
||||
$('tr-card').classList.add('tr-wrong');
|
||||
recordAnswer(false); submitAttempt(false);
|
||||
revealSolution();
|
||||
|
||||
Reference in New Issue
Block a user