Files
Learn_System/backend/scripts/seed_ctmath_ct2018_v1.js
T
Maxim Dolgolyov 7990b33fd0 feat(ctmath): вариант 114 — ЦТ-2018 (30 заданий)
Пробник ЦТ по математике 2018, Вариант 1 (А1–А18 + В1–В12, В1 на соответствие) для трека
exam-prep ctmath. Источник: чистый PDF ЦТ 2018.pdf. ВСЕ 30 ответов решены и сверены с
официальной таблицей (стр.32, столбец Вариант 1) — полное совпадение, включая B8=-18,
B9=-130 (двугранный угол), B11=32, B12=45 (координатный метод, PT=5/2).
Фигурные/несогласованные (А3 точки, А9 графики→пути, А11 квадраты, В1/В2 функция по узлам,
В8 экв. показательное, В10 множитель (6-x)² по ответу) реконструированы/адаптированы.
VARIANT_LABEL 114 -> 'ЦТ-2018'. DRY-RUN 30/30, self-check и структурный KaTeX — зелёные.
Запись в БД — пользователь: node backend/scripts/seed_ctmath_ct2018_v1.js --apply

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

382 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_ct2018_v1.js
Чистый вариант-пробник для трека exam-prep `ctmath`.
Источник: Централизованное тестирование (ЦТ) по математике, 2018, Вариант 1.
Формат: Часть А = А1–А18 (закрытые, 5 вариантов), Часть В = В1–В12 (открытые,
В1 — на соответствие). Всего 30 заданий. Перенабрано вручную в KaTeX по PDF:
F:\!Рабочие\ЦТ\Математика\Математика\ЦТ-ЦЭ\ЦТ 2018.pdf (10 вариантов, табл. ответов стр.32–33).
⚠️ Ответы решены самостоятельно и СВЕРЕНЫ с официальной таблицей (столбец «Вариант 1»):
ВСЕ 30 совпали, включая B8=-18, B9=-130 (двугранный угол), B11=32, B12=45 (координатный
метод, PT=5/2). variant=114 (после ЦТ-2016 = 113).
Адаптации/реконструкции заданий-«с-картинкой» (смысл/ответ сохранены, авто-проверка):
• А3 (точки на прямой) → координаты точек заданы явно (противоположны $C$ и $A$);
• А9 (графики движения) → пройденные пути даны числами ($80$ и $35$ км → $2\tfrac27$);
• А11 (заштрихованная лестница в квадрате) → $12$ вырезанных квадратиков $x$ → $1-12x^{2}$;
• В1/В2 (функция/график) → данные функции заданы формулой/ломаной по узлам в тексте;
• В8 (громоздкое показательное, в скане несогласованно) → экв. уравнение $3^{x^2}5^{x^2}=15^3$
с тем же ответом ($-18$ = $6\cdot(-3)$, корни $\pm\sqrt3$);
• В10 (множитель $(6-x)^{2}$ восстановлен по официальному ответу $13$).
Идемпотентность: upsert по UNIQUE(exam_key, variant, task_idx).
Запуск:
node backend/scripts/seed_ctmath_ct2018_v1.js # DRY-RUN (по умолчанию)
node backend/scripts/seed_ctmath_ct2018_v1.js --apply # запись в БД
⚠️ Массовую запись в БД запускает ПОЛЬЗОВАТЕЛЬ вручную. Без --apply ничего не пишется.
─────────────────────────────────────────────────────────────────────────── */
const { DatabaseSync } = require('node:sqlite');
const path = require('path');
const APPLY = process.argv.includes('--apply');
const EXAM = 'ctmath';
const VARIANT = 114;
const PROV = 'ЦТ–2018, Вариант 1';
const R = String.raw;
const L = ['а', 'б', 'в', 'г', 'д'];
const mc = (...html) => html.map((h, i) => [L[i], h]);
/* ── 30 заданий ─────────────────────────────────────────────────────────── */
const TASKS = [
// ── Часть A: А1–А18 ──────────────────────────────────────────────────────
{ idx: 1, type: 'mc', topic: 'numbers', subtopic: 'num-real', diff: 1,
text: R`Сегодня в Лиде $24$ °C, а в Барановичах температура $t$ °C воздуха не ниже, чем в Лиде. Укажите верное соотношение для $t$.`,
opts: mc('$t>24$', '$t=23$', '$t\ge24$', '$t\le24$', '$t<24$'),
answer: 'в',
sol: R`«Не ниже $24$» означает «больше или равно $24$»: $t\ge24$.`,
ref: 'Арефьева «Алгебра, 8 кл.», гл. 1' },
{ idx: 2, type: 'mc', topic: 'planimetry', subtopic: 'plan-circle', diff: 2,
text: R`Две окружности с центрами $A$ и $B$ касаются внешним образом в точке $C$. Точки $M$ и $K$ — концы их диаметров, лежащих на прямой $AB$ (в порядке $M,A,C,B,K$). Найдите радиус большей окружности, если радиус меньшей равен $5$, а $MK=28$.`,
opts: mc('$9$', '$10$', '$14$', '$18$', '$8$'),
answer: 'а',
sol: R`$MK=2\cdot5+2R=28$, где $R$ — больший радиус, откуда $2R=18$, $R=9$.`,
ref: 'Казаков «Геометрия, 9 кл.», гл. 1' },
{ idx: 3, type: 'mc', topic: 'numbers', subtopic: 'num-real', diff: 1,
text: R`На координатной прямой отмечены точки $D(-3)$, $C(-2)$, $A(2)$, $B(5)$. Укажите точки, координаты которых являются противоположными числами.`,
opts: mc('$A$ и $D$', '$A$ и $C$', '$B$ и $D$', '$B$ и $C$', '$A$ и $B$'),
answer: 'б',
sol: R`Противоположные числа $-2$ и $2$ — это координаты точек $C$ и $A$.`,
ref: 'Латотин «Математика, 6 кл.», гл. 5' },
{ idx: 4, type: 'mc', topic: 'planimetry', subtopic: 'plan-triangles', diff: 2,
text: R`Из вершины угла $KMN$, градусная мера которого равна $170^\circ$, проведены два луча: $MP$, делящий угол пополам, и $MF$, делящий его в отношении $9:8$ (считая от стороны $MK$). Найдите градусную меру угла $FMP$.`,
opts: mc('$20^\circ$', '$17^\circ$', '$4^\circ$', '$10^\circ$', '$5^\circ$'),
answer: 'д',
sol: R`$\angle KMP=\dfrac{170^\circ}{2}=85^\circ$, $\angle KMF=170^\circ\cdot\dfrac{9}{17}=90^\circ$. Тогда $\angle FMP=90^\circ-85^\circ=5^\circ$.`,
ref: 'Казаков «Геометрия, 7 кл.», гл. 2' },
{ idx: 5, type: 'mc', topic: 'word-sequences', subtopic: 'seq-progressions', diff: 1,
text: R`Известно, что число $177$ является членом арифметической прогрессии $(a_n)$, заданной формулой $a_n=6n-3$. Найдите его номер.`,
opts: mc('$30$', '$29$', '$27$', '$26$', '$25$'),
answer: 'а',
sol: R`$6n-3=177$, $6n=180$, $n=30$.`,
ref: 'Арефьева «Алгебра, 9 кл.», гл. 4' },
{ idx: 6, type: 'mc', topic: 'expressions', subtopic: 'expr-powers-roots', diff: 2,
text: R`Вычислите $8^{\,1+\log_{8}6}$.`,
opts: mc('$6$', '$14$', '$24$', '$48$', '$56$'),
answer: 'г',
sol: R`$8^{\,1+\log_{8}6}=8\cdot8^{\log_{8}6}=8\cdot6=48$.`,
ref: 'Арефьева «Алгебра, 11 кл.», гл. 3' },
{ idx: 7, type: 'mc', topic: 'functions', subtopic: 'fn-graphs', diff: 1,
text: R`Укажите уравнение прямой, проходящей через точку $A(5;9)$ параллельно оси абсцисс.`,
opts: mc('$x=5$', '$y=5$', '$y=9$', '$x=9$', '$5x+9y=0$'),
answer: 'в',
sol: R`Прямая, параллельная оси абсцисс, горизонтальна, поэтому имеет вид $y=b$. Через точку $A(5;9)$ проходит прямая $y=9$.`,
ref: 'Арефьева «Алгебра, 7 кл.», гл. 5' },
{ idx: 8, type: 'mc', topic: 'expressions', subtopic: 'expr-polynomials', diff: 2,
text: R`Для одночлена $-5c^{3}\cdot3c^{2}y$ укажите номер верного утверждения.`,
opts: mc('стандартный вид одночлена — $-15c^{5}y$', 'значение при $c=-1$, $y=-1$ равно $15$', 'при делении на $3$ получится $-c^{5}y$', 'коэффициент одночлена равен $-5$', 'степень одночлена равна $5$'),
answer: 'а',
sol: R`$-5c^{3}\cdot3c^{2}y=-15c^{5}y$ — это стандартный вид (утверждение 1). Остальные неверны: значение при $c=-1,y=-1$ равно $-15$; деление на $3$ даёт $-5c^{5}y$; коэффициент $-15$; степень $5+1=6$.`,
ref: 'Арефьева «Алгебра, 7 кл.», гл. 2' },
{ idx: 9, type: 'mc', topic: 'word-sequences', subtopic: 'word-problems', diff: 2,
text: R`Мотоциклист и велосипедист выехали одновременно из одного пункта в одном направлении. По графику движения к некоторому моменту мотоциклист проехал $80$ км, а велосипедист — $35$ км. Во сколько раз скорость мотоциклиста больше скорости велосипедиста?`,
opts: mc('$3\tfrac12$ раза', '$1\tfrac19$ раза', '$2\tfrac17$ раза', '$2\tfrac27$ раза', '$2\tfrac{1}{16}$ раза'),
answer: 'г',
sol: R`За одно и то же время отношение скоростей равно отношению путей: $\dfrac{80}{35}=\dfrac{16}{7}=2\tfrac27$.`,
ref: 'Арефьева «Алгебра, 7 кл.», гл. 3' },
{ idx: 10, type: 'mc', topic: 'expressions', subtopic: 'expr-powers-roots', diff: 2,
text: R`Значение выражения $\sqrt{\left(11+8\sqrt2\right)^{2}}+\sqrt{\left(11-8\sqrt2\right)^{2}}$ равно:`,
opts: mc('$16\sqrt2$', '$38\sqrt2$', '$22$', '$16\sqrt2-22$', '$16\sqrt2+22$'),
answer: 'а',
sol: R`$\sqrt{(11+8\sqrt2)^{2}}=11+8\sqrt2$; так как $8\sqrt2>11$, то $\sqrt{(11-8\sqrt2)^{2}}=8\sqrt2-11$. Сумма $=(11+8\sqrt2)+(8\sqrt2-11)=16\sqrt2$.`,
ref: 'Арефьева «Алгебра, 8 кл.», гл. 2' },
{ idx: 11, type: 'mc', topic: 'planimetry', subtopic: 'plan-quadrilaterals', diff: 2,
text: R`Из квадрата со стороной $1$ удалили $12$ равных квадратов со стороной $x$. Найдите выражение для площади оставшейся (заштрихованной) части квадрата.`,
opts: mc('$1-4x^{2}$', '$4-12x^{2}$', '$1-8x^{2}$', '$4-16x$', '$1-12x^{2}$'),
answer: 'д',
sol: R`Площадь квадрата равна $1$, площадь $12$ вырезанных квадратиков — $12x^{2}$. Оставшаяся часть: $1-12x^{2}$.`,
ref: 'Арефьева «Алгебра, 7 кл.», гл. 2' },
{ idx: 12, type: 'mc', topic: 'trigonometry', subtopic: 'trig-identities', diff: 2,
text: R`Найдите значение выражения $\sin\left(\operatorname{arctg}\sqrt3\right)$.`,
opts: mc('$\dfrac{\sqrt3}{3}$', '$\dfrac12$', '$\dfrac{\sqrt3}{2}$', '$\dfrac{\sqrt2}{2}$', '$1$'),
answer: 'в',
sol: R`$\operatorname{arctg}\sqrt3=60^\circ$, поэтому $\sin60^\circ=\dfrac{\sqrt3}{2}$.`,
ref: 'Арефьева «Алгебра, 10 кл.», гл. 1' },
{ idx: 13, type: 'mc', topic: 'equations', subtopic: 'eq-rational', diff: 2,
text: R`Найдите сумму наименьшего и наибольшего целых решений двойного неравенства $-5{,}2<3-0{,}1x<4{,}59$.`,
opts: mc('$96$', '$97$', '$65$', '$67$', '$66$'),
answer: 'д',
sol: R`Из $3-0{,}1x<4{,}59$: $x>-15{,}9$; из $-5{,}2<3-0{,}1x$: $x<82$. Целые $x$ от $-15$ до $81$; их сумма наименьшего и наибольшего $-15+81=66$.`,
ref: 'Арефьева «Алгебра, 8 кл.», гл. 3' },
{ idx: 14, type: 'mc', topic: 'planimetry', subtopic: 'plan-triangles', diff: 3,
text: R`Длины двух сторон треугольника равны $6$ и $7$, его площадь равна $3\sqrt{33}$. Найдите наибольшее значение, которое может принимать длина третьей стороны.`,
opts: mc('$\sqrt{151}$', '$\sqrt{133}$', '$12$', '$13$', '$2\sqrt{33}$'),
answer: 'б',
sol: R`$S=\dfrac12\cdot6\cdot7\sin C=21\sin C=3\sqrt{33}$, поэтому $\sin C=\dfrac{\sqrt{33}}{7}$, $\cos C=\pm\dfrac47$. Третья сторона $c^{2}=36+49-84\cos C$; наибольшая при $\cos C=-\dfrac47$: $c^{2}=85+48=133$, $c=\sqrt{133}$.`,
ref: 'Казаков «Геометрия, 9 кл.», гл. 1' },
{ idx: 15, type: 'mc', topic: 'equations', subtopic: 'eq-linear', diff: 2,
text: R`Укажите номер уравнения, которое имеет более одного корня.`,
opts: mc('$5x+2=2$', '$2(9-2x)=-4x$', '$\dfrac25x+7=x$', '$\dfrac{5x+2}{3}=4$', '$5x+2=\dfrac{15x+6}{3}$'),
answer: 'д',
sol: R`Уравнение $5x+2=\dfrac{15x+6}{3}=5x+2$ — тождество, верно при любом $x$ (бесконечно много корней). Остальные имеют ровно один корень или ни одного.`,
ref: 'Арефьева «Алгебра, 7 кл.», гл. 1' },
{ idx: 16, type: 'mc', topic: 'stereometry', subtopic: 'ster-rotation', diff: 3,
text: R`Найдите объём конуса, образующая которого равна $4\sqrt6$, а угол при вершине осевого сечения равен $60^\circ$.`,
opts: mc('$144\sqrt2\,\pi$', '$16\sqrt2\,\pi$', '$48\sqrt2\,\pi$', '$48\sqrt6\,\pi$', '$384\sqrt2\,\pi$'),
answer: 'в',
sol: R`Осевое сечение — равнобедренный треугольник с углом $60^\circ$ при вершине, то есть равносторонний. Радиус $R=l\sin30^\circ=4\sqrt6\cdot\dfrac12=2\sqrt6$, высота $h=l\cos30^\circ=4\sqrt6\cdot\dfrac{\sqrt3}{2}=6\sqrt2$. Объём $V=\dfrac13\pi R^{2}h=\dfrac13\pi\cdot24\cdot6\sqrt2=48\sqrt2\,\pi$.`,
ref: 'Латотин «Геометрия, 11 кл.», разд. 2' },
{ idx: 17, type: 'mc', topic: 'trigonometry', subtopic: 'trig-equations', diff: 3,
text: R`Сумма (в градусах) наименьшего положительного и наибольшего отрицательного корней уравнения $\sin(5x-10^\circ)=-\dfrac{\sqrt2}{2}$ равна:`,
opts: mc('$81^\circ$', '$55^\circ$', '$60^\circ$', '$40^\circ$', '$35^\circ$'),
answer: 'г',
sol: R`$5x-10^\circ=-45^\circ+360^\circ k$ или $5x-10^\circ=225^\circ+360^\circ k$, то есть $x=-7^\circ+72^\circ k$ или $x=47^\circ+72^\circ k$. Наименьший положительный корень $47^\circ$, наибольший отрицательный $-7^\circ$; их сумма $40^\circ$.`,
ref: 'Арефьева «Алгебра, 10 кл.», гл. 1, § 8' },
{ idx: 18, type: 'mc', topic: 'stereometry', subtopic: 'ster-polyhedra', diff: 4,
text: R`$ABCA_1B_1C_1$ — правильная треугольная призма, все рёбра которой равны $9$. Точки $P$ и $K$ — середины рёбер $BB_1$ и $AC$, точка $M$ на ребре $CC_1$ такова, что $C_1M:C_1C=1:3$. Найдите длину отрезка, по которому плоскость, проходящая через $K,M,P$, пересекает грань $AA_1B_1B$.`,
opts: mc('$\dfrac{9\sqrt5}{7}$', '$\dfrac{9\sqrt{85}}{14}$', '$\dfrac{9\sqrt2}{2}$', '$\dfrac{9\sqrt{65}}{14}$', '$\dfrac{3\sqrt{17}}{2}$'),
answer: 'б',
sol: R`Введём координаты $A(0;0;0)$, $B(9;0;0)$, $C\left(4{,}5;\dfrac{9\sqrt3}{2};0\right)$ и верхние вершины со сдвигом $+9$ по оси $z$. Секущая плоскость через $K,M,P$ пересекает грань $AA_1B_1B$ (плоскость $y=0$) по прямой $10{,}5x-9z=54$. Её отрезок внутри грани идёт от $\left(\dfrac{36}{7};0;0\right)$ до $P(9;0;4{,}5)$; длина $\sqrt{\left(\dfrac{27}{7}\right)^{2}+4{,}5^{2}}=\dfrac{9\sqrt{85}}{14}$.`,
ref: 'Латотин «Геометрия, 10 кл.», разд. 4' },
// ── Часть B: В1–В12 ──────────────────────────────────────────────────────
{ idx: 19, type: 'long', topic: 'functions', subtopic: 'fn-properties', diff: 3,
text: R`Функция задана формулой $f(x)=x^{2}-10x-3$ на множестве $\mathbb{R}$. Для начала каждого из предложений А–В подберите его окончание $1$–$6$ так, чтобы получилось верное утверждение.<br>А) Сумма координат точки пересечения графика с осью $Oy$ равна …<br>Б) Сумма нулей функции равна …<br>В) Если ось симметрии графика задаётся уравнением $x=a$, то значение $a$ равно …<br>Окончания: $1)\;-3$; $\ 2)\;3$; $\ 3)\;5$; $\ 4)\;-10$; $\ 5)\;-5$; $\ 6)\;10$.`,
answer: 'А1Б6В3',
ansShow: 'А1Б6В3',
sol: R`А) График пересекает $Oy$ в точке $(0;f(0))=(0;-3)$, сумма координат $-3$ (окончание 1). Б) Сумма нулей по теореме Виета равна $10$ (окончание 6). В) Ось симметрии $x=\dfrac{10}{2}=5$, значит $a=5$ (окончание 3). Ответ: А1Б6В3.`,
ref: 'Арефьева «Алгебра, 8 кл.», гл. 3' },
{ idx: 20, type: 'open', topic: 'functions', subtopic: 'fn-properties', diff: 3,
text: R`Функция $y=f(x)$ на промежутке $[-6;4]$ задана ломаной, последовательно соединяющей точки $(-6;-1)$, $(-5;0)$, $(-4;1)$, $(-3;1)$, $(-2;0)$, $(0;-3)$, $(2;-2)$, $(4;3)$. Выберите номера верных утверждений (запишите цифрами в порядке возрастания).<br>$1)$ нулём функции является число $-3$;<br>$2)$ $f(x)>0$ при $x\in(-5;-2)$;<br>$3)$ функция возрастает на промежутке $[2;4]$;<br>$4)$ наибольшее значение функции на $[-6;4]$ равно $2$;<br>$5)$ график пересекает ось ординат в точке $(0;-2)$.`,
answer: '23',
sol: R`Нули функции — $-5$ и $-2$ (не $-3$), значит 1 неверно. На $(-5;-2)$ ломаная положительна — 2 верно. На $[2;4]$: $f(2)=-2<f(4)=3$, функция возрастает — 3 верно. Наибольшее значение $f(4)=3\ne2$ — 4 неверно. $f(0)=-3\ne-2$ — 5 неверно. Верны утверждения $2$ и $3$.`,
ref: 'Арефьева «Алгебра, 9 кл.», гл. 2' },
{ idx: 21, type: 'open', topic: 'word-sequences', subtopic: 'word-problems', diff: 3,
text: R`В жилом доме «Альфа» 13 % всех квартир — однокомнатные, а в доме «Омега» — 61 %. Определите, во сколько раз больше общее число квартир в доме «Альфа», если однокомнатные составляют 16 % всех квартир в двух домах.`,
answer: '15',
sol: R`Пусть в «Альфа» $a$ квартир, в «Омега» — $o$. Тогда $0{,}13a+0{,}61o=0{,}16(a+o)$, откуда $0{,}45o=0{,}03a$ и $\dfrac{a}{o}=15$.`,
ref: 'Арефьева «Алгебра, 7 кл.», гл. 3' },
{ idx: 22, type: 'open', topic: 'equations', subtopic: 'eq-irrational', diff: 3,
text: R`Найдите сумму квадратов корней уравнения $\left(x^{2}+2x-8\right)\sqrt{x+1}=4x^{2}+8x-32$.`,
answer: '229',
sol: R`$4x^{2}+8x-32=4(x^{2}+2x-8)$, поэтому $(x^{2}+2x-8)(\sqrt{x+1}-4)=0$. ОДЗ $x\ge-1$. Из $x^{2}+2x-8=0$: $x=2$ (корень $-4$ вне ОДЗ); из $\sqrt{x+1}=4$: $x=15$. Сумма квадратов $2^{2}+15^{2}=229$.`,
ref: 'Арефьева «Алгебра, 10 кл.», гл. 2, § 17' },
{ idx: 23, type: 'open', topic: 'planimetry', subtopic: 'plan-quadrilaterals', diff: 2,
text: R`Градусная мера угла правильного многоугольника равна $150^\circ$, а длина его стороны равна $6$. Найдите периметр многоугольника.`,
answer: '72',
sol: R`Внешний угол $180^\circ-150^\circ=30^\circ$, число сторон $n=\dfrac{360^\circ}{30^\circ}=12$. Периметр $12\cdot6=72$.`,
ref: 'Казаков «Геометрия, 9 кл.», гл. 2' },
{ idx: 24, type: 'open', topic: 'equations', subtopic: 'eq-logarithmic', diff: 3,
text: R`Найдите произведение наименьшего и наибольшего целых решений неравенства $\log_{1/9}\dfrac{9-x}{x+17}\ge0$.`,
answer: '-32',
sol: R`Основание $\dfrac19<1$, поэтому $0<\dfrac{9-x}{x+17}\le1$. Первое неравенство даёт $-17<x<9$, второе — $\dfrac{x+4}{x+17}\ge0$, то есть $x\ge-4$. Значит $-4\le x<9$, целые от $-4$ до $8$; произведение $(-4)\cdot8=-32$.`,
ref: 'Арефьева «Алгебра, 11 кл.», гл. 3' },
{ idx: 25, type: 'open', topic: 'numbers', subtopic: 'num-divisibility', diff: 3,
text: R`О натуральных числах $a$ и $b$ известно, что $a>b$, $a+b=85$ и НОК$(a;b)=102$. Найдите число $b$.`,
answer: '34',
sol: R`Пусть $d=$НОД$(a;b)$, $a=dm$, $b=dn$, $\gcd(m;n)=1$. Тогда $d(m+n)=85$, $dmn=102$; общий делитель $85$ и $102$ равен $17$, поэтому $d=17$, $m+n=5$, $mn=6$, откуда $m=3$, $n=2$. Значит $a=51$, $b=34$.`,
ref: 'Арефьева «Алгебра, 9 кл.», гл. 4' },
{ idx: 26, type: 'open', topic: 'equations', subtopic: 'eq-exponential', diff: 3,
text: R`Найдите увеличенное в $6$ раз произведение корней уравнения $3^{x^{2}}\cdot5^{x^{2}}=15^{3}$.`,
answer: '-18',
sol: R`$3^{x^{2}}\cdot5^{x^{2}}=15^{x^{2}}=15^{3}$, поэтому $x^{2}=3$, $x=\pm\sqrt3$. Произведение корней $-3$; увеличенное в $6$ раз — это $-18$.`,
ref: 'Арефьева «Алгебра, 11 кл.», гл. 2' },
{ idx: 27, type: 'open', topic: 'stereometry', subtopic: 'ster-polyhedra', diff: 4,
text: R`В основании пирамиды $SABCD$ лежит квадрат $ABCD$ со стороной $1$. Боковое ребро $SB$ перпендикулярно плоскости основания и равно $3$. Найдите значение выражения $\dfrac{13}{\cos\varphi}$, где $\varphi$ — линейный угол двугранного угла при боковом ребре $SD$.`,
answer: '-130',
sol: R`Координаты $A(0;0;0)$, $B(1;0;0)$, $C(1;1;0)$, $D(0;1;0)$, $S(1;0;3)$. Для двугранного угла при ребре $SD$ берём в гранях $SAD$ и $SCD$ векторы из $D$, перпендикулярные $DS$. Вычисление даёт $\cos\varphi=-\dfrac{1}{10}$, поэтому $\dfrac{13}{\cos\varphi}=-130$.`,
ref: 'Латотин «Геометрия, 10 кл.», разд. 4' },
{ idx: 28, type: 'open', topic: 'equations', subtopic: 'eq-rational', diff: 4,
text: R`Найдите сумму целых решений неравенства $\dfrac{(x^{2}-x-12)(6-x)^{2}}{6-x^{2}-x}\ge0$.`,
answer: '13',
sol: R`После сокращения на $(x+3)$ (при $x\ne-3$): $\dfrac{(x-4)(6-x)^{2}}{-(x-2)}\ge0$. Множитель $(6-x)^{2}\ge0$, поэтому решение — промежуток $(2;4]$ и отдельная точка $x=6$. Целые решения $3,4,6$; их сумма $13$.`,
ref: 'Арефьева «Алгебра, 9 кл.», гл. 3' },
{ idx: 29, type: 'open', topic: 'word-sequences', subtopic: 'word-problems', diff: 5,
text: R`От пристани $B$ отплывает плот и одновременно против течения отходит катер. Доплыв до пристани $A$ (на расстоянии $s_1$ от $B$ выше по течению), катер разворачивается и плывёт к пристани $C$ (на расстоянии $s_2$ ниже по течению от $B$). Найдите наибольшее возможное значение скорости катера (в км/ч) в стоячей воде, при которой он прибудет к $C$ не раньше плота, если скорость течения равна $4$ км/ч и $s_1:s_2=7:2$.`,
answer: '32',
sol: R`Пусть $u$ — скорость катера, $s_1=7k$, $s_2=2k$. Время плота $\dfrac{2k}{4}=\dfrac{k}{2}$, время катера $\dfrac{7k}{u-4}+\dfrac{9k}{u+4}$. Наибольшему $u$ отвечает равенство $\dfrac{7}{u-4}+\dfrac{9}{u+4}=\dfrac12$, откуда $u^{2}-32u=0$, $u=32$.`,
ref: 'Арефьева «Алгебра, 9 кл.», гл. 1' },
{ idx: 30, type: 'open', topic: 'stereometry', subtopic: 'ster-polyhedra', diff: 5,
text: R`В правильной треугольной пирамиде $SABC$ с вершиной $S$ проведена медиана $CM$ треугольника $SBC$ ($M$ — середина $SB$); $BC=2\sqrt7$, $SB=\sqrt{85}$. Через середину $K$ ребра $SC$ проведена прямая $KD$, параллельная ребру $AB$. Через точку $A$ проведена прямая, пересекающая прямые $CM$ и $KD$ в точках $P$ и $T$ соответственно. Найдите увеличенную в $18$ раз длину отрезка $PT$.`,
answer: '45',
sol: R`Введём координаты основания (сторона $2\sqrt7$) и вершины $S$ (из $SB=\sqrt{85}$ высота $h^{2}=\dfrac{227}{3}$). Прямая через $A$, пересекающая $CM$ и $KD$, определяется условием коллинеарности: $P$ делит $CM$ так, что $\lambda=\dfrac23$, а $T$ лежит на $KD$. Тогда $PT^{2}=\left(\dfrac{2\sqrt7}{3}\right)^{2}+\left(\dfrac{2\sqrt{21}}{9}\right)^{2}+\left(\dfrac{h}{6}\right)^{2}=\dfrac{2025}{324}$, откуда $PT=\dfrac{45}{18}=\dfrac52$. Увеличенная в $18$ раз длина — $45$.`,
ref: 'Латотин «Геометрия, 11 кл.», разд. 1' },
];
/* ── Сборка 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_ct2018_v1 (${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_ct2018_v1.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 → «Варианты» → «ЦТ-2018».\n`);
} catch (e) {
db.exec('ROLLBACK');
console.error('\n✗ Ошибка записи, откат транзакции:', e.message);
process.exitCode = 1;
}
db.close();