feat(trainer): V4.1 группа 1 — 15 новых линейных генераторов (уравнения/неравенства/системы)

Реализована первая волна плана v4 (разнообразие задач по темам). Все «корень-вперёд»,
ответы чистые целые, подробные пошаговые решения, без правок страницы.

Уравнения (linear-eq): lin-both-frac (с делением на a−c≥2), lin-x-denom (a/(x+b)=c),
lin-k-over-x (k/x=c), lin-abs (|ax+b|=c, два корня, kind roots), lin-frac-eq-frac
(дробь=дробь крест-накрест), lin-nested-paren (вложенные скобки), lin-literal (ax+b=mx,
«выразите x»).

Неравенства (inequalities): ineq-both-sides (ax+b<cx+d), ineq-both-flip (смена знака,
c>a), ineq-paren (a(x+b)>c), ineq-count-int (число целых решений lo<x≤hi — двойное
неравенство через compute, обход ограничения одной полупрямой).

Системы (systems): sys-sum-diff (x+y=S, x−y=D), sys-subst (подстановка y=mx+k),
sys-word (текстовая на 2 неизвестных), sys-3x3 (3×3 тизер, answerVars длины 3).

Движок: минимальная аддитивная правка — kind system теперь показывает gen.display
(сюжетную формулировку), если он задан, вместо \begin{cases} (только для sys-word;
существующие sys-2x2/neg без display не затронуты). Итого 79 генераторов.

Верификация: смоук 8314 проверок — каждый генератор инстанцируется по сидам,
самопроверяется, принимает канонический ответ и отвергает неверный, ВСЕ шаги решения
рендерятся в LaTeX; геометрия не задета (6968/0).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-06-26 13:16:37 +03:00
parent 2b7f6ab12f
commit 105e046087
2 changed files with 278 additions and 2 deletions
+4 -2
View File
@@ -354,7 +354,7 @@
latex = exprToLatex(render(gen.srcExpr, env));
} else if (kind === 'inequality') {
latex = exprToLatex(lhsExpr + ' ' + (gen.dispOp || '<') + ' ' + rhsExpr);
} else if (kind === 'system' && system) {
} else if (kind === 'system' && system && !gen.display) {
var rows = [], okrows = true;
for (var si2 = 0; si2 < system.length; si2++) {
var l2 = exprToLatex(system[si2].lhs), r2 = exprToLatex(system[si2].rhs);
@@ -373,7 +373,9 @@
figurePrompt: gen.figurePrompt || null, // краткое условие для режима «читать с чертежа»
lhsExpr: lhsExpr,
rhsExpr: rhsExpr,
display: (kind === 'system' && system)
// система: по умолчанию показываем сами уравнения; но если задан gen.display
// (текстовая/сюжетная формулировка) — показываем его (ученик сам составляет систему).
display: (kind === 'system' && system && !gen.display)
? system.map(function (e) { return prettyMath(e.lhs + ' = ' + e.rhs); }).join('; ')
: prettyMath(render(gen.display || (gen.lhs + (kind === 'inequality' ? (' ' + (gen.dispOp || '<') + ' ') : ' = ') + gen.rhs), env)),
latex: latex,