diff --git a/backend/scripts/seed_ctmath_rt2223_e2v1.js b/backend/scripts/seed_ctmath_rt2223_e2v1.js new file mode 100644 index 0000000..0eb064e --- /dev/null +++ b/backend/scripts/seed_ctmath_rt2223_e2v1.js @@ -0,0 +1,390 @@ +'use strict'; +/* ─────────────────────────────────────────────────────────────────────────── + seed_ctmath_rt2223_e2v1.js + Чистый вариант-пробник для трека exam-prep `ctmath`. + + Источник: РТ–2022/2023, Этап II, Вариант 1 (РИКЗ, «Тематическое + консультирование по математике»). 30 заданий: А1–А10 + В1–В20. + Перенабрано вручную в KaTeX по PDF (визуальное чтение, НЕ OCR): + F:\!Рабочие\ЦТ\Математика\Математика\РТ\2022-2023\МАТ РТ-2 22_23 В1.pdf + + variant=108 — РТ-2022/23 Этап II (этап I — 107, этап III — 109). + Адаптации заданий-«с-картинкой» (та же проверяемая идея, авто-проверка): + • А1 (термометр) → показание дано числом; + • А3 (выбор прямоугольника) → MC о соотношении сторон для квадратного + осевого сечения цилиндра; + • А6 (графики, возрастающие на [-3;3]) → список функций (ответ 145); + • В1 (столбчатая диаграмма) → те же данные в таблице (figure_html), + сопоставление вопрос↔день (ответ А6Б4В3). + + Идемпотентность: upsert по UNIQUE(exam_key, variant, task_idx). + Запуск: + node backend/scripts/seed_ctmath_rt2223_e2v1.js # DRY-RUN (по умолчанию) + node backend/scripts/seed_ctmath_rt2223_e2v1.js --apply # запись в БД + + ⚠️ Массовую запись в БД запускает ПОЛЬЗОВАТЕЛЬ вручную (авто-режим Claude Code + блокирует продакшн-записи). Без --apply ничего не пишется. + ─────────────────────────────────────────────────────────────────────────── */ + +const { DatabaseSync } = require('node:sqlite'); +const path = require('path'); + +const APPLY = process.argv.includes('--apply'); +const EXAM = 'ctmath'; +const VARIANT = 108; +const PROV = 'РТ–2022/2023, Этап II, Вариант 1'; +const R = String.raw; + +const L = ['а', 'б', 'в', 'г', 'д']; +const mc = (...html) => html.map((h, i) => [L[i], h]); + +/* ── figure_html для В1: данные диаграммы (количество заказов по дням). */ +const FIG_B1 = ` + + + + + + + + + + + + + + + + + + +
День неделиПнВтСрЧтПтСб
Количество заказов384842526066
`; + +/* ── 30 заданий ─────────────────────────────────────────────────────────── */ +const TASKS = [ + // ── Часть A: А1–А10 ────────────────────────────────────────────────────── + { idx: 1, type: 'mc', topic: 'numbers', subtopic: 'num-real', diff: 1, + text: R`Термометр со шкалой от $-50\,$ до $50\,^\circ$C показывает температуру $-15\,^\circ$C. Какую температуру (в $^\circ$C) будет показывать термометр, если она увеличится на $20\,^\circ$C?`, + opts: mc('$5^\circ$C', '$15^\circ$C', '$20^\circ$C', '$10^\circ$C', '$0^\circ$C'), + answer: 'а', + sol: R`Повышение температуры на $20\,^\circ$C означает прибавление: $-15+20=5\,(^\circ$C$)$.`, + ref: 'Герасимов «Математика, 6 кл.», гл. 4, § 1' }, + + { idx: 2, type: 'mc', topic: 'numbers', subtopic: 'num-real', diff: 1, + text: R`Среди чисел $62\cdot10^{-5}$, $\ 0{,}62\cdot10^{-4}$, $\ 6{,}2\cdot10^{-4}$, $\ 6{,}2\cdot10^{-5}$, $\ 0{,}62\cdot10^{-3}$ укажите то, которое является стандартным видом числа $0{,}00062$.`, + opts: mc('$62\cdot10^{-5}$', '$0{,}62\cdot10^{-4}$', '$6{,}2\cdot10^{-4}$', '$6{,}2\cdot10^{-5}$', '$0{,}62\cdot10^{-3}$'), + answer: 'в', + sol: R`Стандартный вид числа — это $a\cdot10^{n}$, где $1\le a<10$. Число $0{,}00062=6{,}2\cdot10^{-4}$.`, + ref: 'Арефьева «Алгебра, 7 кл.», гл. 1, § 3' }, + + { idx: 3, type: 'mc', topic: 'stereometry', subtopic: 'ster-rotation', diff: 2, + text: R`Прямоугольник $ABCD$ вращается вокруг стороны $BC$. При этом получается цилиндр, осевым сечением которого является квадрат. Укажите верное соотношение между сторонами прямоугольника.`, + opts: mc('$BC=2AB$', '$BC=AB$', '$AB=2BC$', '$BC=4AB$', '$AB=4BC$'), + answer: 'а', + sol: R`При вращении вокруг $BC$ сторона $BC$ становится высотой цилиндра, а $AB$ — радиусом основания. Осевое сечение — прямоугольник со сторонами $2AB$ (диаметр) и $BC$ (высота). Это квадрат, когда $BC=2AB$.`, + ref: 'Латотин «Геометрия, 11 кл.», разд. 1, § 2' }, + + { idx: 4, type: 'mc', topic: 'equations', subtopic: 'eq-exponential', diff: 2, + text: R`Среди чисел $0$, $1$, $2$, $3$, $4$ укажите то, которое не является решением неравенства $2^{x}<16$.`, + opts: mc('$0$', '$1$', '$2$', '$3$', '$4$'), + answer: 'д', + sol: R`$2^{x}<16=2^{4}$. Так как $2>1$, функция $y=2^{x}$ возрастает, поэтому $x<4$. Из данных чисел этому промежутку не принадлежит только $4$.`, + ref: 'Арефьева «Алгебра, 11 кл.», гл. 2, § 6' }, + + { idx: 5, type: 'mc', topic: 'functions', subtopic: 'fn-properties', diff: 1, + text: R`Найдите значение аргумента, при котором значение функции $f(x)=3-5x$ равно $2$.`, + opts: mc('$0$', '$1$', '$0{,}1$', '$0{,}2$', '$5$'), + answer: 'г', + sol: R`Подставим значение функции: $2=3-5x$, откуда $5x=1$, $x=0{,}2$.`, + ref: 'Арефьева «Алгебра, 7 кл.», гл. 3, § 20' }, + + { idx: 6, type: 'open', topic: 'functions', subtopic: 'fn-properties', diff: 2, + text: R`Укажите номера функций, которые возрастают на промежутке $[-3;3]$.
1) $f(x)=2x-1$;
2) $f(x)=x^{2}$;
3) $f(x)=-x+4$;
4) $f(x)=x^{3}$;
5) $f(x)=2^{x}$.
Ответ запишите цифрами в порядке возрастания, без пробелов.`, + answer: '145', ansShow: '1, 4, 5', + sol: R`$1)$ $2x-1$ — линейная с положительным угловым коэффициентом, возрастает. $\ 2)$ $x^{2}$ на $[-3;3]$ сначала убывает, потом возрастает — нет. $\ 3)$ $-x+4$ убывает. $\ 4)$ $x^{3}$ возрастает на всей оси. $\ 5)$ $2^{x}$ — показательная с основанием $>1$, возрастает. Подходят 1, 4, 5.`, + ref: 'Арефьева «Алгебра, 9 кл.», гл. 2, § 6–7' }, + + { idx: 7, type: 'mc', topic: 'word-sequences', subtopic: 'word-problems', diff: 2, + text: R`От верёвки длиной $3$ м $15$ см отрезали часть так, что отношение оставшейся части к отрезанной равно $4:5$. Найдите (в сантиметрах) длину оставшейся части.`, + opts: mc('$175$', '$140$', '$252$', '$63$', '$132$'), + answer: 'б', + sol: R`Длина верёвки $3$ м $15$ см $=315$ см. Пусть на одну часть приходится $k$ см, тогда $4k+5k=315$, $9k=315$, $k=35$. Оставшаяся часть равна $4k=4\cdot35=140$ (см).`, + ref: 'Герасимов «Математика, 6 кл.», гл. 2, § 5' }, + + { idx: 8, type: 'mc', topic: 'expressions', subtopic: 'expr-fractions', diff: 2, + text: R`Укажите номер выражения, которое показывает, за сколько часов был полностью наполнен бассейн, если за $a$ ч было заполнено $96\%$ объёма бассейна.`, + opts: mc('$\dfrac{a}{96}$', '$\dfrac{26a}{25}$', '$\dfrac{a}{24}$', '$\dfrac{25a}{24}$', '$\dfrac{a}{25}$'), + answer: 'г', + sol: R`Чтобы найти всё число по его проценту, нужно данное число разделить на число процентов и умножить на $100$: $\dfrac{a}{96}\cdot100=\dfrac{100a}{96}=\dfrac{25a}{24}$ (ч).`, + ref: 'Герасимов «Математика, 6 кл.», гл. 2, § 2' }, + + { idx: 9, type: 'mc', topic: 'stereometry', subtopic: 'ster-rotation', diff: 2, + text: R`Площадь сечения шара плоскостью, проходящей через его центр, равна $81\pi$. Найдите объём шара.`, + opts: mc('$364\pi$', '$108\pi$', '$972\pi$', '$243\pi$', '$729\pi$'), + answer: 'в', + sol: R`Сечение через центр — большой круг радиуса $R$: $\pi R^{2}=81\pi$, откуда $R=9$. Объём $V=\dfrac43\pi R^{3}=\dfrac43\pi\cdot729=972\pi$.`, + ref: 'Латотин «Геометрия, 11 кл.», разд. 3, § 6' }, + + { idx: 10, type: 'open', topic: 'trigonometry', subtopic: 'trig-circle', diff: 2, + text: R`Среди чисел $\dfrac{\pi}{6}$, $\ \dfrac{\pi}{12}$, $\ \dfrac{\pi}{2}$, $\ \dfrac{7\pi}{9}$, $\ \dfrac{5\pi}{6}$ выберите номера тех, которые принадлежат области определения выражения $\operatorname{tg}3x$.
1) $\dfrac{\pi}{6}$; 2) $\dfrac{\pi}{12}$; 3) $\dfrac{\pi}{2}$; 4) $\dfrac{7\pi}{9}$; 5) $\dfrac{5\pi}{6}$.
Ответ запишите цифрами в порядке возрастания, без пробелов.`, + answer: '24', ansShow: '2, 4', + sol: R`$\operatorname{tg}3x$ определён при $3x\ne\dfrac{\pi}{2}+\pi n$, то есть $x\ne\dfrac{\pi}{6}+\dfrac{\pi n}{3}$. Проверим: $\dfrac{\pi}{6}$ — исключено; $\dfrac{\pi}{12}$ ($3x=\dfrac{\pi}{4}$) — годится; $\dfrac{\pi}{2}$ ($3x=\dfrac{3\pi}{2}$) — исключено; $\dfrac{7\pi}{9}$ ($3x=\dfrac{7\pi}{3}$) — годится; $\dfrac{5\pi}{6}$ ($3x=\dfrac{5\pi}{2}$) — исключено. Подходят 2 и 4.`, + ref: 'Арефьева «Алгебра, 10 кл.», гл. 1, § 3' }, + + // ── Часть B: В1–В20 ────────────────────────────────────────────────────── + { idx: 11, type: 'long', topic: 'functions', subtopic: 'fn-graphs', diff: 2, + fig: FIG_B1, + text: R`В таблице приведено количество заказов в интернет-магазине на протяжении недели (с понедельника по субботу). Установите соответствие между вопросами А–В и ответами 1–6.
Вопрос:
А) В какой день недели было сделано больше всего заказов?
Б) В какой день недели было сделано на $14$ заказов меньше, чем в субботу?
В) В какой день недели было сделано на $30\%$ меньше заказов, чем в пятницу?
Ответ:
1) Понедельник; 2) Вторник; 3) Среда; 4) Четверг; 5) Пятница; 6) Суббота.
Ответ запишите сочетанием букв и цифр, например: А1Б1В4.`, + answer: 'А6Б4В3', ansShow: 'А6Б4В3', + sol: R`А) Больше всего заказов в субботу ($66$) — ответ 6. Б) $66-14=52$ — это четверг — ответ 4. В) $30\%$ меньше, чем в пятницу: $60\cdot0{,}7=42$ — это среда — ответ 3.`, + ref: 'Герасимов «Математика, 5 кл.», ч. 2, гл. 3, § 16' }, + + { idx: 12, type: 'long', topic: 'numbers', subtopic: 'num-divisibility', diff: 2, + text: R`Для начала каждого из предложений А–В подберите его окончание 1–6 так, чтобы получилось верное утверждение.
Начало:
А) Остаток при делении числа $8756$ на $9$ равен …
Б) Наибольший остаток, который может получиться при делении натурального числа на $7$, равен …
В) Цифра, которую нужно подставить вместо звёздочки, чтобы трёхзначное натуральное число $\overline{37*}$ было кратно $3$, а при делении на $5$ давало в остатке $3$, равна …
Окончание:
1) $5$; 2) $7$; 3) $6$; 4) $2$; 5) $8$; 6) $9$.
Ответ запишите сочетанием букв и цифр, например: А1Б1В4.`, + answer: 'А5Б3В5', ansShow: 'А5Б3В5', + sol: R`А) $8756=972\cdot9+8$, остаток $8$ — окончание 5. Б) при делении на $7$ наибольший остаток равен $6$ — окончание 3. В) кратность $3$ даёт $3+7+*$ кратно $3$, то есть $*\in\{2;5;8\}$; остаток $3$ при делении на $5$ даёт последнюю цифру $3$ или $8$. Общая цифра — $8$ — окончание 5.`, + ref: 'Герасимов «Математика, 5 кл.», ч. 1, гл. 1, § 11; § 13' }, + + { idx: 13, type: 'open', topic: 'expressions', subtopic: 'expr-powers-roots', diff: 3, + text: R`Выберите верные утверждения.
1) значение выражения $\left(-\sqrt[4]{1{,}6}\right)^{4}$ равно $1{,}6$;
2) значение выражения $5-|-2{,}3|$ равно $7{,}3$;
3) значение выражения $\left(\dfrac12\right)^{\log_{0{,}5}3}$ равно $-3$;
4) значение выражения $\log_3\sqrt[4]{9}$ равно $2$;
5) значение выражения $\sqrt{32\sin\dfrac{\pi}{6}}$ равно $4$;
6) значение выражения $\sqrt{160^{2}-96^{2}}$ равно $128$.
Ответ запишите цифрами в порядке возрастания, без пробелов.`, + answer: '156', ansShow: '1, 5, 6', + sol: R`$1)$ $\left(-\sqrt[4]{1{,}6}\right)^{4}=1{,}6$ — верно. $\ 2)$ $5-2{,}3=2{,}7$, не $7{,}3$ — неверно. $\ 3)$ $\left(\dfrac12\right)^{\log_{0{,}5}3}=3$ — неверно. $\ 4)$ $\log_3 3^{1/2}=0{,}5$ — неверно. $\ 5)$ $\sqrt{32\cdot0{,}5}=\sqrt{16}=4$ — верно. $\ 6)$ $\sqrt{(160-96)(160+96)}=\sqrt{64\cdot256}=8\cdot16=128$ — верно. Подходят 1, 5, 6.`, + ref: 'Арефьева «Алгебра, 10 кл.», гл. 2, § 14' }, + + { idx: 14, type: 'open', topic: 'stereometry', subtopic: 'ster-basics', diff: 3, + text: R`Выберите верные утверждения, если известно, что прямая $a$ и плоскость $\alpha$ параллельны.
1) любая прямая, перпендикулярная прямой $a$, перпендикулярна плоскости $\alpha$;
2) любая прямая, перпендикулярная плоскости $\alpha$, перпендикулярна прямой $a$;
3) прямая $a$ не имеет общих точек ни с одной прямой, лежащей в плоскости $\alpha$;
4) прямая $a$ имеет общую точку с плоскостью $\alpha$;
5) через любую точку пространства можно провести прямую, параллельную прямой $a$;
6) любая прямая, параллельная плоскости $\alpha$, параллельна прямой $a$.
Ответ запишите цифрами в порядке возрастания, без пробелов.`, + answer: '235', ansShow: '2, 3, 5', + sol: R`$1)$ неверно. $\ 2)$ верно: прямая, перпендикулярная $\alpha$, перпендикулярна каждой прямой этой плоскости, а значит и параллельной ей прямой $a$. $\ 3)$ верно: $a\parallel\alpha$ означает, что $a$ не имеет общих точек с $\alpha$, поэтому и ни с одной прямой в $\alpha$. $\ 4)$ неверно. $\ 5)$ верно: через любую точку можно провести прямую, параллельную данной. $\ 6)$ неверно. Подходят 2, 3, 5.`, + ref: 'Латотин «Геометрия, 10 кл.», разд. 2, § 5' }, + + { idx: 15, type: 'open', topic: 'planimetry', subtopic: 'plan-triangles', diff: 2, + text: R`В прямоугольном треугольнике $ACB$ угол $C$ равен $90^\circ$, а $CM$ — медиана, проведённая к гипотенузе, причём $CM=2\sqrt2$. Найдите квадрат длины гипотенузы.`, + answer: '32', + sol: R`Медиана прямоугольного треугольника, проведённая к гипотенузе, равна её половине, поэтому $AB=2\,CM=4\sqrt2$. Тогда $AB^{2}=\left(4\sqrt2\right)^{2}=32$.`, + ref: 'Казаков «Геометрия, 8 кл.», гл. 2, § 15' }, + + { idx: 16, type: 'open', topic: 'expressions', subtopic: 'expr-fractions', diff: 3, + text: R`Найдите значение выражения $\dfrac{(x-3)^{2}-4}{x^{2}-4x-5}$ при $x=-1\dfrac15$.`, + answer: '11', + sol: R`Числитель $(x-3)^{2}-4=(x-3-2)(x-3+2)=(x-5)(x-1)$; знаменатель $x^{2}-4x-5=(x-5)(x+1)$. Тогда дробь равна $\dfrac{x-1}{x+1}$. При $x=-\dfrac65$: $\dfrac{-\frac65-1}{-\frac65+1}=\dfrac{-\frac{11}{5}}{-\frac15}=11$.`, + ref: 'Арефьева «Алгебра, 9 кл.», гл. 1, § 1–2' }, + + { idx: 17, type: 'open', topic: 'word-sequences', subtopic: 'seq-progressions', diff: 2, + text: R`Найдите сумму бесконечно убывающей геометрической прогрессии, у которой первый член равен $-56$, а второй член равен $-12\dfrac49$.`, + answer: '-72', + sol: R`Знаменатель $q=\dfrac{b_2}{b_1}=\dfrac{-\frac{112}{9}}{-56}=\dfrac29$. Сумма $S=\dfrac{b_1}{1-q}=\dfrac{-56}{1-\frac29}=\dfrac{-56}{\frac79}=-56\cdot\dfrac97=-72$.`, + ref: 'Арефьева «Алгебра, 9 кл.», гл. 4, § 19' }, + + { idx: 18, type: 'open', topic: 'word-sequences', subtopic: 'word-problems', diff: 3, + text: R`На покупку $39$ л краски для покраски стен выделено $390$ рублей. Краска продаётся в банках объёмом $3$ л (стоимость одной банки $31{,}50$ руб.) и $10$ л (стоимость одной банки $97{,}85$ руб.); расход краски во всех банках одинаков. Какая сумма (в копейках) останется после покупки $39$ л краски, если стоимость покупки не должна превышать выделенной суммы?`, + answer: '195', + sol: R`Выгодно купить $3$ банки по $10$ л и $3$ банки по $3$ л (ровно $39$ л). Стоимость в копейках: $3\cdot9785+3\cdot3150=29355+9450=38805$. Выделено $390$ руб $=39000$ коп. Останется $39000-38805=195$ (коп.).`, + ref: 'Герасимов «Математика, 5 кл.», ч. 1, гл. 2, § 7' }, + + { idx: 19, type: 'open', topic: 'equations', subtopic: 'eq-exponential', diff: 3, + text: R`Найдите значение выражения $36^{\,x_0}$, где $x_0$ — наибольший корень уравнения $36^{x}-10\cdot6^{x}+9=0$.`, + answer: '81', + sol: R`Пусть $t=6^{x}$, тогда $t^{2}-10t+9=0$, $t=1$ или $t=9$. Из $6^{x}=1$: $x=0$; из $6^{x}=9$: $x=\log_6 9$. Наибольший корень $x_0=\log_6 9$, поэтому $36^{x_0}=6^{2\log_6 9}=9^{2}=81$.`, + ref: 'Арефьева «Алгебра, 11 кл.», гл. 2, § 5' }, + + { idx: 20, type: 'open', topic: 'planimetry', subtopic: 'plan-quadrilaterals', diff: 4, + text: R`В равнобедренную трапецию вписана окружность, диаметр которой равен $3{,}5$. Острый угол трапеции равен $30^\circ$. Найдите значение выражения $4\cdot S$, где $S$ — площадь трапеции.`, + answer: '98', + sol: R`Высота трапеции равна диаметру вписанной окружности: $h=3{,}5$. Боковая сторона $=\dfrac{h}{\sin30^\circ}=7$. По свойству описанного четырёхугольника сумма оснований равна сумме боковых сторон: $BC+AD=AB+CD=14$. Площадь $S=\dfrac{BC+AD}{2}\cdot h=\dfrac{14}{2}\cdot3{,}5=24{,}5$. Тогда $4S=98$.`, + ref: 'Казаков «Геометрия, 8 кл.», гл. 2, § 17' }, + + { idx: 21, type: 'open', topic: 'functions', subtopic: 'fn-derivative', diff: 3, + text: R`Найдите минимум функции $f(x)=2+3x-x^{2}-\dfrac{x^{3}}{3}$.`, + answer: '-7', + sol: R`$f'(x)=3-2x-x^{2}=-(x+3)(x-1)$. Нули $x=-3$ и $x=1$; смена знака $f'$ с минуса на плюс в точке $x=-3$ — это точка минимума. $f(-3)=2-9-9-\dfrac{-27}{3}=2-9-9+9=-7$.`, + ref: 'Арефьева «Алгебра, 10 кл.», гл. 3, § 20' }, + + { idx: 22, type: 'open', topic: 'equations', subtopic: 'eq-linear', diff: 2, + text: R`Найдите сумму всех натуральных решений совокупности неравенств $\left[\begin{array}{l}0{,}4x-2\le0,\\2-x>0.\end{array}\right.$`, + answer: '15', + sol: R`$0{,}4x-2\le0\Rightarrow x\le5$; $\ 2-x>0\Rightarrow x<2$. Объединение лучей — множество $(-\infty;5]$. Натуральные решения $1,2,3,4,5$; их сумма равна $15$.`, + ref: 'Арефьева «Алгебра, 8 кл.», гл. 1, § 6' }, + + { idx: 23, type: 'open', topic: 'stereometry', subtopic: 'ster-rotation', diff: 3, + text: R`Объём цилиндра равен $28\pi$. Найдите площадь полной поверхности цилиндра $S$, если радиус его основания равен $2$. В ответ запишите значение выражения $\dfrac{S}{\pi}$.`, + answer: '36', + sol: R`Из $V=\pi r^{2}h$: $28\pi=\pi\cdot4\cdot h$, откуда $h=7$. Площадь полной поверхности $S=2\pi rh+2\pi r^{2}=2\pi\cdot2\cdot7+2\pi\cdot4=28\pi+8\pi=36\pi$. Тогда $\dfrac{S}{\pi}=36$.`, + ref: 'Латотин «Геометрия, 11 кл.», разд. 1, § 2' }, + + { idx: 24, type: 'open', topic: 'equations', subtopic: 'eq-rational', diff: 3, + text: R`Найдите произведение наименьшего целого положительного и наименьшего целого отрицательного решений неравенства $\dfrac{7}{x+6}>\dfrac{1}{x-1}$.`, + answer: '-15', + sol: R`Приведём к виду $\dfrac{6x-13}{(x+6)(x-1)}>0$. Нуль числителя $x=\dfrac{13}{6}$; при $x=-6$ и $x=1$ значения не существуют. Методом интервалов решение — $(-6;1)\cup\left(\dfrac{13}{6};+\infty\right)$. Наименьшее целое положительное решение $3$, наименьшее целое отрицательное $-5$; их произведение $-15$.`, + ref: 'Арефьева «Алгебра, 9 кл.», гл. 3, § 13' }, + + { idx: 25, type: 'open', topic: 'equations', subtopic: 'eq-irrational', diff: 3, + text: R`Найдите увеличенное в $3$ раза произведение наибольшего корня на количество всех корней уравнения $\sqrt[4]{4x^{4}-14x^{2}+8}=x$.`, + answer: '12', + sol: R`Уравнение равносильно системе $4x^{4}-14x^{2}+8=x^{4}$ при $x\ge0$, то есть $3x^{4}-14x^{2}+8=0$, $x\ge0$. Пусть $t=x^{2}$: $3t^{2}-14t+8=0$, $t=4$ или $t=\dfrac23$. Тогда $x=2$ или $x=\sqrt{\dfrac23}$ (неотрицательные). Корней $2$, наибольший корень $2$. Произведение $2\cdot2=4$; увеличенное в $3$ раза — $12$.`, + ref: 'Арефьева «Алгебра, 10 кл.», гл. 2, § 17' }, + + { idx: 26, type: 'open', topic: 'stereometry', subtopic: 'ster-angles-distances', diff: 4, + text: R`Апофема правильной четырёхугольной пирамиды равна $15$, а двугранный угол при ребре основания равен $\arccos\dfrac35$. Найдите объём пирамиды.`, + answer: '1296', + sol: R`Пусть $O$ — центр основания, $K$ — середина ребра основания, $SK=15$ — апофема, $\angle SKO=\arccos\dfrac35$. Тогда $OK=SK\cos\angle SKO=15\cdot\dfrac35=9$, поэтому сторона основания $AD=2\,OK=18$. Высота $SO=\sqrt{SK^{2}-OK^{2}}=\sqrt{225-81}=12$. Объём $V=\dfrac13\cdot AD^{2}\cdot SO=\dfrac13\cdot324\cdot12=1296$.`, + ref: 'Латотин «Геометрия, 11 кл.», разд. 2, § 3' }, + + { idx: 27, type: 'open', topic: 'trigonometry', subtopic: 'trig-equations', diff: 3, + text: R`Найдите (в градусах) сумму различных корней уравнения $\cos^{2}\dfrac{15x}{4}-\sin^{2}\dfrac{15x}{4}=0$ на промежутке $(0^\circ;45^\circ)$.`, + answer: '48', + sol: R`По формуле косинуса двойного аргумента левая часть равна $\cos\dfrac{15x}{2}$. Уравнение $\cos\dfrac{15x}{2}=0$ даёт $\dfrac{15x}{2}=90^\circ+180^\circ n$, $x=12^\circ+24^\circ n$. Промежутку $(0^\circ;45^\circ)$ принадлежат $12^\circ$ и $36^\circ$; их сумма равна $48^\circ$.`, + ref: 'Арефьева «Алгебра, 10 кл.», гл. 1, § 8' }, + + { idx: 28, type: 'open', topic: 'equations', subtopic: 'eq-logarithmic', diff: 4, + text: R`Найдите произведение наименьшего целого решения на количество всех натуральных решений неравенства $\log_5^{2}(x^{2}-3)-3\log_5(x^{2}-3)\le0$.`, + answer: '-110', + sol: R`Пусть $t=\log_5(x^{2}-3)$, тогда $t^{2}-3t\le0$, откуда $0\le t\le3$. Значит, $1\le x^{2}-3\le125$, то есть $4\le x^{2}\le128$ и $x\in\left[-8\sqrt2;-2\right]\cup\left[2;8\sqrt2\right]$. Наименьшее целое решение $-11$ (так как $8\sqrt2\approx11{,}3$). Натуральных решений $2,3,\ldots,11$ — всего $10$. Произведение $-11\cdot10=-110$.`, + ref: 'Арефьева «Алгебра, 11 кл.», гл. 3, § 10' }, + + { idx: 29, type: 'open', topic: 'equations', subtopic: 'eq-rational', diff: 3, + text: R`Удвоенное произведение двух последовательных нечётных натуральных чисел на $262$ больше их суммы. Найдите эти числа. В ответ запишите сумму квадратов этих чисел.`, + answer: '290', + sol: R`Пусть числа $x$ и $x+2$. По условию $2x(x+2)=262+x+(x+2)$, $2x^{2}+4x=264+2x$, $x^{2}+x-132=0$, $x=11$ (корень $-12$ не подходит). Числа $11$ и $13$, сумма квадратов $121+169=290$.`, + ref: 'Арефьева «Алгебра, 8 кл.», гл. 2, § 11' }, + + { idx: 30, type: 'open', topic: 'stereometry', subtopic: 'ster-polyhedra', diff: 5, + text: R`Объём правильной четырёхугольной призмы $ABCDA_1B_1C_1D_1$ равен $540$, а её высота равна $15$. Точка $P$ лежит на диагонали $BD$ так, что $BP:PD=1:2$. Через точки $P$ и $D_1$ параллельно диагонали $AC$ основания $ABCD$ проведена секущая плоскость. Найдите значение выражения $16na$, где $n$ — количество вершин многоугольника, полученного в сечении, $a$ — длина наименьшей стороны этого многоугольника.`, + answer: '340', + sol: R`Сторона основания $s$: из $V=s^{2}\cdot15=540$ получаем $s=6$. Через $P$ проводим прямую, параллельную $AC$; она пересекает $AB$ и $BC$, отсекая $BN=BK=4$. Сечение — пятиугольник $D_1MKNL$, значит $n=5$. Его наименьшие стороны $MK=LN$: из подобия находим $MA=LC=\dfrac{15}{4}$, $KA=NC=2$, тогда $MK=\sqrt{KA^{2}+MA^{2}}=\sqrt{4+\dfrac{225}{16}}=\dfrac{17}{4}$. Значит, $a=\dfrac{17}{4}$ и $16na=16\cdot5\cdot\dfrac{17}{4}=340$.`, + ref: 'Латотин «Геометрия, 10 кл.», разд. 1, § 3' }, +]; + +/* ── Сборка solution_html ────────────────────────────────────────────────── */ +function ansShowOf(t) { + if (t.ansShow != null) return t.ansShow; + if (t.type === 'mc') return `${t.answer})`; + return `$${t.answer}$`; +} +function buildSolution(t) { + const ans = ansShowOf(t); + let html = `${t.sol}
Ответ: ${ans}
`; + if (t.ref) html += `
Учебник: ${t.ref}
`; + return html; +} + +/* ── Самопроверка (повтор логики checkAnswerServer из exam-prep.js) ────────── */ +const EPS = 1e-6; +function srvToNumber(s) { + if (s == null) return NaN; + let t = String(s).trim().replace(/\$/g, '').replace(/\s+/g, '').replace(',', '.'); + const f = t.match(/^(-?\d+(?:\.\d+)?)\s*\/\s*(-?\d+(?:\.\d+)?)$/); + if (f) { const n = Number(f[1]), d = Number(f[2]); return d === 0 ? NaN : n / d; } + const n = Number(t); return Number.isFinite(n) ? n : NaN; +} +function checkAnswerServer(userInput, canonical) { + if (userInput == null || canonical == null) return false; + const c = String(canonical).trim(); + if (/^[а-д]$/.test(c)) return String(userInput).trim().toLowerCase() === c.toLowerCase(); + if (/^[^;]+;[^;]+$/.test(c)) return false; + const cn = srvToNumber(c), un = srvToNumber(userInput); + if (Number.isNaN(cn) || Number.isNaN(un)) return false; + return Math.abs(cn - un) < EPS; +} + +/* ── Валидация набора ──────────────────────────────────────────────────────── */ +const problems = []; +if (TASKS.length !== 30) problems.push(`Ожидалось 30 заданий, получено ${TASKS.length}`); +const seen = new Set(); +for (const t of TASKS) { + if (seen.has(t.idx)) problems.push(`Дубль task_idx=${t.idx}`); seen.add(t.idx); + if (t.idx < 1 || t.idx > 30) problems.push(`task_idx вне 1..30: ${t.idx}`); + if (!['mc', 'open', 'long'].includes(t.type)) problems.push(`#${t.idx}: тип ${t.type}`); + if (t.type === 'mc') { + if (!Array.isArray(t.opts) || t.opts.length !== 5) problems.push(`#${t.idx}: mc должен иметь 5 вариантов`); + if (!t.opts.some(o => o[0] === t.answer)) problems.push(`#${t.idx}: answer "${t.answer}" не среди меток`); + } + if (!t.text || !t.sol) problems.push(`#${t.idx}: пустой text/sol`); + if (t.type !== 'long' && !checkAnswerServer(t.answer, t.answer)) + problems.push(`#${t.idx}: answer "${t.answer}" не проходит self-check (Unicode-минус? пробел?)`); + if (/−/.test(String(t.answer))) problems.push(`#${t.idx}: Unicode-минус в answer`); +} + +/* ── Экспорт для тестов/тиража (без запуска main при require) ──────────────── */ +module.exports = { TASKS, buildSolution, ansShowOf, checkAnswerServer, EXAM, VARIANT, PROV }; +if (require.main !== module) return; + +/* ── Открытие БД ───────────────────────────────────────────────────────────── */ +const DB = path.join(__dirname, '..', 'data', 'learnspace.db'); +const db = new DatabaseSync(DB); + +const track = db.prepare(`SELECT exam_key, variants_count FROM exam_tracks WHERE exam_key=?`).get(EXAM); +if (!track) { console.error(`✗ Трек '${EXAM}' не найден в exam_tracks. Прерывание.`); process.exit(1); } + +/* ── DRY-RUN сводка ────────────────────────────────────────────────────────── */ +console.log(`\n=== seed_ctmath_rt2223_e2v1 (${PROV}) variant=${VARIANT} ===`); +console.log(`Режим: ${APPLY ? 'APPLY (запись)' : 'DRY-RUN (только проверка)'}\n`); + +const byType = TASKS.reduce((a, t) => (a[t.type] = (a[t.type] || 0) + 1, a), {}); +console.log('Типы:', JSON.stringify(byType), ' | с фигурой:', TASKS.filter(t => t.fig).length, '\n'); + +console.log('idx | type | subtopic | d | answer'); +console.log('----+------+-----------------------+---+----------'); +for (const t of TASKS) { + console.log(`${String(t.idx).padStart(3)} | ${t.type.padEnd(4)} | ${String(t.subtopic).padEnd(21)} | ${t.diff} | ${String(t.answer)}`); +} + +if (problems.length) { + console.error(`\n✗ ПРОБЛЕМЫ (${problems.length}):`); + problems.forEach(p => console.error(' - ' + p)); + console.error('\nЗапись отменена из-за ошибок валидации.'); + db.close(); + process.exit(1); +} +console.log('\n✓ Валидация и self-check ответов пройдены (30/30).'); + +/* ── APPLY: upsert ─────────────────────────────────────────────────────────── */ +if (!APPLY) { + console.log('\nDRY-RUN: ничего не записано. Для записи: node backend/scripts/seed_ctmath_rt2223_e2v1.js --apply\n'); + db.close(); + process.exit(0); +} + +const upsert = db.prepare(` + INSERT INTO exam_tasks + (exam_key, variant, task_idx, task_type, text_html, figure_html, + opts_json, answer, solution_html, topic, subtopic, difficulty) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + ON CONFLICT(exam_key, variant, task_idx) DO UPDATE SET + task_type = excluded.task_type, + text_html = excluded.text_html, + figure_html = excluded.figure_html, + opts_json = excluded.opts_json, + answer = excluded.answer, + solution_html = excluded.solution_html, + topic = excluded.topic, + subtopic = excluded.subtopic, + difficulty = excluded.difficulty +`); + +let n = 0; +db.exec('BEGIN'); +try { + for (const t of TASKS) { + upsert.run( + EXAM, VARIANT, t.idx, t.type, + t.text, + t.fig || null, + t.type === 'mc' ? JSON.stringify(t.opts) : null, + t.answer, + buildSolution(t), + t.topic, t.subtopic, t.diff + ); + n++; + } + const distinct = db.prepare(`SELECT COUNT(DISTINCT variant) c FROM exam_tasks WHERE exam_key=? AND variant BETWEEN 101 AND 1999`).get(EXAM).c; + db.prepare(`UPDATE exam_tracks SET variants_count=? WHERE exam_key=?`).run(distinct, EXAM); + db.exec('COMMIT'); + console.log(`\n✓ Записано/обновлено ${n} заданий (variant=${VARIANT}).`); + console.log(`✓ exam_tracks.variants_count = ${distinct} (различных вариантов).`); + console.log(`\nПробник доступен: /exam-prep/ctmath → «Варианты» → «РТ-2022/23 · этап II».\n`); +} catch (e) { + db.exec('ROLLBACK'); + console.error('\n✗ Ошибка записи, откат транзакции:', e.message); + process.exitCode = 1; +} +db.close();