Files
Learn_System/backend/scripts/seed_ctmath_rt2324_e1v1.js
T
Maxim Dolgolyov fec638135f chore(ctmath): убрать упоминания сторонних авторов из ссылок-учебников
Поле ref в решениях задач (показывается ученику как «Учебник: …») содержало фамилии
авторов чужих учебников (Арефьева, Казаков, Латотин, Герасимов). Заменено на обобщённые
ссылки нашего курса: «Алгебра, 7 класс, гл. 1» и т.п. (фамилии и кавычки-ёлочки убраны).
452 замены в 15 seed_ctmath_*.js. Синтаксис OK, валидация 30/30.
Применённые варианты (112,113) обновятся при повторном --apply (upsert solution_html).

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

365 lines
34 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_rt2324_e1v1.js
Чистый вариант-пробник для трека exam-prep `ctmath`.
Источник: РТ–2023/2024, Этап I, Вариант 1 (РИКЗ, «Тематическое
консультирование по математике»). 30 заданий: А1–А10 + В1–В20.
Перенабрано вручную в KaTeX по PDF (визуальное чтение, НЕ OCR):
F:\!Рабочие\ЦТ\Математика\Математика\РТ\2023-2024\МАТ РТ-1 23_24 В1.pdf
variant=104 — следующий «чистый» вариант после РТ-2024/25 (101/102/103).
Геометрия закодирована текстом (стандартная разметка фигур / углы словами) —
отдельных чертежей не требуется (как у большинства существующих задач).
Идемпотентность: upsert по UNIQUE(exam_key, variant, task_idx).
Запуск:
node backend/scripts/seed_ctmath_rt2324_e1v1.js # DRY-RUN (по умолчанию)
node backend/scripts/seed_ctmath_rt2324_e1v1.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 = 104;
const PROV = 'РТ–2023/2024, Этап I, Вариант 1';
const R = String.raw;
/* opts: метки кириллица а–д (как в существующих строках ctmath; checkAnswerServer
имеет ветку /^[а-д]$/). РТ-варианты 1..5 → а..д. */
const L = ['а', 'б', 'в', 'г', 'д'];
const mc = (...html) => html.map((h, i) => [L[i], h]);
/* ── 30 заданий ─────────────────────────────────────────────────────────── */
const TASKS = [
// ── Часть A: А1–А10 ──────────────────────────────────────────────────────
{ idx: 1, type: 'mc', topic: 'numbers', subtopic: 'num-real', diff: 1,
text: R`Наименьшее целое число, принадлежащее интервалу $(-13{,}8;-7)$, равно:`,
opts: mc('$-14$', '$-6$', '$-7$', '$-13$', '$-12$'),
answer: 'г',
sol: R`Интервалу $(-13{,}8;-7)$ принадлежат целые числа $-13,\,-12,\,-11,\,-10,\,-9,\,-8$. Наименьшее из них — число $-13$.`,
ref: 'Алгебра, 8 класс, гл. 1, § 5' },
{ idx: 2, type: 'mc', topic: 'expressions', subtopic: 'expr-polynomials', diff: 1,
text: R`Укажите номер выражения, которое является произведением числа $m$ и суммы чисел $1{,}7$ и $3{,}5$.`,
opts: mc('$1{,}7\cdot(3{,}5+m)$', '$1{,}7+3{,}5\cdot m$', '$1{,}7\cdot m+3{,}5$', '$3{,}5\cdot(1{,}7+m)$', '$m\cdot(1{,}7+3{,}5)$'),
answer: 'д',
sol: R`Произведение числа $m$ и суммы чисел $1{,}7$ и $3{,}5$ записывается как $m\cdot(1{,}7+3{,}5)$.`,
ref: 'Алгебра, 7 класс, гл. 2, § 4' },
{ idx: 3, type: 'mc', topic: 'stereometry', subtopic: 'ster-basics', diff: 2,
text: R`В параллелепипеде $ABCDA_1B_1C_1D_1$ среди отрезков $BD$, $BD_1$, $AB_1$, $A_1B_1$, $B_1B$ укажите тот, который является диагональю параллелепипеда.`,
opts: mc('$BD$', '$BD_1$', '$AB_1$', '$A_1B_1$', '$B_1B$'),
answer: 'б',
sol: R`Диагональю параллелепипеда называют отрезок, соединяющий две вершины, не принадлежащие одной грани. Среди перечисленных только $BD_1$ соединяет противоположные вершины параллелепипеда, поэтому $BD_1$ — диагональ.`,
ref: 'Геометрия, 10 класс, разд. 1, § 1' },
{ idx: 4, type: 'mc', topic: 'equations', subtopic: 'eq-linear', diff: 1,
text: R`Определите, при каком из значений $x$, равных $4;\ 5;\ 1;\ 0{,}1;\ 8$, верно неравенство $\dfrac{320}{x}<50$.`,
opts: mc('$4$', '$5$', '$1$', '$0{,}1$', '$8$'),
answer: 'д',
sol: R`При $x>0$ неравенство $\dfrac{320}{x}<50$ равносильно $x>6{,}4$. Из данных чисел этому условию удовлетворяет только $x=8$.`,
ref: 'Алгебра, 7 класс, гл. 3, § 18' },
{ idx: 5, type: 'mc', topic: 'functions', subtopic: 'fn-graphs', diff: 1,
text: R`Укажите номер функции, график которой параллелен оси абсцисс.`,
opts: mc('$y=-4$', '$y=4-2x$', '$y=\dfrac{2}{x}$', '$y=4^{x}$', '$y=4x$'),
answer: 'а',
sol: R`График параллелен оси абсцисс у постоянной функции $y=b$ (угловой коэффициент $k=0$). Из предложенных это $y=-4$.`,
ref: 'Алгебра, 7 класс, гл. 3, § 20' },
{ idx: 6, type: 'open', topic: 'functions', subtopic: 'fn-properties', diff: 2,
text: R`Функция задана формулой $f(x)=|x|-6$. Укажите номера верных утверждений.<br>1) областью определения функции является множество всех действительных чисел;<br>2) функция возрастает на промежутке $(-\infty;0]$;<br>3) функция является чётной;<br>4) $f(-5)=-11$;<br>5) $f(3)<0$.<br><i>Ответ запишите цифрами в порядке возрастания, без пробелов.</i>`,
answer: '135', ansShow: '1, 3, 5',
sol: R`$1)$ верно: $|x|-6$ определено при всех $x$. $\ 2)$ неверно: на $(-\infty;0]$ функция убывает. $\ 3)$ верно: $f(-x)=|-x|-6=|x|-6=f(x)$. $\ 4)$ неверно: $f(-5)=5-6=-1$. $\ 5)$ верно: $f(3)=3-6=-3<0$.`,
ref: 'Алгебра, 8 класс, гл. 4, § 19' },
{ idx: 7, type: 'mc', topic: 'word-sequences', subtopic: 'word-problems', diff: 2,
text: R`Фермер привёз на осеннюю ярмарку некоторое количество картофеля и продал из этого количества $102$ кг. Сколько всего килограммов картофеля привёз фермер, если после продажи осталось $\dfrac{5}{11}$ всего привезённого картофеля?`,
opts: mc('$224$ кг', '$204$ кг', '$192$ кг', '$187$ кг', '$169$ кг'),
answer: 'г',
sol: R`Проданная часть составляет $1-\dfrac{5}{11}=\dfrac{6}{11}$ всего картофеля и равна $102$ кг. Тогда всего привезено $102:\dfrac{6}{11}=\dfrac{102\cdot11}{6}=187$ кг.`,
ref: 'Математика, 6 класс, гл. 3, § 10' },
{ idx: 8, type: 'mc', topic: 'expressions', subtopic: 'expr-powers-roots', diff: 1,
text: R`Значение выражения $\sqrt[3]{0{,}9}\cdot\sqrt[3]{30}$ равно:`,
opts: mc('$3$', '$\sqrt[3]{12}$', '$\sqrt3$', '$\sqrt[6]{12}$', '$6$'),
answer: 'а',
sol: R`По свойству корня $n$-й степени $\sqrt[3]{0{,}9}\cdot\sqrt[3]{30}=\sqrt[3]{0{,}9\cdot30}=\sqrt[3]{27}=3$.`,
ref: 'Алгебра, 10 класс, гл. 2, § 14' },
{ idx: 9, type: 'mc', topic: 'stereometry', subtopic: 'ster-polyhedra', diff: 2,
text: R`Треугольник $KMN$ — сечение треугольной пирамиды $SABC$ плоскостью, проходящей через точку $M$ — середину ребра $BC$ — параллельно плоскости $SAC$. Найдите периметр треугольника $KMN$, если каждое ребро пирамиды $SABC$ имеет длину $2\sqrt2$.`,
opts: mc('$\dfrac{2\sqrt2}{3}$', '$\dfrac{3\sqrt2}{2}$', '$3\sqrt2$', '$6\sqrt2$', '$4\sqrt2$'),
answer: 'в',
sol: R`Секущая плоскость параллельна $SAC$ и проходит через середину $M$ ребра $BC$, поэтому она пересекает рёбра $AB$ и $SB$ в их серединах $N$ и $K$. Отрезки $MN$, $MK$, $NK$ — средние линии граней, каждый равен $\dfrac12\cdot2\sqrt2=\sqrt2$. Значит, периметр $KMN$ равен $3\sqrt2$.`,
ref: 'Геометрия, 10 класс, разд. 1, § 3' },
{ idx: 10, type: 'open', topic: 'trigonometry', subtopic: 'trig-identities', diff: 2,
text: R`Укажите номера выражений, которые не имеют смысла.<br>1) $\arccos\dfrac{\sqrt3}{2}$;<br>2) $\arcsin\sqrt2$;<br>3) $\operatorname{ctg}\left(-\dfrac{3\pi}{2}\right)$;<br>4) $\operatorname{tg}\left(-\dfrac{3\pi}{2}\right)$;<br>5) $\operatorname{arctg}\dfrac{\sqrt3}{3}$.<br><i>Ответ запишите цифрами в порядке возрастания, без пробелов.</i>`,
answer: '24', ansShow: '2, 4',
sol: R`$1)$ имеет смысл: $\arccos\dfrac{\sqrt3}{2}=\dfrac{\pi}{6}$. $\ 2)$ не имеет смысла: $\sqrt2\notin[-1;1]$. $\ 3)$ имеет смысл: $\operatorname{ctg}\left(-\dfrac{3\pi}{2}\right)=0$. $\ 4)$ не имеет смысла: $\operatorname{tg}\left(-\dfrac{3\pi}{2}\right)$ не существует, так как $\cos\left(-\dfrac{3\pi}{2}\right)=0$. $\ 5)$ имеет смысл: $\operatorname{arctg}\dfrac{\sqrt3}{3}=\dfrac{\pi}{6}$.`,
ref: 'Алгебра, 10 класс, гл. 1, § 3; § 7' },
// ── Часть B: В1–В20 ──────────────────────────────────────────────────────
{ idx: 11, type: 'long', topic: 'numbers', subtopic: 'num-divisibility', diff: 2,
text: R`Для начала каждого из предложений А–В подберите его окончание 1–6 так, чтобы получилось верное утверждение.<br><b>Начало:</b><br>А) Наибольший простой делитель числа $14$ равен …<br>Б) Наименьшее общее кратное чисел $5$ и $55$ равно …<br>В) Наибольший общий делитель чисел $16$ и $55$ равен …<br><b>Окончание:</b><br>1) $1$;&emsp;2) $110$;&emsp;3) $55$;&emsp;4) $5$;&emsp;5) $7$;&emsp;6) $2$.<br><i>Ответ запишите сочетанием букв и цифр, например: А1Б1В4.</i>`,
answer: 'А5Б3В1', ansShow: 'А5Б3В1',
sol: R`А) Простые делители числа $14$ — это $2$ и $7$; наибольший равен $7$ — окончание 5. Б) Наименьшее общее кратное чисел $5$ и $55$ равно $55$ — окончание 3. В) Наибольший общий делитель чисел $16$ и $55$ равен $1$ — окончание 1.`,
ref: 'Математика, 5 класс, ч. 1, гл. 1, § 12' },
{ idx: 12, type: 'open', topic: 'stereometry', subtopic: 'ster-basics', diff: 3,
text: R`$ABCDA_1B_1C_1D_1$ — куб. Отрезки $B_1D_1$ и $AD_1$ являются диагоналями граней $A_1B_1C_1D_1$ и $AA_1D_1D$ соответственно. Выберите верные утверждения.<br>1) прямая $C_1D_1$ перпендикулярна прямой $AD_1$;<br>2) прямая $B_1D_1$ параллельна прямой $BC$;<br>3) прямая $AD_1$ параллельна плоскости $BB_1C_1$;<br>4) прямая $B_1D_1$ перпендикулярна прямой $AD_1$;<br>5) прямая $AA_1$ параллельна прямой $B_1D_1$;<br>6) прямая $CC_1$ параллельна плоскости $BAA_1$.<br><i>Ответ запишите цифрами в порядке возрастания, без пробелов.</i>`,
answer: '136', ansShow: '1, 3, 6',
sol: R`$1)$ верно: $C_1D_1$ перпендикулярна плоскости $AA_1D_1D$, значит $C_1D_1\perp AD_1$. $\ 2)$ неверно: $B_1D_1$ и $BC$ скрещиваются. $\ 3)$ верно: $AD_1\subset AA_1D_1D$, а эта грань параллельна грани $BB_1C_1C$. $\ 4)$ неверно: угол между $B_1D_1$ и $AD_1$ равен $60^\circ$. $\ 5)$ неверно: $AA_1\perp B_1D_1$. $\ 6)$ верно: $CC_1\subset CC_1D_1D$, а эта грань параллельна грани $BAA_1B_1$.`,
ref: 'Геометрия, 10 класс, разд. 12' },
{ idx: 13, type: 'open', topic: 'planimetry', subtopic: 'plan-triangles', diff: 1,
text: R`В треугольнике $ABC$ известно, что $\angle ABC=40^\circ$, $\angle BAC=3x$, $\angle ACB=x$. Найдите градусную меру угла $ACB$.`,
answer: '35',
sol: R`По теореме о сумме градусных мер углов треугольника $3x+x+40^\circ=180^\circ$, откуда $4x=140^\circ$, $x=35^\circ$. Значит, $\angle ACB=35^\circ$.`,
ref: 'Геометрия, 7 класс, гл. 4, § 19' },
{ idx: 14, type: 'open', topic: 'word-sequences', subtopic: 'seq-progressions', diff: 2,
text: R`Арифметическая прогрессия $(a_n)$ задана формулой $n$-го члена $a_n=6-2n$. Найдите номер члена этой прогрессии, равного $-70$.`,
answer: '38',
sol: R`По условию $a_n=-70$, тогда $6-2n=-70$, $-2n=-76$, $n=38$.`,
ref: 'Алгебра, 9 класс, гл. 4, § 15' },
{ idx: 15, type: 'open', topic: 'numbers', subtopic: 'num-divisibility', diff: 2,
text: R`Найдите произведение наименьшего натурального двузначного простого числа и натурального числа, при делении которого на $5$ получается в неполном частном $13$ и в остатке $1$.`,
answer: '726',
sol: R`Наименьшее двузначное простое число — $11$. Натуральное число с неполным частным $13$ и остатком $1$ при делении на $5$ равно $13\cdot5+1=66$. Произведение: $11\cdot66=726$.`,
ref: 'Математика, 5 класс, ч. 1, гл. 1, § 11' },
{ idx: 16, type: 'open', topic: 'word-sequences', subtopic: 'word-problems', diff: 2,
text: R`За керамическую плитку и её укладку заплатили $524$ рубля. Сколько стоит (в рублях) керамическая плитка, если стоимость её укладки составляет $31\%$ стоимости плитки?`,
answer: '400',
sol: R`Пусть стоимость плитки равна $x$ рублей, тогда стоимость укладки $0{,}31x$. Уравнение $x+0{,}31x=524$, $1{,}31x=524$, $x=400$.`,
ref: 'Математика, 6 класс, гл. 2, § 1' },
{ idx: 17, type: 'open', topic: 'expressions', subtopic: 'expr-powers-roots', diff: 3,
text: R`Найдите значение выражения $\dfrac{a^{5}-a}{a^{5}-a^{9}}$ при $a=\dfrac{1}{\sqrt[4]{18}}$.`,
answer: '-18',
sol: R`$\dfrac{a^{5}-a}{a^{5}-a^{9}}=\dfrac{a(a^{4}-1)}{a^{5}(1-a^{4})}=-\dfrac{1}{a^{4}}$. При $a=\dfrac{1}{\sqrt[4]{18}}$ имеем $a^{4}=\dfrac{1}{18}$, поэтому значение равно $-18$.`,
ref: 'Алгебра, 11 класс, гл. 1, § 1' },
{ idx: 18, type: 'open', topic: 'functions', subtopic: 'fn-graphs', diff: 2,
text: R`Дана функция $y=x^{2}$. График функции $y=g(x)$ получен из графика функции $y=x^{2}$ сдвигом вдоль оси абсцисс на $1$ единицу влево и вдоль оси ординат на $3$ единицы вниз. Найдите значение $g(-6)$.`,
answer: '22',
sol: R`Указанный сдвиг даёт $g(x)=(x+1)^{2}-3$. Тогда $g(-6)=(-6+1)^{2}-3=25-3=22$.`,
ref: 'Алгебра, 9 класс, гл. 2, § 9' },
{ idx: 19, type: 'open', topic: 'equations', subtopic: 'eq-linear', diff: 2,
text: R`Найдите сумму наименьшего и наибольшего целых решений двойного неравенства $-130<\dfrac{4-3x}{0{,}5}<25$.`,
answer: '20',
sol: R`Умножив на $0{,}5$: $-65<4-3x<12{,}5$. Вычтя $4$: $-69<-3x<8{,}5$. Разделив на $-3$ (знаки меняются): $-2\dfrac56<x<23$. Наименьшее целое решение $-2$, наибольшее $22$; их сумма равна $20$.`,
ref: 'Алгебра, 8 класс, гл. 1, § 6' },
{ idx: 20, type: 'open', topic: 'planimetry', subtopic: 'plan-triangles', diff: 3,
text: R`Радиус окружности, описанной около прямоугольного треугольника $ABC$ ($\angle ABC=90^\circ$), равен $6$. Найдите значение выражения $\sqrt2\cdot S$, где $S$ — площадь треугольника $ABC$, если известно, что $\cos\angle ACB=\dfrac{\sqrt6}{3}$.`,
answer: '48',
sol: R`Гипотенуза $AC=2R=12$. Из $\cos\angle ACB=\dfrac{BC}{AC}=\dfrac{\sqrt6}{3}$ получаем $BC=4\sqrt6$. По теореме Пифагора $AB=\sqrt{AC^{2}-BC^{2}}=\sqrt{144-96}=4\sqrt3$. Площадь $S=\dfrac12\cdot AB\cdot BC=\dfrac12\cdot4\sqrt3\cdot4\sqrt6=24\sqrt2$. Тогда $\sqrt2\cdot S=24\cdot2=48$.`,
ref: 'Геометрия, 9 класс, гл. 2, § 9' },
{ idx: 21, type: 'open', topic: 'equations', subtopic: 'eq-exponential', diff: 3,
text: R`Найдите увеличенное в $8$ раз произведение корней уравнения $(0{,}9)^{4x^{2}-3x-56}=0{,}81$.`,
answer: '-116',
sol: R`Так как $0{,}81=(0{,}9)^{2}$, получаем $4x^{2}-3x-56=2$, то есть $4x^{2}-3x-58=0$. Дискриминант положителен, корни существуют. По теореме Виета их произведение равно $\dfrac{-58}{4}=-14{,}5$. Увеличенное в $8$ раз: $8\cdot(-14{,}5)=-116$.`,
ref: 'Алгебра, 11 класс, гл. 2, § 5' },
{ idx: 22, type: 'open', topic: 'functions', subtopic: 'fn-derivative', diff: 2,
text: R`Найдите тангенс угла наклона к оси абсцисс касательной, проведённой к графику функции $f(x)=36x^{3}-24x+2$ в точке с абсциссой $x_0=\dfrac16$.`,
answer: '-21',
sol: R`Тангенс угла наклона касательной равен значению производной: $f'(x)=108x^{2}-24$, $f'\!\left(\dfrac16\right)=108\cdot\dfrac{1}{36}-24=3-24=-21$.`,
ref: 'Алгебра, 10 класс, гл. 3, § 20' },
{ idx: 23, type: 'open', topic: 'trigonometry', subtopic: 'trig-identities', diff: 2,
text: R`Найдите значение выражения $32\cdot\bigl(\cos28^\circ\cos(-32^\circ)+\sin28^\circ\sin(-32^\circ)\bigr)$.`,
answer: '16',
sol: R`$\cos28^\circ\cos(-32^\circ)+\sin28^\circ\sin(-32^\circ)=\cos28^\circ\cos32^\circ-\sin28^\circ\sin32^\circ=\cos(28^\circ+32^\circ)=\cos60^\circ=\dfrac12$. Тогда $32\cdot\dfrac12=16$.`,
ref: 'Алгебра, 10 класс, гл. 1, § 10' },
{ idx: 24, type: 'open', topic: 'planimetry', subtopic: 'plan-quadrilaterals', diff: 3,
text: R`Острый угол ромба $ABCD$ равен $30^\circ$. Через вершину $B$ тупого угла проведён отрезок $OB$, перпендикулярный плоскости ромба $ABCD$. Найдите площадь ромба $ABCD$, если $OB=6$ и расстояние от точки $O$ до стороны $AD$ ромба равно $8$.`,
answer: '56',
sol: R`Пусть $BK$ — высота ромба ($BK\perp AD$). По теореме о трёх перпендикулярах $OK\perp AD$, поэтому $OK=8$ — расстояние от $O$ до $AD$. Из прямоугольного треугольника $OBK$: $BK=\sqrt{OK^{2}-OB^{2}}=\sqrt{64-36}=2\sqrt7$. В прямоугольном треугольнике $AKB$ угол при $A$ равен $30^\circ$, поэтому $AB=2\,BK=4\sqrt7$. Площадь $S=AD\cdot BK=4\sqrt7\cdot2\sqrt7=56$.`,
ref: 'Геометрия, 8 класс, гл. 2, § 15' },
{ idx: 25, type: 'open', topic: 'equations', subtopic: 'eq-rational', diff: 3,
text: R`Найдите сумму всех целых решений неравенства $\dfrac{(x+7)^{2}(x-4)}{x^{3}(x+3)}\ge0$ на промежутке $[-9;9]$.`,
answer: '29',
sol: R`Методом интервалов: нули числителя $-7$ (чётной кратности) и $4$; нули знаменателя $0$ и $-3$ (выколоты). Решение неравенства: $\{-7\}\cup(-3;0)\cup[4;+\infty)$. На $[-9;9]$ целые решения: $-7,\ -2,\ -1,\ 4,\ 5,\ 6,\ 7,\ 8,\ 9$. Их сумма равна $29$.`,
ref: 'Алгебра, 9 класс, гл. 3, § 13' },
{ idx: 26, type: 'open', topic: 'equations', subtopic: 'eq-irrational', diff: 3,
text: R`Найдите увеличенную в $16$ раз сумму корней уравнения $\sqrt[4]{x^{4}-8x^{2}+13x-5}=x$.`,
answer: '26',
sol: R`Уравнение равносильно системе $x^{4}-8x^{2}+13x-5=x^{4}$ при $x\ge0$, то есть $8x^{2}-13x+5=0$, $x\ge0$. Корни $x=1$ и $x=\dfrac58$ (оба неотрицательны). Сумма корней $1+\dfrac58=\dfrac{13}{8}$. Увеличенная в $16$ раз: $16\cdot\dfrac{13}{8}=26$.`,
ref: 'Алгебра, 10 класс, гл. 2, § 17' },
{ idx: 27, type: 'open', topic: 'stereometry', subtopic: 'ster-rotation', diff: 4,
text: R`Площадь полной поверхности цилиндра равна $60\pi$, площадь боковой поверхности равна $24\pi$. Найдите значение выражения $S^{2}$, где $S$ — площадь сечения цилиндра плоскостью, параллельной его оси и проходящей на расстоянии $\sqrt6$ от неё.`,
answer: '384',
sol: R`Полная поверхность равна сумме боковой и двух оснований: $60\pi=24\pi+2S_0$, где $S_0$ — площадь основания. Тогда $S_0=18\pi$ и $\pi r^{2}=18\pi$, $r=3\sqrt2$. Из $2\pi r h=24\pi$ находим $h=2\sqrt2$. Сечение — прямоугольник со сторонами $h=2\sqrt2$ и хордой $AD$; перпендикуляр из центра основания к хорде равен $\sqrt6$, поэтому $\dfrac{AD}{2}=\sqrt{r^{2}-6}=\sqrt{12}=2\sqrt3$, $AD=4\sqrt3$. Площадь $S=AD\cdot h=4\sqrt3\cdot2\sqrt2=8\sqrt6$, откуда $S^{2}=64\cdot6=384$.`,
ref: 'Геометрия, 11 класс, разд. 1, § 2' },
{ idx: 28, type: 'open', topic: 'trigonometry', subtopic: 'trig-equations', diff: 3,
text: R`Найдите (в градусах) наименьший положительный корень уравнения $\sin3x\cos15^\circ+\cos3x\sin15^\circ=0$.`,
answer: '55',
sol: R`По формуле синуса суммы левая часть равна $\sin(3x+15^\circ)$. Уравнение $\sin(3x+15^\circ)=0$ даёт $3x+15^\circ=180^\circ n$, откуда $x=-5^\circ+60^\circ n$. Наименьший положительный корень при $n=1$: $x=55^\circ$.`,
ref: 'Алгебра, 10 класс, гл. 1, § 8; § 10' },
{ idx: 29, type: 'open', topic: 'word-sequences', subtopic: 'word-problems', diff: 4,
text: R`Велосипедист, скорость движения которого $v$ км/ч, из пункта $A$ доехал в пункт $B$ без остановок и сразу поехал назад в пункт $A$. Он двигался по той же дороге с той же скоростью, а через час сделал остановку на $15$ мин, после чего продолжил путь, увеличив скорость на $1$ км/ч. Найдите наименьшее возможное целое значение скорости $v$ (в км/ч), при котором на обратный путь из $B$ в $A$ велосипедист затратит времени не меньше, чем на путь из $A$ в $B$, если расстояние между пунктами $42$ км.`,
answer: '11',
sol: R`Время из $A$ в $B$ равно $\dfrac{42}{v}$ ч. Обратный путь: первый час со скоростью $v$, остановка $\dfrac14$ ч, затем со скоростью $v+1$, поэтому время равно $1+\dfrac14+\dfrac{42-v}{v+1}$ ч. Условие $1+\dfrac14+\dfrac{42-v}{v+1}\ge\dfrac{42}{v}$ при $v>0$ приводит к $v^{2}+5v-168\ge0$, решение $v\ge\dfrac{-5+\sqrt{697}}{2}\approx10{,}7$. Наименьшее целое значение $v=11$.`,
ref: 'Алгебра, 9 класс, гл. 3, § 13' },
{ idx: 30, type: 'open', topic: 'stereometry', subtopic: 'ster-angles-distances', diff: 5,
text: R`$ABCA_1B_1C_1$ — правильная треугольная призма, все рёбра которой равны. Точка $N$ лежит на диагонали $A_1B$ грани $AA_1B_1B$ так, что $A_1N:NB=1:5$. Точки $M$ и $K$ лежат на рёбрах $CC_1$ и $CB$ соответственно так, что $CM:CC_1=1:4$, $CK:KB=1:3$. Найдите значение выражения $18\sqrt7\cdot\operatorname{tg}\varphi$, где $\varphi$ — угол между прямыми $C_1N$ и $KM$.`,
answer: '70',
sol: R`Пусть длина ребра призмы равна $a$. Прямая $BC_1\parallel KM$, поэтому угол между $C_1N$ и $KM$ равен углу $NC_1B$. Тогда $BC_1=a\sqrt2$, $A_1N=\dfrac{a\sqrt2}{6}$, $NB=\dfrac{5a\sqrt2}{6}$. Из треугольника $A_1BC_1$ по теореме косинусов $\cos\angle A_1BC_1=\dfrac34$; далее $C_1N=\dfrac{2a\sqrt2}{3}$ и $\cos\angle NC_1B=\dfrac{9}{16}$, $\sin\angle NC_1B=\dfrac{5\sqrt7}{16}$, $\operatorname{tg}\varphi=\dfrac{5\sqrt7}{9}$. Тогда $18\sqrt7\cdot\dfrac{5\sqrt7}{9}=2\cdot5\cdot7=70$.`,
ref: 'Геометрия, 10 класс, разд. 2, § 4' },
];
/* ── Сборка 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_rt2324_e1v1 (${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), '\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_rt2324_e1v1.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 → «Варианты» → «РТ-2023/24 · этап I».\n`);
} catch (e) {
db.exec('ROLLBACK');
console.error('\n✗ Ошибка записи, откат транзакции:', e.message);
process.exitCode = 1;
}
db.close();