diff --git a/backend/scripts/seed_math_ct2021.js b/backend/scripts/seed_math_ct2021.js new file mode 100644 index 0000000..5367869 --- /dev/null +++ b/backend/scripts/seed_math_ct2021.js @@ -0,0 +1,259 @@ +'use strict'; +/** + * ЦТ 2021 Математика — Вариант 1 + * Источник: Централизованное тестирование, сборник тестов, РИКЗ, 2021 г. + * Вариант 1: A1-A18 + B1-B14 (32 задания) + */ +const db = require('../src/db/db'); + +const MATH_ID = 3; +const T = { + arithmetic:16, word:17, numbers:18, trig:19, + quadratic:20, progression:21, inequalities:22, geometry:23, + functions:24, log:25, expineq:26, equations:27, stats:28, +}; +function getTopic(name){ + const ex=db.prepare('SELECT id FROM topics WHERE subject_id=? AND LOWER(name)=LOWER(?)').get(MATH_ID,name); + if(ex) return ex.id; + return Number(db.prepare('INSERT INTO topics (subject_id,name) VALUES (?,?)').run(MATH_ID,name).lastInsertRowid); +} +const Tx = { + stereo: getTopic('Стереометрия'), + sets: getTopic('Числовые промежутки'), + similar: getTopic('Подобные фигуры'), + circle: getTopic('Окружность и круг'), + parab: getTopic('Парабола'), +}; + +const existing=new Set( + db.prepare('SELECT text FROM questions WHERE subject_id=3').all().map(q=>q.text.slice(0,80).trim()) +); +let added=0,skipped=0; +const insQ=db.prepare(`INSERT INTO questions (subject_id,topic_id,text,type,difficulty,year,explanation) VALUES (?,?,?,?,?,?,?)`); +const insO=db.prepare(`INSERT INTO options (question_id,text,is_correct,order_index) VALUES (?,?,?,?)`); + +function q(tid,text,opts,diff,year,expl,type='single'){ + const key=text.slice(0,80).trim(); + if(existing.has(key)){skipped++;return;} + existing.add(key); + const r=insQ.run(MATH_ID,tid,text,type,diff,year||null,expl||null); + const id=r.lastInsertRowid; + opts.forEach((o,i)=>insO.run(id,o.t,o.c?1:0,i)); + added++; +} +function fb(tid,text,ans,diff,year,expl){ + const a=String(ans); + q(tid,text,[{t:a,c:true},{t:String(Number(ans)+1),c:false},{t:String(Number(ans)-1),c:false},{t:String(Number(ans)*2||'0'),c:false}],diff,year,expl,'fill-blank'); +} + +const run=db.transaction(()=>{ + +// ══════════════════════════════════════════════════════ +// ЧАСТЬ A — ЦТ 2021 Вариант 1 +// ══════════════════════════════════════════════════════ + +// A1 — Равнобедренный треугольник +q(T.geometry,`Треугольник \\(ABC\\) — равнобедренный с основанием \\(AB\\). По данным рисунка (угол при вершине \\(C\\) равен 56°) найдите градусную меру угла \\(BAC\\) треугольника \\(ABC\\): +1) 62°; 2) 68°; 3) 34°; 4) 64°; 5) 28°.`, +[{t:'1',c:true},{t:'2',c:false},{t:'3',c:false},{t:'4',c:false},{t:'5',c:false}], +1,2021,'Равнобедренный с основанием \\(AB\\) → \\(AC=BC\\) → базовые углы \\(\\angle BAC=\\angle ABC\\). \\(\\angle BAC=(180-56)/2=62°\\).'); + +// A2 — Смешанная дробь +q(T.arithmetic,`Среди дробей \\(\\dfrac{13}{7};\\;\\dfrac{15}{7};\\;\\dfrac{30}{7};\\;\\dfrac{27}{7};\\;\\dfrac{18}{7}\\) укажите ту, которая равна дроби \\(4\\dfrac{2}{7}\\): +1) \\(\\dfrac{13}{7}\\); 2) \\(\\dfrac{15}{7}\\); 3) \\(\\dfrac{30}{7}\\); 4) \\(\\dfrac{27}{7}\\); 5) \\(\\dfrac{18}{7}\\).`, +[{t:'3',c:true},{t:'1',c:false},{t:'2',c:false},{t:'4',c:false},{t:'5',c:false}], +1,2021,'\\(4\\frac{2}{7}=\\frac{4\\cdot7+2}{7}=\\frac{30}{7}\\).'); + +// A3 — Решения уравнения x+y=12 +q(T.equations,`Даны пары значений переменных \\(x\\) и \\(y\\): +1) \\((3;9)\\); 2) \\((-15;3)\\); 3) \\((0;12)\\); 4) \\((14;-2)\\); 5) \\((6;6)\\). +Укажите пару, которая НЕ является решением уравнения \\(x+y=12\\):`, +[{t:'2',c:true},{t:'1',c:false},{t:'3',c:false},{t:'4',c:false},{t:'5',c:false}], +1,2021,'\\(-15+3=-12\\neq12\\). Все остальные: \\(3+9=12\\), \\(0+12=12\\), \\(14+(-2)=12\\), \\(6+6=12\\).'); + +// A4 — Числа на числовой оси +q(T.inequalities,`Среди чисел \\(-7;\\;-11;\\;11;\\;-1;\\;0\\) укажите то, которое не меньше \\(-9\\) и не больше \\(-2\\): +1) \\(-7\\); 2) \\(-11\\); 3) \\(11\\); 4) \\(-1\\); 5) \\(0\\).`, +[{t:'1',c:true},{t:'2',c:false},{t:'3',c:false},{t:'4',c:false},{t:'5',c:false}], +1,2021,'Нужно \\(-9\\leq x\\leq-2\\). Из списка: \\(-7\\in[-9;-2]\\) ✓.'); + +// A5 — Деление отрезка в отношении +q(T.geometry,`Точка \\(C\\) делит отрезок \\(AB\\) в отношении \\(5:3\\), считая от точки \\(A\\). Если длина отрезка \\(AB\\) равна 24, то длина отрезка \\(CB\\) равна: +1) 14,4; 2) 9,6; 3) 6; 4) 9; 5) 15.`, +[{t:'4',c:true},{t:'1',c:false},{t:'2',c:false},{t:'3',c:false},{t:'5',c:false}], +1,2021,'\\(AC:CB=5:3\\Rightarrow CB=24\\cdot\\frac{3}{8}=9\\).'); + +// A6 — Задача на распределение масла +q(T.word,`В магазин поступило 43 коробки с маслом по 110 пачек масла в каждой. Какое наименьшее количество пачек масла необходимо продавать ежедневно, чтобы масло было распродано не более чем за 60 дней? +1) 78; 2) 81; 3) 79; 4) 83; 5) 77.`, +[{t:'3',c:true},{t:'1',c:false},{t:'2',c:false},{t:'4',c:false},{t:'5',c:false}], +1,2021,'Всего пачек: \\(43\\cdot110=4730\\). Минимум в день: \\(\\lceil4730/60\\rceil=\\lceil78{,}83...\\rceil=79\\).'); + +// A7 — Неравенство по графику функции +q(T.functions,`На рисунке изображён график функции \\(y=f(x)\\), определённой на промежутке \\([-6;\\,6]\\). Найдите количество целых значений \\(x\\), при которых выполняется неравенство \\(f(x)\\leq-3\\). (Чёрными точками отмечены узлы сетки, через которые проходит график.) +1) 7; 2) 6; 3) 5; 4) 9; 5) 8.`, +[{t:'1',c:true},{t:'2',c:false},{t:'3',c:false},{t:'4',c:false},{t:'5',c:false}], +2,2021,'По графику подсчитываем целые \\(x\\in[-6;6]\\), для которых \\(f(x)\\leq-3\\): таких 7.'); + +// A8 — Упрощение выражения с модулями +q(T.functions,`Результат упрощения выражения \\(|a-6|-|a|\\) при \\(\\dfrac{1}{6}-25\\Rightarrow x>-16\\). Целые: -15...4. Сумма: -15+4=-11.'); + +// B9 — Чётная функция: значение выражения +fb(T.functions,`Функция \\(y=f(x)\\) определена на \\(\\mathbb{R}\\). Точки \\(A\\!\\left(3;-\\frac{2}{3}\\right)\\) и \\(B\\!\\left(6;-\\frac{3}{4}\\right)\\) принадлежат графику данной функции. Найдите значение выражения \\(6f(-3)+8f(-6)\\), если граф симметричен относительно оси ординат.`, +-10, 2,2021,'Чётная функция: \\(f(-3)=f(3)=-2/3\\), \\(f(-6)=f(6)=-3/4\\). \\(6\\cdot(-2/3)+8\\cdot(-3/4)=-4-6=-10\\).'); + +// B10 — Вписанная окружность шестиугольника +fb(T.geometry,`Радиус окружности, вписанной в правильный шестиугольник, равен \\(7\\sqrt{3}\\). Найдите значение выражения \\(S/\\sqrt{3}\\), где \\(S\\) — площадь правильного шестиугольника.`, +294, 2,2021,'\\(a=2r/\\sqrt{3}=14\\). \\(S=3\\sqrt{3}\\cdot196/2=294\\sqrt{3}\\). \\(S/\\sqrt{3}=294\\).'); + +// B11 — Логарифмическое уравнение (произведение корней) +fb(T.log,`Найдите произведение корней уравнения \\(\\log_2^2 x-2\\log_2 x=\\log_2 24-\\log_2 3\\). В ответ запишите найденное произведение, увеличенное в 11 раз.`, +44, 3,2021,'\\(t^2-2t-3=0\\Rightarrow t=3\\) или \\(t=-1\\). \\(x=8\\) или \\(x=1/2\\). Произведение \\(=4\\). \\(4\\cdot11=44\\).'); + +// B12 — Несократимая дробь и НОК +fb(T.numbers,`Дана правильная несократимая дробь. При делении её знаменателя на числитель неполное частное равно 8, а остаток равен 3. Если числитель дроби увеличить на 75%, то полученная дробь будет равна \\(\\frac{1}{5}\\). Найдите наименьшее общее кратное числителя и знаменателя исходной дроби.`, +140, 3,2021,'\\(q=8p+3\\). \\(1{,}75p/(8p+3)=1/5\\Rightarrow p=4,q=35\\). НОК(4,35)=140.'); + +// B13 — Сечение цилиндра +fb(T.geometry,`Цилиндр пересечён плоскостью, параллельной оси цилиндра, так что в сечении получился квадрат площадью 100. Найдите значение выражения \\(S/\\pi\\), где \\(S\\) — площадь боковой поверхности цилиндра, если расстояние от оси цилиндра до плоскости сечения равно \\(\\sqrt{39}\\).`, +160, 3,2021,'Квадрат: сторона \\(h=10\\). Полухорда = 5. \\(r=\\sqrt{39+25}=8\\). \\(S=2\\pi\\cdot8\\cdot10=160\\pi\\). \\(S/\\pi=160\\).'); + +// B14 — Наименьшее целое решение показательного неравенства +fb(T.expineq,`Найдите наименьшее целое решение неравенства \\(8^{2x-32}+10\\cdot4^{3x-49}>56\\).`, +17, 3,2021,'После подстановки: \\(14\\cdot2^{6x-98}>56\\Rightarrow 2^{6x-98}>4\\Rightarrow6x-98>2\\Rightarrow x>16{,}7\\). Наименьшее целое: 17.'); + +}); +run(); +console.log(`Математика ЦТ 2021 V1 — добавлено: ${added}, пропущено: ${skipped}`); diff --git a/backend/scripts/seed_phys_ce2023.js b/backend/scripts/seed_phys_ce2023.js new file mode 100644 index 0000000..7d99723 --- /dev/null +++ b/backend/scripts/seed_phys_ce2023.js @@ -0,0 +1,198 @@ +'use strict'; +/** + * ЦЭ,ЦТ 2023 Физика — Вариант 1 (ЦЭ-формат) + * Источник: Сборник тестов, РИКЗ, 2023 г. + * Вариант 1: A1-A10 + B1-B20 (30 заданий) + */ +const db = require('../src/db/db'); + +const PHYS_ID = 4; +const T = { + kinem:29, dynam:30, cons:31, mol:32, + thermo:33, electro:34, dc:35, magnet:36, + emf:37, optics:38, quantum:39, waves:40, +}; +function getTopic(name) { + const ex = db.prepare('SELECT id FROM topics WHERE subject_id=? AND LOWER(name)=LOWER(?)').get(PHYS_ID,name); + if (ex) return ex.id; + return Number(db.prepare('INSERT INTO topics (subject_id,name) VALUES (?,?)').run(PHYS_ID,name).lastInsertRowid); +} +const Tx = { + measure: getTopic('Измерительные приборы'), + thermo2: getTopic('Теплопередача и влажность'), + astro: getTopic('Астрономия и гравитация'), +}; + +const existing = new Set( + db.prepare('SELECT text FROM questions WHERE subject_id=4').all().map(q=>q.text.slice(0,80).trim()) +); +let added=0, skipped=0; +const insQ = db.prepare(`INSERT INTO questions (subject_id,topic_id,text,type,difficulty,year,explanation) VALUES (?,?,?,?,?,?,?)`); +const insO = db.prepare(`INSERT INTO options (question_id,text,is_correct,order_index) VALUES (?,?,?,?)`); + +function q(tid,text,opts,diff,year,expl,type='single'){ + const key=text.slice(0,80).trim(); + if(existing.has(key)){skipped++;return;} + existing.add(key); + const r=insQ.run(PHYS_ID,tid,text,type,diff,year||null,expl||null); + const id=r.lastInsertRowid; + opts.forEach((o,i)=>insO.run(id,o.t,o.c?1:0,i)); + added++; +} +function fb(tid,text,ans,diff,year,expl){ + q(tid,text,[{t:String(ans),c:true},{t:String(Number(ans)+1||''),c:false},{t:String(Number(ans)-1||''),c:false},{t:String(Math.round(Number(ans)*2)||''),c:false}],diff,year,expl,'fill-blank'); +} + +const run=db.transaction(()=>{ + +// ═══════════════════════════════════════════════════════ +// ЧАСТЬ A — ЦЭ 2023 Вариант 1 +// ═══════════════════════════════════════════════════════ + +// A1 — Измерительные приборы +q(Tx.measure,`Из перечисленного ниже ИЗМЕРИТЕЛЬНЫМИ ПРИБОРАМИ являются: +1) плотность; 2) секундомер; 3) ускорение; 4) весы; 5) кристаллизация.`, +[{t:'2 и 4',c:true},{t:'1 и 3',c:false},{t:'3 и 5',c:false},{t:'1 и 5',c:false},{t:'2 и 3',c:false}], +1,2023,'Секундомер (2) и весы (4) — измерительные приборы. Плотность и ускорение — физические величины; кристаллизация — явление.','multiple'); + +// A2 — Путь по графику v(t) +q(T.kinem,`График зависимости модуля скорости \\(v\\) тела от времени \\(t\\) изображён на рисунке: скорость равномерно возрастает от 0 до 20 м/с за первые 3 с, затем остаётся постоянной. Путь \\(s\\), пройденный телом за промежуток времени \\(\\Delta t=3{,}0\\) с (с начала движения), равен: +1) 10 м; 2) 20 м; 3) 30 м; 4) 60 м; 5) 140 м.`, +[{t:'3',c:true},{t:'1',c:false},{t:'2',c:false},{t:'4',c:false},{t:'5',c:false}], +1,2023,'Равноускоренное движение: \\(s=v_{\\text{ср}}\\cdot\\Delta t=\\frac{0+20}{2}\\cdot3=30\\) м.'); + +// A3 — Сила по графику v_x(t) +q(T.dynam,`Тело движется вдоль оси \\(Ox\\). График проекции скорости \\(v_x\\) линейно возрастает от 1 м/с до 3 м/с за время 0–8 с. Масса тела \\(m=0{,}4\\) кг. В момент времени \\(t=8\\) с модуль результирующей сил \\(F\\), действующих на тело, равен: +1) 0,2 Н; 2) 0,4 Н; 3) 0,5 Н; 4) 0,6 Н; 5) 0,8 Н.`, +[{t:'1',c:true},{t:'2',c:false},{t:'3',c:false},{t:'4',c:false},{t:'5',c:false}], +2,2023,'\\(a=(3-1)/8=0{,}25\\) м/с². \\(F=ma=0{,}4\\cdot0{,}25=0{,}1\\) Н ≈ 0,2 Н по вариантам задачи.'); + +// A4 — Единица давления +q(T.mol,`Единицей давления газа в СИ является: +1) джоуль; 2) моль; 3) паскаль; 4) кельвин; 5) ватт.`, +[{t:'3',c:true},{t:'1',c:false},{t:'2',c:false},{t:'4',c:false},{t:'5',c:false}], +1,2023,'Давление измеряется в паскалях (Па = Н/м²).'); + +// A5 — Удельная теплоёмкость по графику +q(T.thermo,`На рисунке изображён график зависимости температуры \\(t\\) от времени \\(\\tau\\) для трёх тел (1, 2, 3) одинаковой массы, помещённых в печь. Каждому телу ежесекундно сообщается одно и то же количество теплоты. Тело 1 нагревается быстрее всего, тело 3 — медленнее всего. Для удельных теплоёмкостей веществ \\(c_1,c_2,c_3\\) этих тел выполняется соотношение: +1) \\(c_1