Files
Learn_System/backend/scripts/seed_ctmath_rt2223_e3v1.js
T
Maxim Dolgolyov f856f84de0 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>
2026-06-19 11:07:33 +03:00

388 lines
40 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_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();