From 753bd7e289b0ae69e8ed485c7f8eb6964f897b23 Mon Sep 17 00:00:00 2001 From: Maxim Dolgolyov Date: Mon, 29 Jun 2026 19:30:23 +0300 Subject: [PATCH] =?UTF-8?q?feat(trainer):=20=D0=BE=D0=B1=D0=BE=D0=B7=D0=BD?= =?UTF-8?q?=D0=B0=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=BE=20=D1=82?= =?UTF-8?q?=D0=B5=D0=BC=D0=B0=D0=BC=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE?= =?UTF-8?q?=20=C2=ABx=C2=BB=20=E2=80=94=20=D0=B4=D0=B2=D0=B8=D0=B6=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20S/t/v,=20=D0=BF=D1=80=D0=BE=D1=86=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D1=8B=20p,=20=D0=BF=D1=80=D0=B8=D0=B1=D1=8B=D0=BB?= =?UTF-8?q?=D1=8C/=D1=81=D0=BC=D0=B5=D1=81=D1=8C=20p?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Расширил answerSym на темы, где есть стандартная латинская буква (где это уместно и не конфликтует с обозначением из условия): - Движение: app-move-dist→S (путь), app-move-time→t, app-move-speed→v, app-meet→t, app-overtake→t, app-work-joint→t. - Проценты: pct-what→p, pct-change→p; смеси app-mix-blend→p; прибыль app-profit-pct→p. Линейные/пропорции/неравенства/системы оставлены на x/y (это и есть переменные); углы — x (греческая буква ломала бы KaTeX); НОД/дроби/десятичные — x (нет чистого однобуквенного обозначения). app-upstream и n-й член прогрессии оставлены на x (буква совпала бы с данным из условия: v собств. скорости, a₁/b₁). Итого 42 генератора с обозначением искомой (S/P/C/L/d/p/t/v/b/c/k/n/q). Префикс ввода, подпись ответа и шаги решения используют его. Проверка: 1680 экземпляров, 0 проблем (latex валиден, нет остаточного x/кириллицы, ответ принимается); смоук v41 99634. Co-Authored-By: Claude Opus 4.8 (1M context) --- frontend/js/trainer/generators.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/frontend/js/trainer/generators.js b/frontend/js/trainer/generators.js index 2b27571..eccf529 100644 --- a/frontend/js/trainer/generators.js +++ b/frontend/js/trainer/generators.js @@ -245,7 +245,7 @@ /* сколько % составляет a от b */ { id: 'pct-what', topic: 'percents', order: 2, subject: 'algebra', grade: 7, kind: 'compute', - title: 'Сколько процентов', + title: 'Сколько процентов', answerSym: 'p', pick: { pidx: [2, 10], bbase: [1, 8] }, derive: { p: 'pidx*5', b: 'bbase*20', a: 'pidx*bbase' }, lhs: 'x', rhs: '100*{a}/{b}', display: 'Сколько процентов составляет {a} от {b}?', @@ -673,7 +673,7 @@ /* путь = скорость × время */ { id: 'app-move-dist', topic: 'applied', order: 1, subject: 'algebra', grade: 7, kind: 'compute', - title: 'Путь (движение)', + title: 'Путь (движение)', answerSym: 'S', pick: { v: [10, 90], t: [2, 9] }, derive: { val: 'v*t' }, lhs: 'x', rhs: '{v}*{t}', display: 'Автомобиль ехал {t} ч со скоростью {v} км/ч. Какой путь он проехал (в км)?', answerVar: 'x', answer: 'val', integerAnswer: true, @@ -686,7 +686,7 @@ /* время = путь / скорость */ { id: 'app-move-time', topic: 'applied', order: 2, subject: 'algebra', grade: 7, kind: 'compute', - title: 'Время (движение)', + title: 'Время (движение)', answerSym: 't', pick: { v: [10, 90], t: [2, 9] }, derive: { S: 'v*t', val: 't' }, lhs: 'x', rhs: '{S}/{v}', display: 'Расстояние между городами {S} км. Автомобиль едет со скоростью {v} км/ч. За сколько часов он доедет?', answerVar: 'x', answer: 'val', integerAnswer: true, @@ -699,7 +699,7 @@ /* скорость = путь / время */ { id: 'app-move-speed', topic: 'applied', order: 3, subject: 'algebra', grade: 7, kind: 'compute', - title: 'Скорость (движение)', + title: 'Скорость (движение)', answerSym: 'v', pick: { v: [10, 90], t: [2, 9] }, derive: { S: 'v*t', val: 'v' }, lhs: 'x', rhs: '{S}/{t}', display: 'Поезд прошёл {S} км за {t} ч. Найдите его среднюю скорость (км/ч).', answerVar: 'x', answer: 'val', integerAnswer: true, @@ -1459,7 +1459,7 @@ /* на сколько процентов изменилось */ { id: 'pct-change', topic: 'percents', order: 6, subject: 'algebra', grade: 7, kind: 'compute', - title: 'На сколько процентов выросло', + title: 'На сколько процентов выросло', answerSym: 'p', pick: { abase: [2, 12], pidx: [1, 10] }, derive: { a: 'abase*20', p: 'pidx*5', b: 'abase*(100 + pidx*5)/5', val: 'pidx*5' }, lhs: 'x', rhs: '100*({b} - {a})/{a}', display: 'Цена выросла с {a} руб до {b} руб. На сколько процентов выросла цена?', @@ -1521,7 +1521,7 @@ /* встречное движение */ { id: 'app-meet', topic: 'applied', order: 6, subject: 'algebra', grade: 7, kind: 'compute', - title: 'Встречное движение', + title: 'Встречное движение', answerSym: 't', pick: { u: [20, 70], v: [20, 70], t: [2, 6] }, derive: { S: '(u + v)*t', val: 't' }, lhs: 'x', rhs: '{S}/({u}+{v})', display: 'Из двух городов навстречу выехали машины со скоростями {u} и {v} км/ч. Расстояние между городами {S} км. Через сколько часов они встретятся?', @@ -1536,7 +1536,7 @@ /* движение вдогонку */ { id: 'app-overtake', topic: 'applied', order: 7, subject: 'algebra', grade: 8, kind: 'compute', - title: 'Движение вдогонку', + title: 'Движение вдогонку', answerSym: 't', pick: { u: [10, 40], g: [5, 30], t: [2, 6] }, derive: { v: 'u + g', d: 'g*t', val: 't' }, lhs: 'x', rhs: '{d}/({v}-{u})', display: 'Велосипедист едет со скоростью {u} км/ч, мотоциклист — со скоростью {v} км/ч, отставая на {d} км. Через сколько часов мотоциклист догонит велосипедиста?', @@ -1565,7 +1565,7 @@ /* совместная работа */ { id: 'app-work-joint', topic: 'applied', order: 9, subject: 'algebra', grade: 8, kind: 'compute', - title: 'Совместная работа', + title: 'Совместная работа', answerSym: 't', pick: { t: [2, 6], a: [3, 14] }, constraint: 'a > t', derive: { b: 'a*t/(a - t)', val: 't' }, require: 'mod(a*t, a - t) == 0 && b >= 2 && b <= 60', @@ -1581,7 +1581,7 @@ /* смешивание двух растворов */ { id: 'app-mix-blend', topic: 'applied', order: 10, subject: 'algebra', grade: 9, kind: 'compute', - title: 'Концентрация смеси', + title: 'Концентрация смеси', answerSym: 'p', pick: { m1: [1, 6], m2: [1, 6], p1: [10, 40], p2: [50, 90] }, derive: { val: '(m1*p1 + m2*p2)/(m1 + m2)' }, require: 'mod(m1*p1 + m2*p2, m1 + m2) == 0', @@ -1597,7 +1597,7 @@ /* прибыль в процентах */ { id: 'app-profit-pct', topic: 'applied', order: 11, subject: 'algebra', grade: 8, kind: 'compute', - title: 'Прибыль в процентах', + title: 'Прибыль в процентах', answerSym: 'p', pick: { cbase: [1, 9], pidx: [1, 10] }, derive: { c: 'cbase*100', p: 'pidx*5', s: 'cbase*(100 + pidx*5)', val: 'pidx*5' }, lhs: 'x', rhs: '100*({s} - {c})/{c}', display: 'Товар купили за {c} руб, а продали за {s} руб. Сколько процентов прибыли получили?',