Files
Learn_System/backend/scripts/seed_ctmath_rt2223_e2v1.js
T
Maxim Dolgolyov c0dd8ba698 feat(ctmath): пробник РТ-2022/23 этап II (вариант 108)
30 заданий А1–А10 + В1–В20, перенабор по PDF РИКЗ.
8 mc + 20 open + 2 long. Геометрия — текстом. Адаптации заданий
с картинкой: А1 (термометр) → показание числом; А3 (выбор
прямоугольника) → MC о соотношении сторон; А6 (графики) → список
функций (ответ 145); В1 (диаграмма) → данные таблицей в
figure_html (ответ А6Б4В3). Метка 108 уже в VARIANT_LABEL.
Идемпотентный seed, --apply — пользователь.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:00:31 +03:00

391 lines
38 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
'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 = `<table class="task-fig" style="border-collapse:collapse;margin:10px auto;font-size:14px;text-align:center">
<tr>
<th style="border:1px solid #cbd5e1;padding:5px 9px">День недели</th>
<th style="border:1px solid #cbd5e1;padding:5px 9px">Пн</th>
<th style="border:1px solid #cbd5e1;padding:5px 9px">Вт</th>
<th style="border:1px solid #cbd5e1;padding:5px 9px">Ср</th>
<th style="border:1px solid #cbd5e1;padding:5px 9px">Чт</th>
<th style="border:1px solid #cbd5e1;padding:5px 9px">Пт</th>
<th style="border:1px solid #cbd5e1;padding:5px 9px">Сб</th>
</tr>
<tr>
<td style="border:1px solid #cbd5e1;padding:5px 9px">Количество заказов</td>
<td style="border:1px solid #cbd5e1;padding:5px 9px">38</td>
<td style="border:1px solid #cbd5e1;padding:5px 9px">48</td>
<td style="border:1px solid #cbd5e1;padding:5px 9px">42</td>
<td style="border:1px solid #cbd5e1;padding:5px 9px">52</td>
<td style="border:1px solid #cbd5e1;padding:5px 9px">60</td>
<td style="border:1px solid #cbd5e1;padding:5px 9px">66</td>
</tr>
</table>`;
/* ── 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]$.<br>1) $f(x)=2x-1$;<br>2) $f(x)=x^{2}$;<br>3) $f(x)=-x+4$;<br>4) $f(x)=x^{3}$;<br>5) $f(x)=2^{x}$.<br><i>Ответ запишите цифрами в порядке возрастания, без пробелов.</i>`,
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, § 67' },
{ 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$.<br>1) $\dfrac{\pi}{6}$;&emsp;2) $\dfrac{\pi}{12}$;&emsp;3) $\dfrac{\pi}{2}$;&emsp;4) $\dfrac{7\pi}{9}$;&emsp;5) $\dfrac{5\pi}{6}$.<br><i>Ответ запишите цифрами в порядке возрастания, без пробелов.</i>`,
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`В таблице приведено количество заказов в интернет-магазине на протяжении недели (с понедельника по субботу). Установите соответствие между вопросами А–В и ответами 16.<br><b>Вопрос:</b><br>А) В какой день недели было сделано больше всего заказов?<br>Б) В какой день недели было сделано на $14$ заказов меньше, чем в субботу?<br>В) В какой день недели было сделано на $30\%$ меньше заказов, чем в пятницу?<br><b>Ответ:</b><br>1) Понедельник;&emsp;2) Вторник;&emsp;3) Среда;&emsp;4) Четверг;&emsp;5) Пятница;&emsp;6) Суббота.<br><i>Ответ запишите сочетанием букв и цифр, например: А1Б1В4.</i>`,
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 так, чтобы получилось верное утверждение.<br><b>Начало:</b><br>А) Остаток при делении числа $8756$ на $9$ равен …<br>Б) Наибольший остаток, который может получиться при делении натурального числа на $7$, равен …<br>В) Цифра, которую нужно подставить вместо звёздочки, чтобы трёхзначное натуральное число $\overline{37*}$ было кратно $3$, а при делении на $5$ давало в остатке $3$, равна …<br><b>Окончание:</b><br>1) $5$;&emsp;2) $7$;&emsp;3) $6$;&emsp;4) $2$;&emsp;5) $8$;&emsp;6) $9$.<br><i>Ответ запишите сочетанием букв и цифр, например: А1Б1В4.</i>`,
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`Выберите верные утверждения.<br>1) значение выражения $\left(-\sqrt[4]{1{,}6}\right)^{4}$ равно $1{,}6$;<br>2) значение выражения $5-|-2{,}3|$ равно $7{,}3$;<br>3) значение выражения $\left(\dfrac12\right)^{\log_{0{,}5}3}$ равно $-3$;<br>4) значение выражения $\log_3\sqrt[4]{9}$ равно $2$;<br>5) значение выражения $\sqrt{32\sin\dfrac{\pi}{6}}$ равно $4$;<br>6) значение выражения $\sqrt{160^{2}-96^{2}}$ равно $128$.<br><i>Ответ запишите цифрами в порядке возрастания, без пробелов.</i>`,
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$ параллельны.<br>1) любая прямая, перпендикулярная прямой $a$, перпендикулярна плоскости $\alpha$;<br>2) любая прямая, перпендикулярная плоскости $\alpha$, перпендикулярна прямой $a$;<br>3) прямая $a$ не имеет общих точек ни с одной прямой, лежащей в плоскости $\alpha$;<br>4) прямая $a$ имеет общую точку с плоскостью $\alpha$;<br>5) через любую точку пространства можно провести прямую, параллельную прямой $a$;<br>6) любая прямая, параллельная плоскости $\alpha$, параллельна прямой $a$.<br><i>Ответ запишите цифрами в порядке возрастания, без пробелов.</i>`,
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, § 12' },
{ 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}<div class="sol-ans">Ответ: ${ans}</div>`;
if (t.ref) html += `<div class="sol-ref" style="margin-top:6px;font-size:.85em;opacity:.7">Учебник: ${t.ref}</div>`;
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();