c86d5b9ad4
Пробник ЦТ по математике 2016, Вариант 1 (А1–А18 + В1–В12) для трека exam-prep ctmath. Источник: чистый PDF ЦТ 2016.pdf. ВСЕ 30 ответов решены и сверены с официальной таблицей (стр.35, столбец Вариант 1) — полное совпадение, включая B5=-22, B9=712, B11=56, B12=724. Фигурные задания (А2 угол через MN||BC, А3 числа на прямой, А6 таблица, А7 площадь по координатам, А8 область значений, А11 круговая диаграмма) реконструированы/адаптированы в самодостаточные авто-проверяемые формы. VARIANT_LABEL 113 -> 'ЦТ-2016'. DRY-RUN 30/30, self-check и структурный KaTeX — зелёные. Запись в БД — пользователь: node backend/scripts/seed_ctmath_ct2016_v1.js --apply Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
385 lines
32 KiB
JavaScript
385 lines
32 KiB
JavaScript
'use strict';
|
||
/* ───────────────────────────────────────────────────────────────────────────
|
||
seed_ctmath_ct2016_v1.js
|
||
Чистый вариант-пробник для трека exam-prep `ctmath`.
|
||
|
||
Источник: Централизованное тестирование (ЦТ) по математике, 2016, Вариант 1.
|
||
Формат: Часть А = А1–А18 (закрытые, 5 вариантов), Часть В = В1–В12 (открытые).
|
||
Всего 30 заданий. Перенабрано вручную в KaTeX по PDF:
|
||
F:\!Рабочие\ЦТ\Математика\Математика\ЦТ-ЦЭ\ЦТ 2016.pdf (10 вариантов, табл. ответов стр.35).
|
||
|
||
⚠️ Ответы решены самостоятельно и СВЕРЕНЫ с официальной таблицей ответов
|
||
(стр. 35, столбец «Вариант 1»): ВСЕ 30 совпали, включая B5=-22, B9=712, B11=56,
|
||
B12=724. variant=113 (после ЦТ-2015 = 112).
|
||
|
||
Адаптации/реконструкции заданий-«с-картинкой» (смысл/ответ сохранены, авто-проверка):
|
||
• А2 (∠ по рисунку треугольника) → та же задача с явным условием $MN\parallel BC$
|
||
(даёт официальный ответ $33^\circ$);
|
||
• А3 (числа $0,k,t$ на прямой) → явно $0<k<t$, выбор верного неравенства;
|
||
• А6 (значение по таблице) → таблица перенесена в figure_html;
|
||
• А7 (площадь фигуры на сетке) → площадь многоугольника по заданным координатам
|
||
вершин (формула шнуровки), $S=35{,}5$ см²;
|
||
• А8 (целые значения функции по графику) → область значений задана отрезком $[-4;6]$;
|
||
• А11 (круговая диаграмма) → градусные меры секторов даны в тексте.
|
||
|
||
Идемпотентность: upsert по UNIQUE(exam_key, variant, task_idx).
|
||
Запуск:
|
||
node backend/scripts/seed_ctmath_ct2016_v1.js # DRY-RUN (по умолчанию)
|
||
node backend/scripts/seed_ctmath_ct2016_v1.js --apply # запись в БД
|
||
|
||
⚠️ Массовую запись в БД запускает ПОЛЬЗОВАТЕЛЬ вручную. Без --apply ничего не пишется.
|
||
─────────────────────────────────────────────────────────────────────────── */
|
||
|
||
const { DatabaseSync } = require('node:sqlite');
|
||
const path = require('path');
|
||
|
||
const APPLY = process.argv.includes('--apply');
|
||
const EXAM = 'ctmath';
|
||
const VARIANT = 113;
|
||
const PROV = 'ЦТ–2016, Вариант 1';
|
||
const R = String.raw;
|
||
|
||
const L = ['а', 'б', 'в', 'г', 'д'];
|
||
const mc = (...html) => html.map((h, i) => [L[i], h]);
|
||
|
||
const TD = 'style="border:1px solid #99a;padding:3px 12px"';
|
||
|
||
/* ── 30 заданий ─────────────────────────────────────────────────────────── */
|
||
const TASKS = [
|
||
// ── Часть A: А1–А18 ──────────────────────────────────────────────────────
|
||
{ idx: 1, type: 'mc', topic: 'numbers', subtopic: 'num-divisibility', diff: 1,
|
||
text: R`Определите наименьшее натуральное число, кратное $2$, которое при делении на $15$ даёт неполное частное, равное $3$.`,
|
||
opts: mc('$44$', '$50$', '$48$', '$18$', '$46$'),
|
||
answer: 'д',
|
||
sol: R`Число имеет вид $15\cdot3+r=45+r$, где $0\le r<15$. Наименьшее чётное получается при $r=1$: это $46$.`,
|
||
ref: 'Герасимов «Математика, 5 кл.», ч. 1, гл. 3' },
|
||
|
||
{ idx: 2, type: 'mc', topic: 'planimetry', subtopic: 'plan-triangles', diff: 2,
|
||
text: R`В треугольнике $ABC$ точки $M$ и $N$ лежат на сторонах $AB$ и $AC$ соответственно, причём $MN\parallel BC$. Известно, что $\angle ACB=38^\circ$ и $\angle AMN=109^\circ$. Найдите градусную меру угла $BAC$.`,
|
||
opts: mc('$33^\circ$', '$52^\circ$', '$26^\circ$', '$30^\circ$', '$60^\circ$'),
|
||
answer: 'а',
|
||
sol: R`Так как $MN\parallel BC$, то $\angle ABC=\angle AMN=109^\circ$ (соответственные углы). Тогда $\angle BAC=180^\circ-\angle ABC-\angle ACB=180^\circ-109^\circ-38^\circ=33^\circ$.`,
|
||
ref: 'Казаков «Геометрия, 7 кл.», гл. 3' },
|
||
|
||
{ idx: 3, type: 'mc', topic: 'numbers', subtopic: 'num-real', diff: 1,
|
||
text: R`На координатной прямой отмечены числа $0$, $k$, $t$, причём $0<k<t$. Укажите верное утверждение.`,
|
||
opts: mc('$-3k<-3t$', '$\dfrac1t>\dfrac1k$', '$3k>3t$', '$\dfrac{k}{-3}>\dfrac{t}{-3}$', '$k>t$'),
|
||
answer: 'г',
|
||
sol: R`При делении неравенства $k<t$ на отрицательное число $-3$ знак меняется: $\dfrac{k}{-3}>\dfrac{t}{-3}$. Остальные утверждения неверны.`,
|
||
ref: 'Арефьева «Алгебра, 8 кл.», гл. 1' },
|
||
|
||
{ idx: 4, type: 'mc', topic: 'expressions', subtopic: 'expr-powers-roots', diff: 2,
|
||
text: R`Значение выражения $3^{-5}:\left(5\tfrac25\right)^{-3}$ равно:`,
|
||
opts: mc('$\dfrac{27}{125}$', '$\dfrac{4}{5}$', '$\dfrac{125}{81}$', '$\dfrac{81}{125}$', '$\dfrac{125}{243}$'),
|
||
answer: 'г',
|
||
sol: R`$5\tfrac25=\dfrac{27}{5}$. Тогда $3^{-5}:\left(\dfrac{27}{5}\right)^{-3}=3^{-5}\cdot\dfrac{3^{9}}{5^{3}}=\dfrac{3^{4}}{5^{3}}=\dfrac{81}{125}$.`,
|
||
ref: 'Арефьева «Алгебра, 7 кл.», гл. 1, § 4' },
|
||
|
||
{ idx: 5, type: 'mc', topic: 'word-sequences', subtopic: 'seq-progressions', diff: 1,
|
||
text: R`Укажите формулу $n$-го члена арифметической прогрессии $(a_n)$, если $a_1=2$, $a_2=5$.`,
|
||
opts: mc('$a_n=-3n+5$', '$a_n=3n+5$', '$a_n=3n-1$', '$a_n=2n+5$', '$a_n=5n+2$'),
|
||
answer: 'в',
|
||
sol: R`$d=a_2-a_1=3$, поэтому $a_n=a_1+(n-1)d=2+3(n-1)=3n-1$.`,
|
||
ref: 'Арефьева «Алгебра, 9 кл.», гл. 4' },
|
||
|
||
{ idx: 6, type: 'mc', topic: 'word-sequences', subtopic: 'word-problems', diff: 1,
|
||
text: R`Величины $a$ и $b$ прямо пропорциональны. Используя данные таблицы, найдите неизвестное значение величины $a$.`,
|
||
fig: R`<table class="task-fig" style="border-collapse:collapse;margin:6px 0"><tr><td ${TD}><i>a</i></td><td ${TD}></td><td ${TD}>1,9</td></tr><tr><td ${TD}><i>b</i></td><td ${TD}>108</td><td ${TD}>7,6</td></tr></table>`,
|
||
opts: mc('$32$', '$27$', '$22$', '$14$', '$56$'),
|
||
answer: 'б',
|
||
sol: R`При прямой пропорциональности $\dfrac{a}{b}$ постоянно: $\dfrac{a}{108}=\dfrac{1{,}9}{7{,}6}=0{,}25$, откуда $a=27$.`,
|
||
ref: 'Герасимов «Математика, 6 кл.», гл. 2' },
|
||
|
||
{ idx: 7, type: 'mc', topic: 'planimetry', subtopic: 'plan-quadrilaterals', diff: 2,
|
||
text: R`Найдите площадь (в см²) многоугольника с вершинами $A(2;2)$, $B(9;2)$, $C(9;7)$, $D(3;7)$, $E(2;8)$ (координаты — в сантиметрах).`,
|
||
opts: mc('$35{,}5$', '$28$', '$36$', '$49$', '$35$'),
|
||
answer: 'а',
|
||
sol: R`По формуле площади многоугольника по координатам вершин (формула шнуровки) $2S=\bigl|{-}14+45+42+10-12\bigr|=71$, поэтому $S=35{,}5$ см².`,
|
||
ref: 'Казаков «Геометрия, 8 кл.», гл. 4' },
|
||
|
||
{ idx: 8, type: 'mc', topic: 'functions', subtopic: 'fn-properties', diff: 2,
|
||
text: R`Областью значений функции $y=f(x)$ на промежутке $(-5;5)$ является отрезок $[-4;6]$. Найдите сумму всех целых значений, которые принимает функция.`,
|
||
opts: mc('$12$', '$14$', '$7$', '$10$', '$11$'),
|
||
answer: 'д',
|
||
sol: R`Функция принимает все целые значения от $-4$ до $6$. Их сумма $-4-3-2-1+0+1+2+3+4+5+6=11$.`,
|
||
ref: 'Арефьева «Алгебра, 9 кл.», гл. 2' },
|
||
|
||
{ idx: 9, type: 'mc', topic: 'numbers', subtopic: 'num-divisibility', diff: 1,
|
||
text: R`Найдите значение выражения НОК$(12;18;36)$ + НОД$(39;52)$.`,
|
||
opts: mc('$26$', '$50$', '$48$', '$72$', '$49$'),
|
||
answer: 'д',
|
||
sol: R`НОК$(12;18;36)=36$, НОД$(39;52)=13$. Сумма $36+13=49$.`,
|
||
ref: 'Герасимов «Математика, 6 кл.», гл. 1' },
|
||
|
||
{ idx: 10, type: 'mc', topic: 'stereometry', subtopic: 'ster-angles-distances', diff: 2,
|
||
text: R`Прямая $a$ пересекает плоскость $\alpha$ в точке $A$ и образует с плоскостью угол $60^\circ$. Точка $B$ лежит на прямой $a$, причём $AB=6\sqrt2$. Найдите расстояние от точки $B$ до плоскости $\alpha$.`,
|
||
opts: mc('$3\sqrt2$', '$3\sqrt6$', '$3\sqrt3$', '$6\sqrt6$', '$6\sqrt3$'),
|
||
answer: 'б',
|
||
sol: R`Расстояние от $B$ до плоскости равно $AB\sin60^\circ=6\sqrt2\cdot\dfrac{\sqrt3}{2}=3\sqrt6$.`,
|
||
ref: 'Латотин «Геометрия, 10 кл.», разд. 3' },
|
||
|
||
{ idx: 11, type: 'mc', topic: 'word-sequences', subtopic: 'word-problems', diff: 2,
|
||
text: R`На круговой диаграмме распределения посевных площадей секторам отвечают: ячмень — $63^\circ$, пшеница — $108^\circ$, гречиха — $36^\circ$, рожь — $18^\circ$, остальное — овёс. Сколько гектаров отведено под гречиху, если овсом засеяно на $390$ га больше, чем рожью?`,
|
||
opts: mc('$110$ га', '$150$ га', '$120$ га', '$160$ га', '$180$ га'),
|
||
answer: 'в',
|
||
sol: R`Овёс: $360^\circ-63^\circ-108^\circ-36^\circ-18^\circ=135^\circ$. Разность «овёс минус рожь» $=135^\circ-18^\circ=117^\circ$ отвечает $390$ га, поэтому $1^\circ\to\dfrac{390}{117}=\dfrac{10}{3}$ га. Гречиха: $36^\circ\cdot\dfrac{10}{3}=120$ га.`,
|
||
ref: 'Герасимов «Математика, 6 кл.», гл. 2' },
|
||
|
||
{ idx: 12, type: 'mc', topic: 'planimetry', subtopic: 'plan-triangles', diff: 2,
|
||
text: R`Длины всех сторон треугольника — целые числа. Если длина одной стороны равна $1$, а другой — $3$, то периметр треугольника равен:`,
|
||
opts: mc('$7$', '$14$', '$21$', '$6$', '$8$'),
|
||
answer: 'а',
|
||
sol: R`По неравенству треугольника третья сторона $c$ удовлетворяет $|3-1|<c<3+1$, то есть $2<c<4$, целое $c=3$. Периметр $1+3+3=7$.`,
|
||
ref: 'Казаков «Геометрия, 7 кл.», гл. 3' },
|
||
|
||
{ idx: 13, type: 'mc', topic: 'expressions', subtopic: 'expr-fractions', diff: 2,
|
||
text: R`Сократите дробь $\dfrac{x^{2}-9}{8x^{2}-23x-3}$.`,
|
||
opts: mc('$\dfrac{x-3}{8x+1}$', '$\dfrac{x+3}{8x-1}$', '$\dfrac{x+3}{x+1}$', '$\dfrac{x+3}{8x+1}$', '$\dfrac{x-3}{8x-1}$'),
|
||
answer: 'г',
|
||
sol: R`$8x^{2}-23x-3=(x-3)(8x+1)$, поэтому $\dfrac{(x-3)(x+3)}{(x-3)(8x+1)}=\dfrac{x+3}{8x+1}$.`,
|
||
ref: 'Арефьева «Алгебра, 8 кл.», гл. 1' },
|
||
|
||
{ idx: 14, type: 'mc', topic: 'word-sequences', subtopic: 'word-problems', diff: 2,
|
||
text: R`Из пунктов $A$ и $B$, расстояние между которыми $160$ км, одновременно навстречу друг другу выехали два автомобиля с постоянными скоростями: из $A$ — со скоростью $a$ км/ч, из $B$ — со скоростью $b$ км/ч. Составьте выражение для расстояния (в километрах) от пункта $A$ до места встречи.`,
|
||
opts: mc('$\dfrac{160a}{a+b}$', '$\dfrac{160}{a+b}$', '$\dfrac{160(a+b)}{a}$', '$\dfrac{160b}{a+b}$', '$\dfrac{160(a+b)}{b}$'),
|
||
answer: 'а',
|
||
sol: R`Время до встречи $t=\dfrac{160}{a+b}$. Расстояние от $A$: $a\cdot t=\dfrac{160a}{a+b}$.`,
|
||
ref: 'Арефьева «Алгебра, 7 кл.», гл. 3' },
|
||
|
||
{ idx: 15, type: 'mc', topic: 'stereometry', subtopic: 'ster-rotation', diff: 3,
|
||
text: R`Точки $A,B,C$ лежат на большой окружности сферы так, что треугольник $ABC$ равносторонний. Если $AB=3\sqrt6$, то площадь сферы равна:`,
|
||
opts: mc('$144\pi$', '$72\pi$', '$36\pi$', '$18\pi$', '$68\pi$'),
|
||
answer: 'б',
|
||
sol: R`Сторона равностороннего треугольника, вписанного в окружность радиуса $R$ (это радиус сферы), равна $R\sqrt3$. Из $3\sqrt6=R\sqrt3$ следует $R=3\sqrt2$, $R^{2}=18$. Площадь сферы $4\pi R^{2}=72\pi$.`,
|
||
ref: 'Латотин «Геометрия, 11 кл.», разд. 3' },
|
||
|
||
{ idx: 16, type: 'mc', topic: 'trigonometry', subtopic: 'trig-identities', diff: 2,
|
||
text: R`Упростите выражение $5\cos(7\pi+\alpha)+\sin\left(\dfrac{11\pi}{2}-\alpha\right)$.`,
|
||
opts: mc('$6\cos\alpha$', '$-6\cos\alpha$', '$-4\cos\alpha$', '$4\cos\alpha$', '$6\sin\alpha$'),
|
||
answer: 'б',
|
||
sol: R`$\cos(7\pi+\alpha)=\cos(\pi+\alpha)=-\cos\alpha$; $\ \sin\left(\dfrac{11\pi}{2}-\alpha\right)=\sin\left(\dfrac{3\pi}{2}-\alpha\right)=-\cos\alpha$. Сумма $5(-\cos\alpha)+(-\cos\alpha)=-6\cos\alpha$.`,
|
||
ref: 'Арефьева «Алгебра, 10 кл.», гл. 1, § 10' },
|
||
|
||
{ idx: 17, type: 'mc', topic: 'functions', subtopic: 'fn-properties', diff: 2,
|
||
text: R`График функции, заданной формулой $y=kx+b$, симметричен относительно начала координат и проходит через точку $A(2;10)$. Значение выражения $k+b$ равно:`,
|
||
opts: mc('$-8$', '$2$', '$5$', '$10$', '$12$'),
|
||
answer: 'в',
|
||
sol: R`Симметрия относительно начала координат означает нечётность функции, поэтому $b=0$. Тогда $y=kx$, и из $10=2k$ получаем $k=5$. Значит $k+b=5$.`,
|
||
ref: 'Арефьева «Алгебра, 8 кл.», гл. 3' },
|
||
|
||
{ idx: 18, type: 'mc', topic: 'equations', subtopic: 'eq-rational', diff: 3,
|
||
text: R`Сумма всех натуральных решений неравенства $(6-x)\cdot(x+4)^{8}\cdot(x-13)^{2}\ge0$ равна:`,
|
||
opts: mc('$11$', '$19$', '$21$', '$34$', '$36$'),
|
||
answer: 'г',
|
||
sol: R`Множители $(x+4)^{8}\ge0$ и $(x-13)^{2}\ge0$, поэтому знак выражения определяет $(6-x)$. Неравенство выполнено при $x\le6$, а также при $x=13$ (там левая часть равна $0$). Натуральные решения $1,2,3,4,5,6,13$; их сумма $34$.`,
|
||
ref: 'Арефьева «Алгебра, 9 кл.», гл. 3' },
|
||
|
||
// ── Часть B: В1–В12 ──────────────────────────────────────────────────────
|
||
{ idx: 19, type: 'open', topic: 'word-sequences', subtopic: 'word-problems', diff: 3,
|
||
text: R`Для покраски стен общей площадью $175$ м² планируется закупка краски. Банка объёмом $2{,}5$ л стоит $75\,000$ рублей, банка объёмом $10$ л — $270\,000$ рублей. Какую минимальную сумму (в рублях) потратят на покупку необходимого количества краски, если её расход составляет $0{,}2$ л/м²?`,
|
||
answer: '960000',
|
||
sol: R`Нужно $175\cdot0{,}2=35$ л краски. Литр в банке $10$ л дешевле ($27\,000$ против $30\,000$). Минимум даёт набор $3$ банки по $10$ л и $2$ банки по $2{,}5$ л: $30+5=35$ л за $3\cdot270\,000+2\cdot75\,000=960\,000$ рублей.`,
|
||
ref: 'Арефьева «Алгебра, 7 кл.», гл. 3' },
|
||
|
||
{ idx: 20, type: 'open', topic: 'equations', subtopic: 'eq-irrational', diff: 3,
|
||
text: R`Найдите сумму корней (корень, если он единственный) уравнения $2x\cdot\sqrt{7x+18}=x^{2}+7x+18$.`,
|
||
answer: '9',
|
||
sol: R`Пусть $u=\sqrt{7x+18}\ge0$, тогда $u^{2}=7x+18$ и уравнение примет вид $x^{2}-2xu+u^{2}=0$, то есть $(x-u)^{2}=0$, $x=u$. Значит $x=\sqrt{7x+18}$, $x^{2}-7x-18=0$, $x=9$ (корень $-2$ не подходит, так как $x\ge0$).`,
|
||
ref: 'Арефьева «Алгебра, 10 кл.», гл. 2, § 17' },
|
||
|
||
{ idx: 21, type: 'open', topic: 'planimetry', subtopic: 'plan-quadrilaterals', diff: 4,
|
||
text: R`В равнобедренную трапецию, площадь которой равна $36\tfrac18$, вписана окружность. Сумма двух углов трапеции равна $60^\circ$. Найдите периметр трапеции.`,
|
||
answer: '34',
|
||
sol: R`Два равных угла при большем основании дают $60^\circ$, значит острый угол равен $30^\circ$. Для описанной около окружности трапеции $a+b=2l$ (сумма оснований равна сумме боковых сторон). Высота $h=l\sin30^\circ=\dfrac{l}{2}$, площадь $S=\dfrac12(a+b)h=\dfrac{l^{2}}{2}=\dfrac{289}{8}$, откуда $l=\dfrac{17}{2}$. Периметр $a+b+2l=4l=34$.`,
|
||
ref: 'Казаков «Геометрия, 8 кл.», гл. 4' },
|
||
|
||
{ idx: 22, type: 'open', topic: 'equations', subtopic: 'eq-rational', diff: 2,
|
||
text: R`Пусть $(x;y)$ — решение системы уравнений $\begin{cases}5x-y=5,\\ 5x^{2}-xy+x=12.\end{cases}$ Найдите значение выражения $5y-x$.`,
|
||
answer: '23',
|
||
sol: R`Из первого уравнения $y=5x-5$. Подставив во второе: $5x^{2}-x(5x-5)+x=12$, то есть $6x=12$, $x=2$, $y=5$. Тогда $5y-x=25-2=23$.`,
|
||
ref: 'Арефьева «Алгебра, 9 кл.», гл. 1' },
|
||
|
||
{ idx: 23, type: 'open', topic: 'expressions', subtopic: 'expr-powers-roots', diff: 3,
|
||
text: R`Найдите значение выражения $2\cdot\left(\sqrt[3]{5\sqrt5}-\sqrt[3]{6\sqrt6}\right):\left(\sqrt5+\sqrt6\right)-4\sqrt{30}$.`,
|
||
answer: '-22',
|
||
sol: R`$\sqrt[3]{5\sqrt5}=\sqrt5$ и $\sqrt[3]{6\sqrt6}=\sqrt6$. Тогда $\dfrac{2(\sqrt5-\sqrt6)}{\sqrt5+\sqrt6}=\dfrac{2(\sqrt5-\sqrt6)^{2}}{5-6}=-2(11-2\sqrt{30})=-22+4\sqrt{30}$. Вычитая $4\sqrt{30}$, получаем $-22$.`,
|
||
ref: 'Арефьева «Алгебра, 10 кл.», гл. 1' },
|
||
|
||
{ idx: 24, type: 'open', topic: 'equations', subtopic: 'eq-exponential', diff: 3,
|
||
text: R`Найдите сумму корней уравнения $(x-81)\cdot\left(9^{x}+8\cdot3^{x+1}-81\right)=0$.`,
|
||
answer: '82',
|
||
sol: R`Первый множитель даёт $x=81$. Во втором при $t=3^{x}$: $9^{x}+24\cdot3^{x}-81=t^{2}+24t-81=0$, $t=3$ (корень $t=-27$ отброшен), откуда $3^{x}=3$, $x=1$. Сумма корней $81+1=82$.`,
|
||
ref: 'Арефьева «Алгебра, 11 кл.», гл. 2' },
|
||
|
||
{ idx: 25, type: 'open', topic: 'stereometry', subtopic: 'ster-polyhedra', diff: 4,
|
||
text: R`Найдите площадь боковой поверхности правильной треугольной пирамиды, если длина биссектрисы её основания равна $4\sqrt3$, а плоский угол при вершине равен $2\operatorname{arctg}\dfrac45$.`,
|
||
answer: '60',
|
||
sol: R`Биссектриса (она же медиана) равностороннего основания равна $\dfrac{a\sqrt3}{2}=4\sqrt3$, откуда $a=8$. В боковой грани половина угла при вершине $\beta=\operatorname{arctg}\dfrac45$, и $\operatorname{tg}\beta=\dfrac{a/2}{l}=\dfrac45$, поэтому апофема $l=5$. Площадь грани $\dfrac12\cdot8\cdot5=20$, боковая поверхность $3\cdot20=60$.`,
|
||
ref: 'Латотин «Геометрия, 11 кл.», разд. 1' },
|
||
|
||
{ idx: 26, type: 'open', topic: 'equations', subtopic: 'eq-logarithmic', diff: 4,
|
||
text: R`Найдите сумму наименьшего и наибольшего целых решений неравенства $\log_{1/15}\bigl(\log_{2}\log_{9}(x+15)\bigr)>0$.`,
|
||
answer: '60',
|
||
sol: R`Основание $\dfrac{1}{15}<1$, поэтому $0<\log_{2}\log_{9}(x+15)<1$, откуда $1<\log_{9}(x+15)<2$, то есть $9<x+15<81$, $-6<x<66$. Целые решения от $-5$ до $65$; их наименьшее и наибольшее в сумме дают $-5+65=60$.`,
|
||
ref: 'Арефьева «Алгебра, 11 кл.», гл. 3' },
|
||
|
||
{ idx: 27, type: 'open', topic: 'trigonometry', subtopic: 'trig-equations', diff: 4,
|
||
text: R`Найдите (в градусах) сумму корней уравнения $10\sin5x\cos5x+5\sin10x\cos18x=0$ на промежутке $(110^\circ;170^\circ)$.`,
|
||
answer: '712',
|
||
sol: R`$10\sin5x\cos5x=5\sin10x$, поэтому $5\sin10x(1+\cos18x)=0$. Из $\sin10x=0$: $x=18^\circ k$ — корни $126^\circ,144^\circ,162^\circ$. Из $\cos18x=-1$: $x=10^\circ+20^\circ k$ — корни $130^\circ,150^\circ$. Сумма $126+144+162+130+150=712$.`,
|
||
ref: 'Арефьева «Алгебра, 10 кл.», гл. 1, § 8' },
|
||
|
||
{ idx: 28, type: 'open', topic: 'equations', subtopic: 'eq-rational', diff: 4,
|
||
text: R`Найдите произведение наименьшего и наибольшего целых решений неравенства $|15-2x-x^{2}|+4<4\cdot|3-x|+|x+5|$.`,
|
||
answer: '-24',
|
||
sol: R`Так как $|15-2x-x^{2}|=|x+5|\cdot|x-3|$, неравенство равносильно $(|x+5|-4)(|x-3|-1)<0$, его решение — $(-9;-1)\cup(2;4)$. Целые решения $-8,-7,\ldots,-2$ и $3$; произведение наименьшего и наибольшего $(-8)\cdot3=-24$.`,
|
||
ref: 'Арефьева «Алгебра, 9 кл.», гл. 3' },
|
||
|
||
{ idx: 29, type: 'open', topic: 'planimetry', subtopic: 'plan-triangles', diff: 5,
|
||
text: R`Точка $A$ движется по периметру треугольника $KMP$. Точки $K_1,M_1,P_1$ лежат на медианах треугольника $KMP$ и делят их в отношении $11:3$, считая от вершин. По периметру треугольника $K_1M_1P_1$ движется точка $B$ со скоростью, в пять раз большей скорости точки $A$. Сколько раз точка $B$ обойдёт периметр треугольника $K_1M_1P_1$ за то время, за которое точка $A$ дважды обойдёт периметр треугольника $KMP$?`,
|
||
answer: '56',
|
||
sol: R`Точки на медианах в отношении $11:3$ от вершин дают треугольник $K_1M_1P_1$, подобный $KMP$ с коэффициентом $\dfrac{5}{28}$ (например, $\vec{K_1M_1}=\dfrac{5}{28}\vec{KM}$). За два обхода $A$ (путь $2P$) точка $B$ проходит $5\cdot2P=10P$, что составляет $\dfrac{10P}{(5/28)P}=56$ обходов.`,
|
||
ref: 'Казаков «Геометрия, 9 кл.», гл. 2' },
|
||
|
||
{ idx: 30, type: 'open', topic: 'stereometry', subtopic: 'ster-polyhedra', diff: 5,
|
||
text: R`Объём прямоугольного параллелепипеда $ABCDA_1B_1C_1D_1$ равен $1728$. Точка $P$ лежит на боковом ребре $CC_1$ так, что $CP:PC_1=2:1$. Через точку $P$, вершину $D$ и середину бокового ребра $AA_1$ проведена секущая плоскость, делящая параллелепипед на две части. Найдите объём меньшей из частей.`,
|
||
answer: '724',
|
||
sol: R`В единичных долях рёбер ($u,v,w\in[0;1]$) секущая плоскость задаётся уравнением $-\dfrac{2u}{3}+\dfrac{v}{2}+w=\dfrac12$. Объём части, где $w$ больше плоскости, равен $\dfrac{181}{432}$ объёма параллелепипеда — это меньше половины. Значит меньшая часть $=\dfrac{181}{432}\cdot1728=181\cdot4=724$.`,
|
||
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_ct2016_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_ct2016_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 → «Варианты» → «ЦТ-2016».\n`);
|
||
} catch (e) {
|
||
db.exec('ROLLBACK');
|
||
console.error('\n✗ Ошибка записи, откат транзакции:', e.message);
|
||
process.exitCode = 1;
|
||
}
|
||
db.close();
|