feat(ctmath): пробник РТ-2022/23 этап III (вариант 109)

30 заданий А1–А10 + В1–В20, перенабор по PDF РИКЗ.
8 mc + 19 open + 3 long. Геометрия — текстом, А6 (чтение графика)
— inline-SVG в figure_html (кусочно-линейная функция, все 5
утверждений и ответ 134 согласованы). Метка 109 уже в
VARIANT_LABEL. Идемпотентный seed, --apply — пользователь.
Завершает набор РТ-2022/23 (107/108/109).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-06-19 11:07:33 +03:00
parent c0dd8ba698
commit f856f84de0
+387
View File
@@ -0,0 +1,387 @@
'use strict';
/* ───────────────────────────────────────────────────────────────────────────
seed_ctmath_rt2223_e3v1.js
Чистый вариант-пробник для трека exam-prep `ctmath`.
Источник: РТ–2022/2023, Этап III, Вариант 1 (РИКЗ, «Тематическое
консультирование по математике»). 30 заданий: А1–А10 + В1–В20.
Перенабрано вручную в KaTeX по PDF (визуальное чтение, НЕ OCR):
F:\!Рабочие\ЦТ\Математика\Математика\РТ\2022-2023\МАТ РТ-3 22_23 В1.pdf
variant=109 — РТ-2022/23 Этап III (этап I — 107, этап II — 108).
Геометрия закодирована текстом. Единственное задание с обязательным
чертежом — А6 (чтение графика): кусочно-линейная функция на [-5;6]
воспроизведена inline-SVG в figure_html (как у math9 и варианта 106);
все 5 утверждений и ответ (134) согласованы с реконструкцией.
Идемпотентность: upsert по UNIQUE(exam_key, variant, task_idx).
Запуск:
node backend/scripts/seed_ctmath_rt2223_e3v1.js # DRY-RUN (по умолчанию)
node backend/scripts/seed_ctmath_rt2223_e3v1.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 = 109;
const PROV = 'РТ–2022/2023, Этап III, Вариант 1';
const R = String.raw;
const L = ['а', 'б', 'в', 'г', 'д'];
const mc = (...html) => html.map((h, i) => [L[i], h]);
/* ── SVG-график для А6: кусочно-линейная функция на [-5;6] через точки
(-5,3),(-2,-5),(4,5),(6,-1). Три нуля; min=-5 (x=-2), max=5 (x=4);
возрастает на (-2;4) → целые с f'>0: -1,0,1,2,3 (сумма 5); f'(-4)<0.
Цвета — только в SVG-стоки. */
const FIG_A6 = `<svg class="task-fig" viewBox="0 0 360 244" width="360" height="244" xmlns="http://www.w3.org/2000/svg" style="max-width:360px;width:100%;height:auto;display:block;margin:10px auto">
<g stroke="#e2e8f0" stroke-width="1">
<line x1="37" y1="29" x2="37" y2="219"/><line x1="63" y1="29" x2="63" y2="219"/><line x1="89" y1="29" x2="89" y2="219"/><line x1="115" y1="29" x2="115" y2="219"/><line x1="141" y1="29" x2="141" y2="219"/><line x1="167" y1="29" x2="167" y2="219"/><line x1="193" y1="29" x2="193" y2="219"/><line x1="219" y1="29" x2="219" y2="219"/><line x1="245" y1="29" x2="245" y2="219"/><line x1="271" y1="29" x2="271" y2="219"/><line x1="297" y1="29" x2="297" y2="219"/><line x1="323" y1="29" x2="323" y2="219"/>
<line x1="37" y1="29" x2="323" y2="29"/><line x1="37" y1="48" x2="323" y2="48"/><line x1="37" y1="67" x2="323" y2="67"/><line x1="37" y1="86" x2="323" y2="86"/><line x1="37" y1="105" x2="323" y2="105"/><line x1="37" y1="124" x2="323" y2="124"/><line x1="37" y1="143" x2="323" y2="143"/><line x1="37" y1="162" x2="323" y2="162"/><line x1="37" y1="181" x2="323" y2="181"/><line x1="37" y1="200" x2="323" y2="200"/><line x1="37" y1="219" x2="323" y2="219"/>
</g>
<line x1="24" y1="124" x2="348" y2="124" stroke="#334155" stroke-width="1.5"/>
<line x1="167" y1="232" x2="167" y2="16" stroke="#334155" stroke-width="1.5"/>
<polygon points="348,124 340,120 340,128" fill="#334155"/>
<polygon points="167,16 163,24 171,24" fill="#334155"/>
<polyline points="37,67 115,219 271,29 323,143" fill="none" stroke="#2563eb" stroke-width="2.5" stroke-linejoin="round" stroke-linecap="round"/>
<text x="350" y="120" font-size="13" font-style="italic" fill="#334155">x</text>
<text x="172" y="26" font-size="13" font-style="italic" fill="#334155">y</text>
<text x="155" y="138" font-size="12" fill="#334155">O</text>
<text x="189" y="138" font-size="12" fill="#334155">1</text>
<text x="151" y="109" font-size="12" fill="#334155">1</text>
<text x="276" y="26" font-size="13" font-style="italic" fill="#2563eb">y=f(x)</text>
</svg>`;
/* ── 30 заданий ─────────────────────────────────────────────────────────── */
const TASKS = [
// ── Часть A: А1–А10 ──────────────────────────────────────────────────────
{ idx: 1, type: 'mc', topic: 'expressions', subtopic: 'expr-polynomials', diff: 1,
text: R`Укажите номер выражения, являющегося разностью квадратов выражений $m$ и $7n$.`,
opts: mc('$(m-7n)^{2}$', '$\left(\dfrac{m}{7n}\right)^{2}$', '$m^{2}-(7n)^{2}$', '$m-(7n)^{2}$', '$m^{2}-7n^{2}$'),
answer: 'в',
sol: R`Разность квадратов выражений $m$ и $7n$ — это $m^{2}-(7n)^{2}$.`,
ref: 'Арефьева «Алгебра, 7 кл.», гл. 2, § 1213' },
{ idx: 2, type: 'mc', topic: 'trigonometry', subtopic: 'trig-identities', diff: 2,
text: R`Из углов $180^\circ$, $240^\circ$, $225^\circ$, $210^\circ$, $270^\circ$ выберите тот, тангенс которого равен $\sqrt3$.`,
opts: mc('$180^\circ$', '$240^\circ$', '$225^\circ$', '$210^\circ$', '$270^\circ$'),
answer: 'б',
sol: R`$\operatorname{tg}240^\circ=\operatorname{tg}(180^\circ+60^\circ)=\operatorname{tg}60^\circ=\sqrt3$. У остальных данных углов тангенс не равен $\sqrt3$.`,
ref: 'Арефьева «Алгебра, 10 кл.», гл. 1, § 3' },
{ idx: 3, type: 'mc', topic: 'planimetry', subtopic: 'plan-circle', diff: 2,
text: R`Вписанный угол $MKN$ опирается на дугу $MN$, градусная мера которой (заключённой внутри этого угла) равна $88^\circ$. Найдите градусную меру угла $MKN$.`,
opts: mc('$44^\circ$', '$24^\circ$', '$46^\circ$', '$88^\circ$', '$22^\circ$'),
answer: 'а',
sol: R`Вписанный угол равен половине дуги, на которую он опирается: $\angle MKN=\dfrac12\cdot88^\circ=44^\circ$.`,
ref: 'Казаков «Геометрия, 8 кл.», гл. 4, § 27' },
{ idx: 4, type: 'mc', topic: 'equations', subtopic: 'eq-rational', diff: 2,
text: R`Укажите номер уравнения, корнем которого является число $-1$.`,
opts: mc('$\dfrac{5}{x+1}=0$', '$x^{2}+1=0$', '$3^{\,x-1}=1$', '$\log_7(x+2)=0$', '$\sqrt{x-1}=0$'),
answer: 'г',
sol: R`Подставим $x=-1$: $\dfrac{5}{0}$ не имеет смысла; $\ (-1)^{2}+1=2\ne0$; $\ 3^{-2}\ne1$; $\ \log_7(-1+2)=\log_7 1=0$ — верно; $\ \sqrt{-2}$ не имеет смысла. Корень $-1$ имеет только уравнение под номером 4.`,
ref: 'Арефьева «Алгебра, 7 кл.», гл. 3, § 15' },
{ idx: 5, type: 'mc', topic: 'functions', subtopic: 'fn-properties', diff: 2,
text: R`Среди значений аргумента $x$, равных $1{,}5$; $0{,}4$; $1{,}2$; $0{,}6$; $2{,}5$, укажите то, при котором значение функции $f(x)=\dfrac2x$ меньше $1$.`,
opts: mc('$1{,}5$', '$0{,}4$', '$1{,}2$', '$0{,}6$', '$2{,}5$'),
answer: 'д',
sol: R`$f(x)=\dfrac2x<1$ при $x>2$ (для положительных $x$). Из данных чисел этому условию удовлетворяет только $2{,}5$: $\dfrac{2}{2{,}5}=0{,}8<1$.`,
ref: 'Арефьева «Алгебра, 8 кл.», гл. 3, § 13' },
{ idx: 6, type: 'open', topic: 'functions', subtopic: 'fn-properties', diff: 3,
fig: FIG_A6,
text: R`На рисунке изображён график функции $y=f(x)$, определённой на промежутке $[-5;6]$. Укажите номера верных утверждений.<br>1) функция имеет три нуля;<br>2) $f'(-4)=0$;<br>3) максимум функции равен $5$;<br>4) сумма целых значений аргумента, при которых $f'(x)>0$, равна $5$;<br>5) наименьшее значение функции на промежутке $[-5;6]$ равно $-2$.<br><i>Ответ запишите цифрами в порядке возрастания, без пробелов.</i>`,
answer: '134', ansShow: '1, 3, 4',
sol: R`$1)$ верно: график пересекает ось абсцисс в трёх точках. $\ 2)$ неверно: при $x=-4$ функция убывает, $f'(-4)<0$. $\ 3)$ верно: наибольшее (максимум) значение функции равно $5$. $\ 4)$ верно: функция возрастает на $(-2;4)$, целые значения с $f'(x)>0$ — это $-1,0,1,2,3$, их сумма $5$. $\ 5)$ неверно: наименьшее значение функции равно $-5$.`,
ref: 'Арефьева «Алгебра, 9 кл.», гл. 2, § 7; «Алгебра, 10 кл.», гл. 3, § 20' },
{ idx: 7, type: 'mc', topic: 'word-sequences', subtopic: 'word-problems', diff: 2,
text: R`Пять рабочих могут выполнить работу за $14$ дней. За сколько дней могут выполнить эту же работу $7$ рабочих?`,
opts: mc('$20$', '$16$', '$12$', '$10$', '$9$'),
answer: 'г',
sol: R`Зависимость между числом рабочих и числом дней обратно пропорциональная: $\dfrac{5}{7}=\dfrac{x}{14}$, откуда $x=\dfrac{5\cdot14}{7}=10$ (дней).`,
ref: 'Герасимов «Математика, 6 кл.», гл. 2, § 45' },
{ idx: 8, type: 'mc', topic: 'trigonometry', subtopic: 'trig-identities', diff: 2,
text: R`Найдите значение выражения $6\cos\alpha$, если $\sin\alpha=\dfrac{\sqrt2}{3}$ и $\dfrac{\pi}{2}<\alpha<\pi$.`,
opts: mc('$2\sqrt7$', '$-2\sqrt{11}$', '$-2\sqrt7$', '$2\sqrt{11}$', '$-2\sqrt2$'),
answer: 'в',
sol: R`Из $\sin^{2}\alpha+\cos^{2}\alpha=1$: $\cos^{2}\alpha=1-\dfrac29=\dfrac79$. Во второй четверти $\cos\alpha<0$, поэтому $\cos\alpha=-\dfrac{\sqrt7}{3}$. Тогда $6\cos\alpha=-2\sqrt7$.`,
ref: 'Арефьева «Алгебра, 10 кл.», гл. 1, § 4' },
{ idx: 9, type: 'mc', topic: 'stereometry', subtopic: 'ster-rotation', diff: 2,
text: R`Прямоугольник, у которого длины сторон равны $3$ и $6$, вращается вокруг большей стороны. Найдите площадь боковой поверхности цилиндра, полученного в результате вращения.`,
opts: mc('$54\pi$', '$18\pi$', '$108\pi$', '$45\pi$', '$36\pi$'),
answer: 'д',
sol: R`При вращении вокруг большей стороны ($6$) она становится высотой цилиндра, а меньшая ($3$) — радиусом основания. Площадь боковой поверхности $S=2\pi rh=2\pi\cdot3\cdot6=36\pi$.`,
ref: 'Латотин «Геометрия, 11 кл.», разд. 1, § 2' },
{ idx: 10, type: 'open', topic: 'trigonometry', subtopic: 'trig-circle', diff: 2,
text: R`Среди данных утверждений укажите номера верных.<br>1) $\operatorname{arctg}(-1)=\dfrac{3\pi}{4}$;<br>2) $\sin\dfrac{\pi}{4}>\sin\dfrac{\pi}{6}$;<br>3) $\cos\dfrac{\pi}{3}>\cos\dfrac{\pi}{6}$;<br>4) $\operatorname{ctg}\dfrac{17\pi}{12}<0$;<br>5) $\arccos\left(-\dfrac12\right)=\dfrac{2\pi}{3}$.<br><i>Ответ запишите цифрами в порядке возрастания, без пробелов.</i>`,
answer: '25', ansShow: '2, 5',
sol: R`$1)$ неверно: $\operatorname{arctg}(-1)=-\dfrac{\pi}{4}$. $\ 2)$ верно: $\dfrac{\sqrt2}{2}>\dfrac12$. $\ 3)$ неверно: $\dfrac12<\dfrac{\sqrt3}{2}$. $\ 4)$ неверно: $\operatorname{ctg}\dfrac{17\pi}{12}=\operatorname{ctg}\dfrac{5\pi}{12}>0$. $\ 5)$ верно: $\arccos\left(-\dfrac12\right)=\dfrac{2\pi}{3}$. Подходят 2 и 5.`,
ref: 'Арефьева «Алгебра, 10 кл.», гл. 1, § 7; § 9' },
// ── Часть B: В1–В20 ──────────────────────────────────────────────────────
{ idx: 11, type: 'long', topic: 'word-sequences', subtopic: 'seq-progressions', diff: 3,
text: R`Для начала каждого из предложений А–В подберите его окончание 1–6 так, чтобы получилось верное утверждение.<br><b>Начало:</b><br>А) Сумма шестнадцати первых членов арифметической прогрессии $(a_n)$, у которой $a_1=-2$, $a_{16}=43$, равна …<br>Б) Сумма пяти первых членов геометрической прогрессии $(b_n)$, у которой $b_1=-4$, $q=2$, равна …<br>В) Сумма бесконечно убывающей геометрической прогрессии, у которой $b_1=-208$, $q=\dfrac15$, равна …<br><b>Окончание:</b><br>1) $-260$;&emsp;2) $-110$;&emsp;3) $328$;&emsp;4) $-832$;&emsp;5) $-124$;&emsp;6) $252$.<br><i>Ответ запишите сочетанием букв и цифр, например: А1Б1В4.</i>`,
answer: 'А3Б5В1', ansShow: 'А3Б5В1',
sol: R`А) $S_{16}=\dfrac{a_1+a_{16}}{2}\cdot16=\dfrac{-2+43}{2}\cdot16=41\cdot8=328$ — окончание 3. Б) $S_5=\dfrac{b_1(q^{5}-1)}{q-1}=\dfrac{-4(32-1)}{1}=-124$ — окончание 5. В) $S=\dfrac{b_1}{1-q}=\dfrac{-208}{1-\frac15}=-208\cdot\dfrac54=-260$ — окончание 1.`,
ref: 'Арефьева «Алгебра, 9 кл.», гл. 4, § 16; § 1819' },
{ idx: 12, type: 'open', topic: 'stereometry', subtopic: 'ster-angles-distances', diff: 3,
text: R`$ABCDA_1B_1C_1D_1$ — прямоугольный параллелепипед. Выберите верные утверждения.<br>1) расстояние от точки $B$ до плоскости грани $A_1D_1C_1B_1$ равно длине отрезка $BB_1$;<br>2) расстояние между плоскостями граней $AA_1D_1D$ и $BB_1C_1C$ равно длине отрезка $AB$;<br>3) расстояние между прямой $D_1C_1$ и плоскостью грани $ABCD$ равно длине отрезка $DC_1$;<br>4) расстояние от точки $C$ до плоскости грани $AA_1D_1D$ равно длине отрезка $CC_1$;<br>5) расстояние между плоскостями граней $AA_1B_1B$ и $DD_1C_1C$ равно длине отрезка $B_1D$;<br>6) расстояние между прямой $DC_1$ и плоскостью грани $AA_1B_1B$ равно длине отрезка $B_1C_1$.<br><i>Ответ запишите цифрами в порядке возрастания, без пробелов.</i>`,
answer: '126', ansShow: '1, 2, 6',
sol: R`Расстояние от точки (прямой) до плоскости — длина перпендикуляра. $\ 1)$ верно: $BB_1\perp$ верхней грани. $\ 2)$ верно: $AB$ — общий перпендикуляр параллельных граней. $\ 3)$ неверно: расстояние равно длине бокового ребра, а не диагонали $DC_1$. $\ 4)$ неверно: расстояние равно $CD$, а не $CC_1$. $\ 5)$ неверно: расстояние равно $AD$, а не диагонали $B_1D$. $\ 6)$ верно: $B_1C_1$ — перпендикуляр между $DC_1$ и гранью $AA_1B_1B$. Подходят 1, 2, 6.`,
ref: 'Латотин «Геометрия, 10 кл.», разд. 3, § 8' },
{ idx: 13, type: 'long', topic: 'functions', subtopic: 'fn-graphs', diff: 2,
text: R`На рисунке изображён график функции $f(x)=|x|$ и отмечена точка $A(-2;2)$, принадлежащая этому графику. Для начала каждого из предложений А–В подберите его окончание 1–6 так, чтобы получилось верное утверждение.<br><b>Начало:</b><br>А) Если график функции $f(x)=|x|$ сдвинуть на $6$ единиц вправо вдоль оси абсцисс, то точка $A$ будет иметь координаты …<br>Б) Если график функции $f(x)=|x|$ сдвинуть на $8$ единиц вниз вдоль оси ординат, то точка $A$ будет иметь координаты …<br>В) Если график функции $f(x)=|x|$ сдвинуть на $2$ единицы влево вдоль оси абсцисс и на $3$ единицы вверх вдоль оси ординат, то точка $A$ будет иметь координаты …<br><b>Окончание:</b><br>1) $(-8;2)$;&emsp;2) $(0;-1)$;&emsp;3) $(-2;-6)$;&emsp;4) $(-2;10)$;&emsp;5) $(4;2)$;&emsp;6) $(-4;5)$.<br><i>Ответ запишите сочетанием букв и цифр, например: А1Б1В4.</i>`,
answer: 'А5Б3В6', ansShow: 'А5Б3В6',
sol: R`А) сдвиг на $6$ вправо: $(-2+6;2)=(4;2)$ — окончание 5. Б) сдвиг на $8$ вниз: $(-2;2-8)=(-2;-6)$ — окончание 3. В) сдвиг на $2$ влево и $3$ вверх: $(-2-2;2+3)=(-4;5)$ — окончание 6.`,
ref: 'Арефьева «Алгебра, 9 кл.», гл. 2, § 9' },
{ idx: 14, type: 'long', topic: 'numbers', subtopic: 'num-divisibility', diff: 2,
text: R`Для начала каждого из предложений А–В подберите его окончание 1–6 так, чтобы получилось верное утверждение, если известно, что $2023=7\cdot17\cdot17$.<br><b>Начало:</b><br>А) Наибольший простой делитель числа $2023$ равен …<br>Б) Количество различных натуральных делителей числа $2023$ равно …<br>В) Наибольший общий делитель чисел $117$ и $2023$ равен …<br><b>Окончание:</b><br>1) $5$;&emsp;2) $17$;&emsp;3) $7$;&emsp;4) $51$;&emsp;5) $1$;&emsp;6) $6$.<br><i>Ответ запишите сочетанием букв и цифр, например: А1Б1В4.</i>`,
answer: 'А2Б6В5', ansShow: 'А2Б6В5',
sol: R`А) простые делители числа $2023$ — это $7$ и $17$, наибольший $17$ — окончание 2. Б) делители $2023$: $1,7,17,119,289,2023$ — всего $6$ — окончание 6. В) $117=3^{2}\cdot13$, у чисел $117$ и $2023$ общих простых делителей нет, поэтому их наибольший общий делитель равен $1$ — окончание 5.`,
ref: 'Герасимов «Математика, 5 кл.», ч. 1, гл. 1, § 12; § 14' },
{ idx: 15, type: 'open', topic: 'planimetry', subtopic: 'plan-triangles', diff: 2,
text: R`В треугольнике $ABC$ точка $M$ лежит на стороне $AC$, точка $N$ — на стороне $BC$, причём $MN\parallel AB$, $CM=24$, $CN=12$, $NB=3$. Найдите длину стороны $AC$.`,
answer: '30',
sol: R`Так как $MN\parallel AB$, треугольник $MNC$ подобен треугольнику $ABC$. Тогда $\dfrac{CM}{CA}=\dfrac{CN}{CB}$, где $CB=CN+NB=15$. Получаем $\dfrac{24}{CA}=\dfrac{12}{15}$, откуда $CA=\dfrac{24\cdot15}{12}=30$.`,
ref: 'Казаков «Геометрия, 8 кл.», гл. 3, § 20' },
{ idx: 16, type: 'open', topic: 'expressions', subtopic: 'expr-powers-roots', diff: 3,
text: R`Найдите значение выражения $\left(3b^{0{,}25}\right)^{2}+3b^{0{,}5}$ при $b=\log_{\sqrt2}256$.`,
answer: '48',
sol: R`Упростим: $\left(3b^{0{,}25}\right)^{2}+3b^{0{,}5}=9b^{0{,}5}+3b^{0{,}5}=12b^{0{,}5}$. Значение $b=\log_{\sqrt2}256=\log_{2^{1/2}}2^{8}=\dfrac{8}{1/2}=16$. Тогда $12\cdot16^{0{,}5}=12\cdot4=48$.`,
ref: 'Арефьева «Алгебра, 11 кл.», гл. 1, § 1' },
{ idx: 17, type: 'open', topic: 'equations', subtopic: 'eq-logarithmic', diff: 3,
text: R`Найдите произведение корней уравнения $\log_{\sqrt5}\left(x-3\sqrt7\right)+\log_{\sqrt5}\left(x+3\sqrt7\right)=0$ (корень, если он единственный).`,
answer: '8',
sol: R`По свойству логарифмов $\log_{\sqrt5}\left((x-3\sqrt7)(x+3\sqrt7)\right)=0$, то есть $x^{2}-63=1$, $x^{2}=64$, $x=\pm8$. Условию $x-3\sqrt7>0$ ($3\sqrt7\approx7{,}9$) удовлетворяет только $x=8$.`,
ref: 'Арефьева «Алгебра, 11 кл.», гл. 3, § 9' },
{ idx: 18, type: 'open', topic: 'word-sequences', subtopic: 'word-problems', diff: 2,
text: R`Через электронный сервис Петя купил билет на спортивное мероприятие и заплатил $46$ рублей $25$ копеек. В эту сумму входит стоимость билета и сервисный сбор $2$ рубля $50$ копеек. За два дня до мероприятия Петя решил вернуть билет. По правилам организатора ему вернут $80\%$ стоимости билета. Какую сумму (в рублях) получит Петя, вернув билет?`,
answer: '35',
sol: R`Стоимость билета без сервисного сбора: $46{,}25-2{,}50=43{,}75$ рубля. Вернут $80\%$ от неё: $43{,}75\cdot0{,}8=35$ (рублей).`,
ref: 'Герасимов «Математика, 6 кл.», гл. 2, § 12' },
{ idx: 19, type: 'open', topic: 'equations', subtopic: 'eq-exponential', diff: 3,
text: R`Найдите сумму всех целых решений неравенства $\left(\dfrac37\right)^{\frac{x+18}{(x-2)^{2}}}\le\dfrac37$.`,
answer: '23',
sol: R`Так как $0<\dfrac37<1$, функция убывает, поэтому неравенство равносильно $\dfrac{x+18}{(x-2)^{2}}\ge1$, то есть $\dfrac{(x+2)(x-7)}{(x-2)^{2}}\le0$. Методом интервалов (нули $-2$ и $7$, $x\ne2$) решение — $[-2;2)\cup(2;7]$. Целые: $-2,-1,0,1,3,4,5,6,7$; их сумма равна $23$.`,
ref: 'Арефьева «Алгебра, 11 кл.», гл. 2, § 6' },
{ idx: 20, type: 'open', topic: 'planimetry', subtopic: 'plan-quadrilaterals', diff: 4,
text: R`В трапеции $ABCD$ ($BC\parallel AD$) известно, что $\angle A=90^\circ$, $\angle C=120^\circ$, $AD=8\sqrt2$. Найдите значение выражения $\sqrt3\cdot S$, где $S$ — площадь трапеции $ABCD$, если высота трапеции равна $3\sqrt6$.`,
answer: '117',
sol: R`Пусть $CK$ — высота ($CK=3\sqrt6$). В прямоугольном треугольнике $CKD$ угол при $D$ равен $60^\circ$, поэтому $KD=\dfrac{CK}{\sqrt3}=3\sqrt2$. Тогда $AK=AD-KD=8\sqrt2-3\sqrt2=5\sqrt2$, а так как $ABCK$ — прямоугольник, $BC=AK=5\sqrt2$. Площадь $S=\dfrac{AD+BC}{2}\cdot CK=\dfrac{8\sqrt2+5\sqrt2}{2}\cdot3\sqrt6=39\sqrt3$. Тогда $\sqrt3\cdot S=\sqrt3\cdot39\sqrt3=117$.`,
ref: 'Казаков «Геометрия, 8 кл.», гл. 2, § 17' },
{ idx: 21, type: 'open', topic: 'functions', subtopic: 'fn-derivative', diff: 3,
text: R`Найдите наименьшее значение функции $f(x)=\dfrac{x^{2}}{x-4}$ на отрезке $[6;10]$.`,
answer: '16',
sol: R`$f'(x)=\dfrac{2x(x-4)-x^{2}}{(x-4)^{2}}=\dfrac{x^{2}-8x}{(x-4)^{2}}$. Нули $x=0$ и $x=8$; на $[6;10]$ лежит $x=8$. Сравним $f(6)=\dfrac{36}{2}=18$, $f(8)=\dfrac{64}{4}=16$, $f(10)=\dfrac{100}{6}=16\dfrac23$. Наименьшее значение $16$ (при $x=8$).`,
ref: 'Арефьева «Алгебра, 10 кл.», гл. 3, § 22' },
{ idx: 22, type: 'open', topic: 'expressions', subtopic: 'expr-powers-roots', diff: 3,
text: R`Найдите значение выражения $\log_3\left(\dfrac{a}{9}\right)-\log_3\left(\dfrac{81}{b}\right)$, если $\log_3(ab)=17$.`,
answer: '11',
sol: R`$\log_3\dfrac{a}{9}-\log_3\dfrac{81}{b}=\log_3 a-\log_3 9-\log_3 81+\log_3 b=\log_3(ab)-2-4=\log_3(ab)-6$. Подставив $\log_3(ab)=17$, получим $17-6=11$.`,
ref: 'Арефьева «Алгебра, 11 кл.», гл. 3, § 7' },
{ idx: 23, type: 'open', topic: 'stereometry', subtopic: 'ster-polyhedra', diff: 4,
text: R`$ABCA_1B_1C_1$ — правильная треугольная призма, длина стороны основания которой равна $7$, а бокового ребра — $\sqrt{29}$. Найдите периметр сечения призмы плоскостью, проходящей через прямую $A_1C_1$ и середину ребра $BB_1$.`,
answer: '22',
sol: R`Пусть $K$ — середина ребра $BB_1$. Сечение — равнобедренный треугольник $A_1KC_1$ с $A_1C_1=7$ и $KA_1=KC_1$. Из прямоугольного треугольника $KB_1A_1$: $KB_1=\dfrac{\sqrt{29}}{2}$, $A_1B_1=7$, поэтому $KA_1=\sqrt{49+\dfrac{29}{4}}=\sqrt{\dfrac{225}{4}}=\dfrac{15}{2}$. Периметр $P=A_1C_1+KA_1+KC_1=7+2\cdot\dfrac{15}{2}=22$.`,
ref: 'Латотин «Геометрия, 10 кл.», разд. 1, § 3' },
{ idx: 24, type: 'open', topic: 'equations', subtopic: 'eq-rational', diff: 3,
text: R`Найдите сумму всех целых решений системы неравенств $\begin{cases}x^{2}+8x+7\ge0,\\(x+9)(4-x)>0.\end{cases}$`,
answer: '-10',
sol: R`$x^{2}+8x+7\ge0\Rightarrow(x+7)(x+1)\ge0$, решение $(-\infty;-7]\cup[-1;+\infty)$. $\ (x+9)(4-x)>0\Rightarrow x\in(-9;4)$. Пересечение — $(-9;-7]\cup[-1;4)$. Целые: $-8,-7,-1,0,1,2,3$; их сумма равна $-10$.`,
ref: 'Арефьева «Алгебра, 8 кл.», гл. 3, § 16' },
{ idx: 25, type: 'open', topic: 'equations', subtopic: 'eq-irrational', diff: 3,
text: R`Найдите сумму квадратов корней уравнения $\sqrt{2x+6}-\sqrt{x+1}=2$.`,
answer: '226',
sol: R`Перепишем: $\sqrt{2x+6}=2+\sqrt{x+1}$. Возведя в квадрат: $2x+6=4+4\sqrt{x+1}+x+1$, $x+1=4\sqrt{x+1}$. Ещё раз в квадрат: $x^{2}-14x-15=0$, корни $-1$ и $15$ (оба проходят проверку). Сумма квадратов $(-1)^{2}+15^{2}=1+225=226$.`,
ref: 'Арефьева «Алгебра, 10 кл.», гл. 2, § 17' },
{ idx: 26, type: 'open', topic: 'stereometry', subtopic: 'ster-angles-distances', diff: 4,
text: R`В прямоугольном треугольнике $KMN$ угол $M$ равен $90^\circ$, а $KN=6\sqrt2$. Точка $A$, не лежащая в плоскости треугольника $KMN$, удалена на расстояние $7$ от каждой вершины треугольника. Найдите значение выражения $21\sqrt2\cdot\cos\alpha$, где $\alpha$ — угол между прямой $AM$ и плоскостью $KMN$.`,
answer: '18',
sol: R`Так как точка $A$ равноудалена от вершин, основание $O$ перпендикуляра $AO$ — центр описанной около прямоугольного треугольника окружности, то есть середина гипотенузы $KN$, причём $MO=\dfrac{KN}{2}=3\sqrt2$. Угол между $AM$ и плоскостью — это $\angle AMO=\alpha$. В прямоугольном треугольнике $AOM$: $\cos\alpha=\dfrac{MO}{AM}=\dfrac{3\sqrt2}{7}$. Тогда $21\sqrt2\cdot\dfrac{3\sqrt2}{7}=\dfrac{21\cdot3\cdot2}{7}=18$.`,
ref: 'Латотин «Геометрия, 10 кл.», разд. 3, § 9' },
{ idx: 27, type: 'open', topic: 'trigonometry', subtopic: 'trig-equations', diff: 4,
text: R`Найдите (в градусах) сумму различных корней уравнения $\sqrt3\sin5x+\cos5x=0$ на промежутке $(-45^\circ;0^\circ)$.`,
answer: '-48',
sol: R`Разделив на $\cos5x$: $\sqrt3\operatorname{tg}5x+1=0$, $\operatorname{tg}5x=-\dfrac{\sqrt3}{3}$, откуда $5x=-30^\circ+180^\circ n$, $x=-6^\circ+36^\circ n$. Промежутку $(-45^\circ;0^\circ)$ принадлежат $-6^\circ$ и $-42^\circ$; их сумма равна $-48^\circ$.`,
ref: 'Арефьева «Алгебра, 10 кл.», гл. 1, § 8' },
{ idx: 28, type: 'open', topic: 'equations', subtopic: 'eq-logarithmic', diff: 4,
text: R`Найдите сумму всех целых решений неравенства $\dfrac{8}{1+\log_3 x}>-1+\log_3 x$.`,
answer: '351',
sol: R`Пусть $t=\log_3 x$, тогда $\dfrac{8}{1+t}>t-1$, что приводит к $\dfrac{(t-3)(t+3)}{t+1}<0$, решение $t<-3$ или $-1<t<3$. Тогда $0<x<\dfrac{1}{27}$ (целых нет) или $\dfrac13<x<27$ (целые $1,2,\ldots,26$). Сумма $1+2+\ldots+26=351$.`,
ref: 'Арефьева «Алгебра, 11 кл.», гл. 3, § 10' },
{ idx: 29, type: 'open', topic: 'equations', subtopic: 'eq-rational', diff: 4,
text: R`По углам листа картона прямоугольной формы вырезали четыре одинаковых квадрата со стороной $5$ см. Края заготовки загнули и получили коробку в форме прямоугольного параллелепипеда. Если бы длину каждой стороны листа картона уменьшили на $2$ см, то объём изготовленной коробки был бы на $0{,}12$ дм³ меньше. Найдите периметр исходного листа картона (в см).`,
answer: '68',
sol: R`Пусть длина листа $x$ см, ширина $y$ см. Объём коробки $5(x-10)(y-10)$ см³. После уменьшения сторон на $2$ см объём $5(x-12)(y-12)$ см³, и он на $120$ см³ ($0{,}12$ дм³) меньше: $5(x-10)(y-10)=5(x-12)(y-12)+120$. После преобразований $2(x+y)=68$, то есть периметр листа равен $68$ см.`,
ref: 'Арефьева «Алгебра, 9 кл.», гл. 3, § 11' },
{ idx: 30, type: 'open', topic: 'stereometry', subtopic: 'ster-angles-distances', diff: 5,
text: R`Сфера с радиусом $4$ касается всех сторон равнобедренного треугольника $KMN$, у которого длина основания $KM$ равна $10$, а длина боковой стороны $MN$ равна $13$. Найдите значение выражения $3\sqrt{11}\cdot V$, где $V$ — объём пирамиды $OKMN$ ($O$ — центр сферы).`,
answer: '440',
sol: R`Точки касания лежат в плоскости вписанной в треугольник окружности с центром $O_1$ (проекция $O$). Радиус вписанной окружности $r=\dfrac{S}{p}$, где $S$ — площадь, $p$ — полупериметр. Полупериметр $p=\dfrac{10+13+13}{2}=18$; по формуле Герона $S=\sqrt{18\cdot8\cdot5\cdot5}=60$. Тогда $r=\dfrac{60}{18}=\dfrac{10}{3}$. Высота $OO_1=\sqrt{R^{2}-r^{2}}=\sqrt{16-\dfrac{100}{9}}=\dfrac{2\sqrt{11}}{3}$. Объём $V=\dfrac13\cdot S\cdot OO_1=\dfrac13\cdot60\cdot\dfrac{2\sqrt{11}}{3}=\dfrac{40\sqrt{11}}{3}$. Тогда $3\sqrt{11}\cdot V=3\sqrt{11}\cdot\dfrac{40\sqrt{11}}{3}=40\cdot11=440$.`,
ref: 'Латотин «Геометрия, 11 кл.», разд. 2, § 3; разд. 3, § 5' },
];
/* ── Сборка 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_e3v1 (${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_e3v1.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 · этап III».\n`);
} catch (e) {
db.exec('ROLLBACK');
console.error('\n✗ Ошибка записи, откат транзакции:', e.message);
process.exitCode = 1;
}
db.close();