diff --git a/backend/scripts/exam-textbook-sections.json b/backend/scripts/exam-textbook-sections.json new file mode 100644 index 0000000..7664c11 --- /dev/null +++ b/backend/scripts/exam-textbook-sections.json @@ -0,0 +1,1559 @@ +[ + { + "book": "math-5", + "chapter_slug": "math-5-ch1", + "subject": "math", + "grade": 5, + "engine": "math6", + "note": "paras in window.M6 config; anchors sec-" + }, + { + "book": "math-5", + "chapter_slug": "math-5-ch2", + "subject": "math", + "grade": 5, + "engine": "math6", + "note": "paras in window.M6 config; anchors sec-" + }, + { + "book": "math-5", + "chapter_slug": "math-5-ch3", + "subject": "math", + "grade": 5, + "engine": "math6", + "note": "paras in window.M6 config; anchors sec-" + }, + { + "book": "math-6", + "chapter_slug": "math-6-ch1", + "subject": "math", + "grade": 6, + "engine": "math6", + "note": "paras in window.M6 config; anchors sec-" + }, + { + "book": "math-6", + "chapter_slug": "math-6-ch2", + "subject": "math", + "grade": 6, + "engine": "math6", + "note": "paras in window.M6 config; anchors sec-" + }, + { + "book": "math-6", + "chapter_slug": "math-6-ch3", + "subject": "math", + "grade": 6, + "engine": "math6", + "note": "paras in window.M6 config; anchors sec-" + }, + { + "book": "math-6", + "chapter_slug": "math-6-ch4", + "subject": "math", + "grade": 6, + "engine": "math6", + "note": "paras in window.M6 config; anchors sec-" + }, + { + "book": "math-6", + "chapter_slug": "math-6-ch5", + "subject": "math", + "grade": 6, + "engine": "math6", + "note": "paras in window.M6 config; anchors sec-" + }, + { + "book": "math-6", + "chapter_slug": "math-6-ch6", + "subject": "math", + "grade": 6, + "engine": "math6", + "note": "paras in window.M6 config; anchors sec-" + }, + { + "book": "algebra-7", + "chapter_slug": "algebra-7-ch1", + "subject": "algebra", + "grade": 7, + "para_id": "p1", + "num": "§ 1", + "title": "Степень с натуральным показателем и её свойства" + }, + { + "book": "algebra-7", + "chapter_slug": "algebra-7-ch1", + "subject": "algebra", + "grade": 7, + "para_id": "p2", + "num": "§ 2", + "title": "Степень с целым показателем и её свойства" + }, + { + "book": "algebra-7", + "chapter_slug": "algebra-7-ch1", + "subject": "algebra", + "grade": 7, + "para_id": "p3", + "num": "§ 3", + "title": "Стандартный вид числа" + }, + { + "book": "algebra-7", + "chapter_slug": "algebra-7-ch2", + "subject": "algebra", + "grade": 7, + "para_id": "p4", + "num": "§ 4", + "title": "Числовые выражения и выражения с переменными" + }, + { + "book": "algebra-7", + "chapter_slug": "algebra-7-ch2", + "subject": "algebra", + "grade": 7, + "para_id": "p5", + "num": "§ 5", + "title": "Тождество. Тождественные преобразования" + }, + { + "book": "algebra-7", + "chapter_slug": "algebra-7-ch2", + "subject": "algebra", + "grade": 7, + "para_id": "p6", + "num": "§ 6", + "title": "Одночлен. Стандартный вид. Степень" + }, + { + "book": "algebra-7", + "chapter_slug": "algebra-7-ch2", + "subject": "algebra", + "grade": 7, + "para_id": "p7", + "num": "§ 7", + "title": "Действия с одночленами" + }, + { + "book": "algebra-7", + "chapter_slug": "algebra-7-ch2", + "subject": "algebra", + "grade": 7, + "para_id": "p8", + "num": "§ 8", + "title": "Многочлен. Стандартный вид. Степень" + }, + { + "book": "algebra-7", + "chapter_slug": "algebra-7-ch2", + "subject": "algebra", + "grade": 7, + "para_id": "p9", + "num": "§ 9", + "title": "Сложение и вычитание многочленов" + }, + { + "book": "algebra-7", + "chapter_slug": "algebra-7-ch2", + "subject": "algebra", + "grade": 7, + "para_id": "p10", + "num": "§ 10", + "title": "Умножение и деление многочлена на одночлен" + }, + { + "book": "algebra-7", + "chapter_slug": "algebra-7-ch2", + "subject": "algebra", + "grade": 7, + "para_id": "p11", + "num": "§ 11", + "title": "Умножение многочленов" + }, + { + "book": "algebra-7", + "chapter_slug": "algebra-7-ch2", + "subject": "algebra", + "grade": 7, + "para_id": "p12", + "num": "§ 12", + "title": "Квадрат суммы и квадрат разности" + }, + { + "book": "algebra-7", + "chapter_slug": "algebra-7-ch2", + "subject": "algebra", + "grade": 7, + "para_id": "p13", + "num": "§ 13", + "title": "Разность квадратов: (a−b)(a+b) = a\\xB2−b\\xB2" + }, + { + "book": "algebra-7", + "chapter_slug": "algebra-7-ch2", + "subject": "algebra", + "grade": 7, + "para_id": "p14", + "num": "§ 14", + "title": "Разложение многочлена на множители" + }, + { + "book": "algebra-7", + "chapter_slug": "algebra-7-ch3", + "subject": "algebra", + "grade": 7, + "para_id": "p15", + "num": "§ 15", + "title": "Линейные уравнения с одной переменной" + }, + { + "book": "algebra-7", + "chapter_slug": "algebra-7-ch3", + "subject": "algebra", + "grade": 7, + "para_id": "p16", + "num": "§ 16", + "title": "Решение текстовых задач с помощью уравнений" + }, + { + "book": "algebra-7", + "chapter_slug": "algebra-7-ch3", + "subject": "algebra", + "grade": 7, + "para_id": "p17", + "num": "§ 17", + "title": "Числовые неравенства и их свойства" + }, + { + "book": "algebra-7", + "chapter_slug": "algebra-7-ch3", + "subject": "algebra", + "grade": 7, + "para_id": "p18", + "num": "§ 18", + "title": "Линейные неравенства с одной переменной" + }, + { + "book": "algebra-7", + "chapter_slug": "algebra-7-ch3", + "subject": "algebra", + "grade": 7, + "para_id": "p19", + "num": "§ 19", + "title": "Функция" + }, + { + "book": "algebra-7", + "chapter_slug": "algebra-7-ch3", + "subject": "algebra", + "grade": 7, + "para_id": "p20", + "num": "§ 20", + "title": "Линейная функция и её свойства" + }, + { + "book": "algebra-7", + "chapter_slug": "algebra-7-ch4", + "subject": "algebra", + "grade": 7, + "para_id": "p21", + "num": "§ 21", + "title": "Линейное уравнение с двумя переменными" + }, + { + "book": "algebra-7", + "chapter_slug": "algebra-7-ch4", + "subject": "algebra", + "grade": 7, + "para_id": "p22", + "num": "§ 22", + "title": "График линейного уравнения $ax + by = c$" + }, + { + "book": "algebra-7", + "chapter_slug": "algebra-7-ch4", + "subject": "algebra", + "grade": 7, + "para_id": "p23", + "num": "§ 23", + "title": "Система линейных уравнений с двумя переменными" + }, + { + "book": "algebra-7", + "chapter_slug": "algebra-7-ch4", + "subject": "algebra", + "grade": 7, + "para_id": "p24", + "num": "§ 24", + "title": "Способы решения системы (подстановка, сложение)" + }, + { + "book": "algebra-7", + "chapter_slug": "algebra-7-ch4", + "subject": "algebra", + "grade": 7, + "para_id": "p25", + "num": "§ 25", + "title": "Решение текстовых задач с помощью системы" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch1", + "subject": "geometry", + "grade": 7, + "para_id": "p1", + "num": "§ 1", + "title": "Повторение материала 5-6 классов" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch1", + "subject": "geometry", + "grade": 7, + "para_id": "p2", + "num": "§ 2", + "title": "Предмет геометрии" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch1", + "subject": "geometry", + "grade": 7, + "para_id": "p3", + "num": "§ 3", + "title": "Прямая. Луч. Отрезок. Ломаная" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch1", + "subject": "geometry", + "grade": 7, + "para_id": "p4", + "num": "§ 4", + "title": "Окружность и круг" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch1", + "subject": "geometry", + "grade": 7, + "para_id": "p5", + "num": "§ 5", + "title": "Угол. Виды углов" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch1", + "subject": "geometry", + "grade": 7, + "para_id": "p6", + "num": "§ 6", + "title": "Смежные углы. Вертикальные углы" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch1", + "subject": "geometry", + "grade": 7, + "para_id": "p7", + "num": "§ 7", + "title": "Перпендикулярные прямые" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch2", + "subject": "geometry", + "grade": 7, + "para_id": "p8", + "num": "§ 8", + "title": "Треугольники" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch2", + "subject": "geometry", + "grade": 7, + "para_id": "p9", + "num": "§ 9", + "title": "Первый и второй признаки равенства" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch2", + "subject": "geometry", + "grade": 7, + "para_id": "p10", + "num": "§ 10", + "title": "Высота, медиана и биссектриса треугольника" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch2", + "subject": "geometry", + "grade": 7, + "para_id": "p11", + "num": "§ 11", + "title": "Равнобедренный треугольник" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch2", + "subject": "geometry", + "grade": 7, + "para_id": "p12", + "num": "§ 12", + "title": "Признаки равнобедренного треугольника" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch2", + "subject": "geometry", + "grade": 7, + "para_id": "p13", + "num": "§ 13", + "title": "Третий признак равенства треугольников" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch2", + "subject": "geometry", + "grade": 7, + "para_id": "p14", + "num": "§ 14", + "title": "Серединный перпендикуляр к отрезку" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch3", + "subject": "geometry", + "grade": 7, + "para_id": "p15", + "num": "§ 15", + "title": "Признаки параллельности прямых" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch3", + "subject": "geometry", + "grade": 7, + "para_id": "p16", + "num": "§ 16", + "title": "Аксиома параллельных прямых" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch3", + "subject": "geometry", + "grade": 7, + "para_id": "p17", + "num": "§ 17", + "title": "Свойства параллельных прямых" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch3", + "subject": "geometry", + "grade": 7, + "para_id": "p18", + "num": "§ 18", + "title": "Углы со сторонами, соответственно параллельными или перпендикулярными" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch4", + "subject": "geometry", + "grade": 7, + "para_id": "p19", + "num": "§ 19", + "title": "Сумма углов треугольника" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch4", + "subject": "geometry", + "grade": 7, + "para_id": "p20", + "num": "§ 20", + "title": "Внешний угол треугольника" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch4", + "subject": "geometry", + "grade": 7, + "para_id": "p21", + "num": "§ 21", + "title": "Соотношения между сторонами и углами" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch4", + "subject": "geometry", + "grade": 7, + "para_id": "p22", + "num": "§ 22", + "title": "Неравенство треугольника" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch4", + "subject": "geometry", + "grade": 7, + "para_id": "p23", + "num": "§ 23", + "title": "Прямоугольные треугольники" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch4", + "subject": "geometry", + "grade": 7, + "para_id": "p24", + "num": "§ 24", + "title": "Признаки равенства прямоугольных треугольников" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch4", + "subject": "geometry", + "grade": 7, + "para_id": "p25", + "num": "§ 25", + "title": "Биссектриса угла как ГМТ" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch4", + "subject": "geometry", + "grade": 7, + "para_id": "p26", + "num": "§ 26", + "title": "Свойство катета против угла 30°" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch5", + "subject": "geometry", + "grade": 7, + "para_id": "p27", + "num": "§ 27", + "title": "Простейшие построения" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch5", + "subject": "geometry", + "grade": 7, + "para_id": "p28", + "num": "§ 28", + "title": "Построение треугольника по 3 сторонам" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch5", + "subject": "geometry", + "grade": 7, + "para_id": "p29", + "num": "§ 29", + "title": "Построение биссектрисы угла" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch5", + "subject": "geometry", + "grade": 7, + "para_id": "p30", + "num": "§ 30", + "title": "Середина и перпендикуляр" + }, + { + "book": "geometry-7", + "chapter_slug": "geometry-7-ch5", + "subject": "geometry", + "grade": 7, + "para_id": "p31", + "num": "§ 31", + "title": "Метод геометрических мест точек" + }, + { + "book": "algebra-8", + "chapter_slug": "algebra-8-ch1", + "subject": "algebra", + "grade": 8, + "para_id": "p1", + "num": "§ 1", + "title": "Квадратный корень из числа. Арифметический квадратный корень" + }, + { + "book": "algebra-8", + "chapter_slug": "algebra-8-ch1", + "subject": "algebra", + "grade": 8, + "para_id": "p2", + "num": "§ 2", + "title": "Множество иррациональных чисел. Множество действительных чисел" + }, + { + "book": "algebra-8", + "chapter_slug": "algebra-8-ch1", + "subject": "algebra", + "grade": 8, + "para_id": "p3", + "num": "§ 3", + "title": "Свойства квадратных корней" + }, + { + "book": "algebra-8", + "chapter_slug": "algebra-8-ch1", + "subject": "algebra", + "grade": 8, + "para_id": "p4", + "num": "§ 4", + "title": "Применение свойств квадратных корней" + }, + { + "book": "algebra-8", + "chapter_slug": "algebra-8-ch1", + "subject": "algebra", + "grade": 8, + "para_id": "p5", + "num": "§ 5", + "title": "Числовые промежутки. Объединение и пересечение" + }, + { + "book": "algebra-8", + "chapter_slug": "algebra-8-ch1", + "subject": "algebra", + "grade": 8, + "para_id": "p6", + "num": "§ 6", + "title": "Системы и совокупности линейных неравенств. Двойные неравенства" + }, + { + "book": "algebra-8", + "chapter_slug": "algebra-8-ch2", + "subject": "algebra", + "grade": 8, + "para_id": "p7", + "num": "§ 7", + "title": "Квадратные уравнения. Решение неполных квадратных уравнений" + }, + { + "book": "algebra-8", + "chapter_slug": "algebra-8-ch2", + "subject": "algebra", + "grade": 8, + "para_id": "p8", + "num": "§ 8", + "title": "Формулы корней квадратного уравнения" + }, + { + "book": "algebra-8", + "chapter_slug": "algebra-8-ch2", + "subject": "algebra", + "grade": 8, + "para_id": "p9", + "num": "§ 9", + "title": "Теорема Виета" + }, + { + "book": "algebra-8", + "chapter_slug": "algebra-8-ch2", + "subject": "algebra", + "grade": 8, + "para_id": "p10", + "num": "§ 10", + "title": "Квадратный трёхчлен. Разложение на множители" + }, + { + "book": "algebra-8", + "chapter_slug": "algebra-8-ch2", + "subject": "algebra", + "grade": 8, + "para_id": "p11", + "num": "§ 11", + "title": "Решение текстовых задач с помощью квадратных уравнений" + }, + { + "book": "algebra-8", + "chapter_slug": "algebra-8-ch2", + "subject": "algebra", + "grade": 8, + "para_id": "p12", + "num": "§ 12", + "title": "Целые рациональные уравнения, сводящиеся к квадратным" + }, + { + "book": "algebra-8", + "chapter_slug": "algebra-8-ch3", + "subject": "algebra", + "grade": 8, + "para_id": "p13", + "num": "§ 13", + "title": "Числовые неравенства и их свойства" + }, + { + "book": "algebra-8", + "chapter_slug": "algebra-8-ch3", + "subject": "algebra", + "grade": 8, + "para_id": "p14", + "num": "§ 14", + "title": "Сложение и умножение числовых неравенств. Оценка значений" + }, + { + "book": "algebra-8", + "chapter_slug": "algebra-8-ch3", + "subject": "algebra", + "grade": 8, + "para_id": "p15", + "num": "§ 15", + "title": "Числовые промежутки. Линейные неравенства" + }, + { + "book": "algebra-8", + "chapter_slug": "algebra-8-ch3", + "subject": "algebra", + "grade": 8, + "para_id": "p16", + "num": "§ 16", + "title": "Системы и совокупности линейных неравенств" + }, + { + "book": "algebra-8", + "chapter_slug": "algebra-8-ch3", + "subject": "algebra", + "grade": 8, + "para_id": "p17", + "num": "§ 17", + "title": "Квадратные неравенства. Метод интервалов" + }, + { + "book": "algebra-8", + "chapter_slug": "algebra-8-ch3", + "subject": "algebra", + "grade": 8, + "para_id": "p18", + "num": "§ 18", + "title": "Дробно-рациональные неравенства" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch1", + "subject": "geometry", + "grade": 8, + "para_id": "p1", + "num": "§ 1", + "title": "Выпуклые многоугольники. Диагональ. Периметр" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch1", + "subject": "geometry", + "grade": 8, + "para_id": "p2", + "num": "§ 2", + "title": "Сумма углов выпуклого многоугольника" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch1", + "subject": "geometry", + "grade": 8, + "para_id": "p3", + "num": "§ 3", + "title": "Сумма внешних углов выпуклого многоугольника" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch1", + "subject": "geometry", + "grade": 8, + "para_id": "p4", + "num": "§ 4", + "title": "Параллелограмм" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch1", + "subject": "geometry", + "grade": 8, + "para_id": "p5", + "num": "§ 5", + "title": "Свойства параллелограмма" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch1", + "subject": "geometry", + "grade": 8, + "para_id": "p6", + "num": "§ 6", + "title": "Признаки параллелограмма" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch1", + "subject": "geometry", + "grade": 8, + "para_id": "p7", + "num": "§ 7", + "title": "Прямоугольник. Свойство диагоналей" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch1", + "subject": "geometry", + "grade": 8, + "para_id": "p8", + "num": "§ 8", + "title": "Признак прямоугольника" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch1", + "subject": "geometry", + "grade": 8, + "para_id": "p9", + "num": "§ 9", + "title": "Ромб. Свойство диагоналей ромба. Признаки ромба" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch1", + "subject": "geometry", + "grade": 8, + "para_id": "p10", + "num": "§ 10", + "title": "Квадрат. Свойства квадрата" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch1", + "subject": "geometry", + "grade": 8, + "para_id": "p11", + "num": "§ 11", + "title": "Теорема Фалеса. Деление отрезка на равные части" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch1", + "subject": "geometry", + "grade": 8, + "para_id": "p12", + "num": "§ 12", + "title": "Свойство медиан треугольника" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch1", + "subject": "geometry", + "grade": 8, + "para_id": "p13", + "num": "§ 13", + "title": "Свойство средней линии треугольника" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch1", + "subject": "geometry", + "grade": 8, + "para_id": "p14", + "num": "§ 14", + "title": "Трапеция. Свойство средней линии" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch1", + "subject": "geometry", + "grade": 8, + "para_id": "p15", + "num": "§ 15", + "title": "Свойство углов и диагоналей равнобедренной трапеции" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch1", + "subject": "geometry", + "grade": 8, + "para_id": "p16", + "num": "§ 16", + "title": "Признаки равнобедренной трапеции" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch2", + "subject": "geometry", + "grade": 8, + "para_id": "p1", + "num": "§ 1", + "title": "Площадь квадрата" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch2", + "subject": "geometry", + "grade": 8, + "para_id": "p2", + "num": "§ 2", + "title": "Площадь прямоугольника" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch2", + "subject": "geometry", + "grade": 8, + "para_id": "p3", + "num": "§ 3", + "title": "Площадь параллелограмма" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch2", + "subject": "geometry", + "grade": 8, + "para_id": "p4", + "num": "§ 4", + "title": "Площадь треугольника" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch2", + "subject": "geometry", + "grade": 8, + "para_id": "p5", + "num": "§ 5", + "title": "Площадь трапеции" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch2", + "subject": "geometry", + "grade": 8, + "para_id": "p6", + "num": "§ 6", + "title": "Площадь ромба" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch2", + "subject": "geometry", + "grade": 8, + "para_id": "p7", + "num": "§ 7", + "title": "Площадь прямоугольного треугольника" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch2", + "subject": "geometry", + "grade": 8, + "para_id": "p8", + "num": "§ 8", + "title": "Высота, проведённая к гипотенузе" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch2", + "subject": "geometry", + "grade": 8, + "para_id": "p9", + "num": "§ 9", + "title": "Треугольники с общей высотой" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch2", + "subject": "geometry", + "grade": 8, + "para_id": "p10", + "num": "§ 10", + "title": "Свойства медианы для площадей" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch2", + "subject": "geometry", + "grade": 8, + "para_id": "p11", + "num": "§ 11", + "title": "Теорема Пифагора" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch2", + "subject": "geometry", + "grade": 8, + "para_id": "p12", + "num": "§ 12", + "title": "S и h равностороннего треугольника" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch2", + "subject": "geometry", + "grade": 8, + "para_id": "p13", + "num": "§ 13", + "title": "Диагональ квадрата" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch2", + "subject": "geometry", + "grade": 8, + "para_id": "p14", + "num": "§ 14", + "title": "Обратная теорема Пифагора" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch2", + "subject": "geometry", + "grade": 8, + "para_id": "p15", + "num": "§ 15", + "title": "Пифагоровы тройки" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch3", + "subject": "geometry", + "grade": 8, + "para_id": "p1", + "num": "§ 1", + "title": "Теорема Фалеса (обобщённая)" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch3", + "subject": "geometry", + "grade": 8, + "para_id": "p2", + "num": "§ 2", + "title": "Деление отрезка в отношении m : n" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch3", + "subject": "geometry", + "grade": 8, + "para_id": "p3", + "num": "§ 3", + "title": "Определение подобных треугольников" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch3", + "subject": "geometry", + "grade": 8, + "para_id": "p4", + "num": "§ 4", + "title": "Свойство прямой, параллельной стороне треугольника" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch3", + "subject": "geometry", + "grade": 8, + "para_id": "p5", + "num": "§ 5", + "title": "Первый признак подобия. Следствие" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch3", + "subject": "geometry", + "grade": 8, + "para_id": "p6", + "num": "§ 6", + "title": "Второй признак подобия" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch3", + "subject": "geometry", + "grade": 8, + "para_id": "p7", + "num": "§ 7", + "title": "Третий признак подобия" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch3", + "subject": "geometry", + "grade": 8, + "para_id": "p8", + "num": "§ 8", + "title": "Свойство биссектрисы треугольника" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch3", + "subject": "geometry", + "grade": 8, + "para_id": "p9", + "num": "§ 9", + "title": "Отношение площадей подобных треугольников" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch4", + "subject": "geometry", + "grade": 8, + "para_id": "p1", + "num": "§ 1", + "title": "Касательная. Признак касательной" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch4", + "subject": "geometry", + "grade": 8, + "para_id": "p2", + "num": "§ 2", + "title": "Свойство касательной" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch4", + "subject": "geometry", + "grade": 8, + "para_id": "p3", + "num": "§ 3", + "title": "Свойство касательных из одной точки" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch4", + "subject": "geometry", + "grade": 8, + "para_id": "p4", + "num": "§ 4", + "title": "Построение касательной" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch4", + "subject": "geometry", + "grade": 8, + "para_id": "p5", + "num": "§ 5", + "title": "Свойство окружностей, вписанных в угол" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch4", + "subject": "geometry", + "grade": 8, + "para_id": "p6", + "num": "§ 6", + "title": "Взаимное расположение окружностей" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch4", + "subject": "geometry", + "grade": 8, + "para_id": "p7", + "num": "§ 7", + "title": "Длина общей внешней касательной" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch4", + "subject": "geometry", + "grade": 8, + "para_id": "p8", + "num": "§ 8", + "title": "Центральный угол. Градусная мера дуги. Вписанный угол" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch4", + "subject": "geometry", + "grade": 8, + "para_id": "p9", + "num": "§ 9", + "title": "Свойство вписанного угла" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch4", + "subject": "geometry", + "grade": 8, + "para_id": "p10", + "num": "§ 10", + "title": "Вписанные углы, опирающиеся на одну дугу" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch4", + "subject": "geometry", + "grade": 8, + "para_id": "p11", + "num": "§ 11", + "title": "Вписанный угол, опирающийся на диаметр" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch4", + "subject": "geometry", + "grade": 8, + "para_id": "p12", + "num": "§ 12", + "title": "Угол между касательной и хордой" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch4", + "subject": "geometry", + "grade": 8, + "para_id": "p13", + "num": "§ 13", + "title": "Угол между хордами" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch4", + "subject": "geometry", + "grade": 8, + "para_id": "p14", + "num": "§ 14", + "title": "Угол между секущими" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch4", + "subject": "geometry", + "grade": 8, + "para_id": "p15", + "num": "§ 15", + "title": "Свойство пересекающихся хорд" + }, + { + "book": "geometry-8", + "chapter_slug": "geometry-8-ch4", + "subject": "geometry", + "grade": 8, + "para_id": "p16", + "num": "§ 16", + "title": "Свойство касательной и секущей" + }, + { + "book": "algebra-9", + "chapter_slug": "algebra-9-ch1", + "subject": "algebra", + "grade": 9, + "para_id": "p1", + "num": "§ 1", + "title": "Рациональная дробь" + }, + { + "book": "algebra-9", + "chapter_slug": "algebra-9-ch1", + "subject": "algebra", + "grade": 9, + "para_id": "p2", + "num": "§ 2", + "title": "Основное свойство дроби" + }, + { + "book": "algebra-9", + "chapter_slug": "algebra-9-ch1", + "subject": "algebra", + "grade": 9, + "para_id": "p3", + "num": "§ 3", + "title": "Сложение и вычитание" + }, + { + "book": "algebra-9", + "chapter_slug": "algebra-9-ch1", + "subject": "algebra", + "grade": 9, + "para_id": "p4", + "num": "§ 4", + "title": "Умножение и деление" + }, + { + "book": "algebra-9", + "chapter_slug": "algebra-9-ch1", + "subject": "algebra", + "grade": 9, + "para_id": "p5", + "num": "§ 5", + "title": "Преобразование выражений" + }, + { + "book": "algebra-9", + "chapter_slug": "algebra-9-ch2", + "subject": "algebra", + "grade": 9, + "para_id": "p6", + "num": "§ 6", + "title": "Функция числового аргумента" + }, + { + "book": "algebra-9", + "chapter_slug": "algebra-9-ch2", + "subject": "algebra", + "grade": 9, + "para_id": "p7", + "num": "§ 7", + "title": "Свойства функции" + }, + { + "book": "algebra-9", + "chapter_slug": "algebra-9-ch2", + "subject": "algebra", + "grade": 9, + "para_id": "p8", + "num": "§ 8", + "title": "Чётные и нечётные функции" + }, + { + "book": "algebra-9", + "chapter_slug": "algebra-9-ch2", + "subject": "algebra", + "grade": 9, + "para_id": "p9", + "num": "§ 9", + "title": "Сдвиги графиков" + }, + { + "book": "algebra-9", + "chapter_slug": "algebra-9-ch3", + "subject": "algebra", + "grade": 9, + "para_id": "p10", + "num": "§ 10", + "title": "Дробно-рациональные уравнения" + }, + { + "book": "algebra-9", + "chapter_slug": "algebra-9-ch3", + "subject": "algebra", + "grade": 9, + "para_id": "p11", + "num": "§ 11", + "title": "Системы нелинейных уравнений" + }, + { + "book": "algebra-9", + "chapter_slug": "algebra-9-ch3", + "subject": "algebra", + "grade": 9, + "para_id": "p12", + "num": "§ 12", + "title": "Уравнение окружности" + }, + { + "book": "algebra-9", + "chapter_slug": "algebra-9-ch3", + "subject": "algebra", + "grade": 9, + "para_id": "p13", + "num": "§ 13", + "title": "Метод интервалов" + }, + { + "book": "algebra-9", + "chapter_slug": "algebra-9-ch4", + "subject": "algebra", + "grade": 9, + "para_id": "p14", + "num": "§ 14", + "title": "Числовая последовательность" + }, + { + "book": "algebra-9", + "chapter_slug": "algebra-9-ch4", + "subject": "algebra", + "grade": 9, + "para_id": "p15", + "num": "§ 15", + "title": "Арифметическая прогрессия" + }, + { + "book": "algebra-9", + "chapter_slug": "algebra-9-ch4", + "subject": "algebra", + "grade": 9, + "para_id": "p16", + "num": "§ 16", + "title": "Сумма арифм. прогрессии" + }, + { + "book": "algebra-9", + "chapter_slug": "algebra-9-ch4", + "subject": "algebra", + "grade": 9, + "para_id": "p17", + "num": "§ 17", + "title": "Геометрическая прогрессия" + }, + { + "book": "algebra-9", + "chapter_slug": "algebra-9-ch4", + "subject": "algebra", + "grade": 9, + "para_id": "p18", + "num": "§ 18", + "title": "Сумма геом. прогрессии" + }, + { + "book": "algebra-9", + "chapter_slug": "algebra-9-ch4", + "subject": "algebra", + "grade": 9, + "para_id": "p19", + "num": "§ 19", + "title": "Бесконечно убывающая" + }, + { + "book": "geometry-9", + "chapter_slug": "geometry-9-ch1", + "subject": "geometry", + "grade": 9, + "para_id": "p1", + "num": "§ 1", + "title": "sin, cos, tg, ctg острого угла" + }, + { + "book": "geometry-9", + "chapter_slug": "geometry-9-ch1", + "subject": "geometry", + "grade": 9, + "para_id": "p2", + "num": "§ 2", + "title": "Решение прямоугольного треугольника" + }, + { + "book": "geometry-9", + "chapter_slug": "geometry-9-ch1", + "subject": "geometry", + "grade": 9, + "para_id": "p3", + "num": "§ 3", + "title": "Тригонометрические формулы" + }, + { + "book": "geometry-9", + "chapter_slug": "geometry-9-ch1", + "subject": "geometry", + "grade": 9, + "para_id": "p4", + "num": "§ 4", + "title": "sin, cos, tg, ctg тупого угла" + }, + { + "book": "geometry-9", + "chapter_slug": "geometry-9-ch1", + "subject": "geometry", + "grade": 9, + "para_id": "p5", + "num": "§ 5", + "title": "Формулы площади" + }, + { + "book": "geometry-9", + "chapter_slug": "geometry-9-ch1", + "subject": "geometry", + "grade": 9, + "para_id": "p6", + "num": "§ 6", + "title": "Среднее геометрическое" + }, + { + "book": "geometry-9", + "chapter_slug": "geometry-9-ch2", + "subject": "geometry", + "grade": 9, + "para_id": "p7", + "num": "§ 7", + "title": "Описанная и вписанная окружности треугольника" + }, + { + "book": "geometry-9", + "chapter_slug": "geometry-9-ch2", + "subject": "geometry", + "grade": 9, + "para_id": "p8", + "num": "§ 8", + "title": "Окружности прямоугольного треугольника" + }, + { + "book": "geometry-9", + "chapter_slug": "geometry-9-ch2", + "subject": "geometry", + "grade": 9, + "para_id": "p9", + "num": "§ 9", + "title": "Вписанные и описанные четырёхугольники" + }, + { + "book": "geometry-9", + "chapter_slug": "geometry-9-ch3", + "subject": "geometry", + "grade": 9, + "para_id": "p10", + "num": "§ 10", + "title": "Теорема синусов" + }, + { + "book": "geometry-9", + "chapter_slug": "geometry-9-ch3", + "subject": "geometry", + "grade": 9, + "para_id": "p11", + "num": "§ 11", + "title": "Теорема косинусов" + }, + { + "book": "geometry-9", + "chapter_slug": "geometry-9-ch3", + "subject": "geometry", + "grade": 9, + "para_id": "p12", + "num": "§ 12", + "title": "Формула Герона. Решение треугольников" + }, + { + "book": "geometry-9", + "chapter_slug": "geometry-9-ch4", + "subject": "geometry", + "grade": 9, + "para_id": "p13", + "num": "§ 13", + "title": "Правильные многоугольники" + }, + { + "book": "geometry-9", + "chapter_slug": "geometry-9-ch4", + "subject": "geometry", + "grade": 9, + "para_id": "p14", + "num": "§ 14", + "title": "Формулы радиусов" + }, + { + "book": "geometry-9", + "chapter_slug": "geometry-9-ch4", + "subject": "geometry", + "grade": 9, + "para_id": "p15", + "num": "§ 15", + "title": "Треугольник, квадрат, шестиугольник" + }, + { + "book": "geometry-9", + "chapter_slug": "geometry-9-ch4", + "subject": "geometry", + "grade": 9, + "para_id": "p16", + "num": "§ 16", + "title": "Длина окружности и площадь круга" + } +] \ No newline at end of file diff --git a/backend/scripts/gen-exam-textbook-sections.js b/backend/scripts/gen-exam-textbook-sections.js new file mode 100644 index 0000000..936a61a --- /dev/null +++ b/backend/scripts/gen-exam-textbook-sections.js @@ -0,0 +1,87 @@ +#!/usr/bin/env node +/** + * gen-exam-textbook-sections.js + * + * Regenerates the §-section taxonomy of the grades 5-9 math-family textbooks, + * used by tag-exam-textbook.js (the exam→textbook classifier). + * + * Outputs: + * backend/scripts/exam-textbook-sections.json — machine-readable (the classifier reads this) + * plans/exam-textbook-links/taxonomy.md — human-readable reference + * + * Re-run whenever a grade 5-9 algebra/geometry/math chapter gains or renames a §. + * Note: math-5/6 are engine-rendered (math6_engine.js builds
+ * from window.M6.paras) — their §s are NOT extracted statically here (emitted with + * engine:'math6' marker); the classifier links them at chapter level. + * + * Usage: node backend/scripts/gen-exam-textbook-sections.js + */ +'use strict'; +const fs = require('fs'); +const path = require('path'); + +const DIR = path.join(__dirname, '../../frontend/textbooks'); +const OUT_MD = path.join(__dirname, '../../plans/exam-textbook-links/taxonomy.md'); +const OUT_JSON = path.join(__dirname, 'exam-textbook-sections.json'); + +// chapter slug -> html file (from the textbooks table). Order = teaching order. +const CHAPTERS = [ + ['math-5-ch1', 'math_5_ch1.html'], ['math-5-ch2', 'math_5_ch2.html'], ['math-5-ch3', 'math_5_ch3.html'], + ['math-6-ch1', 'math_6_ch1.html'], ['math-6-ch2', 'math_6_ch2.html'], ['math-6-ch3', 'math_6_ch3.html'], + ['math-6-ch4', 'math_6_ch4.html'], ['math-6-ch5', 'math_6_ch5.html'], ['math-6-ch6', 'math_6_ch6.html'], + ['algebra-7-ch1', 'algebra_7_ch1.html'], ['algebra-7-ch2', 'algebra_7_ch2.html'], + ['algebra-7-ch3', 'algebra_7_ch3.html'], ['algebra-7-ch4', 'algebra_7_ch4.html'], + ['geometry-7-ch1', 'geometry_7_ch1.html'], ['geometry-7-ch2', 'geometry_7_ch2.html'], + ['geometry-7-ch3', 'geometry_7_ch3.html'], ['geometry-7-ch4', 'geometry_7_ch4.html'], ['geometry-7-ch5', 'geometry_7_ch5.html'], + ['algebra-8-ch1', 'algebra_8.html'], ['algebra-8-ch2', 'algebra_8_ch2.html'], ['algebra-8-ch3', 'algebra_8_ch3.html'], + ['geometry-8-ch1', 'geometry_8_ch1.html'], ['geometry-8-ch2', 'geometry_8_ch2.html'], + ['geometry-8-ch3', 'geometry_8_ch3.html'], ['geometry-8-ch4', 'geometry_8_ch4.html'], + ['algebra-9-ch1', 'algebra_9_ch1.html'], ['algebra-9-ch2', 'algebra_9_ch2.html'], + ['algebra-9-ch3', 'algebra_9_ch3.html'], ['algebra-9-ch4', 'algebra_9_ch4.html'], + ['geometry-9-ch1', 'geometry_9_ch1.html'], ['geometry-9-ch2', 'geometry_9_ch2.html'], + ['geometry-9-ch3', 'geometry_9_ch3.html'], ['geometry-9-ch4', 'geometry_9_ch4.html'], +]; + +function strip(html) { return String(html).replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim(); } + +const lines = ['# §-таксономия учебников 5–9 (математика) — эталон для классификатора экзамена math9', '']; +const json = []; // [{book, chapter_slug, subject, grade, para_id, num, title}] +let prevBook = ''; +for (const [slug, file] of CHAPTERS) { + const book = slug.replace(/-ch\d+$/, ''); + const subject = book.replace(/-\d+$/, ''); // math|algebra|geometry + const grade = Number((book.match(/-(\d+)$/) || [])[1]) || null; + if (book !== prevBook) { lines.push(`\n## ${book}`); prevBook = book; } + const p = path.join(DIR, file); + if (!fs.existsSync(p)) { lines.push(`### ${slug} (FILE MISSING: ${file})`); continue; } + const html = fs.readFileSync(p, 'utf8'); + const tm = html.match(/([^<]*)<\/title>/i); + lines.push(`### ${slug} — ${tm ? strip(tm[1]) : file}`); + + const secRe = /<(?:section|div)\b[^>]*\sid="(sec-(?:p\d+|final\d*|[a-z0-9-]+))"[^>]*>/gi; + let m; const secs = []; + while ((m = secRe.exec(html)) !== null) secs.push({ id: m[1], start: m.index }); + if (!secs.length) { + lines.push(` (движок math6: статических sec[id] нет; якоря строятся из window.M6.paras → id="sec-<p.id>")`); + json.push({ book, chapter_slug: slug, subject, grade, engine: 'math6', note: 'paras in window.M6 config; anchors sec-<p.id>' }); + continue; + } + for (let i = 0; i < secs.length; i++) { + const seg = html.slice(secs[i].start, secs[i + 1] ? secs[i + 1].start : secs[i].start + 4000); + const numM = seg.match(/class="sec-num"[^>]*>([\s\S]*?)<\//i); + const hM = seg.match(/class="sec-h"[^>]*>([\s\S]*?)<\//i); + const paraId = secs[i].id.replace(/^sec-/, ''); // p10 | final3 + const num = numM ? strip(numM[1]) : ''; + const title = hM ? strip(hM[1]) : ''; + lines.push(` ${secs[i].id.padEnd(12)} ${num ? '['+num+'] ' : ''}${title}`); + if (/^p\d+$/.test(paraId)) { + json.push({ book, chapter_slug: slug, subject, grade, para_id: paraId, num, title }); + } + } +} + +fs.mkdirSync(path.dirname(OUT_MD), { recursive: true }); +fs.writeFileSync(OUT_MD, lines.join('\n'), 'utf8'); +fs.writeFileSync(OUT_JSON, JSON.stringify(json, null, 2), 'utf8'); +console.log('Wrote', OUT_MD); +console.log('Wrote', OUT_JSON, '(' + json.length + ' sections)'); diff --git a/backend/scripts/tag-exam-textbook.js b/backend/scripts/tag-exam-textbook.js index e5288b6..9fe3157 100644 --- a/backend/scripts/tag-exam-textbook.js +++ b/backend/scripts/tag-exam-textbook.js @@ -41,7 +41,8 @@ if (examIdx !== -1 && args[examIdx + 1]) { } /* ── Taxonomy ─────────────────────────────────────────────────── */ -const taxonomy = require('./data/g9_textbook_sections.json'); +/* Generated by gen-exam-textbook-sections.js (re-run when textbook §s change). */ +const taxonomy = require('./exam-textbook-sections.json'); // Build lookup: book -> [ {chapter_slug, para_id, num, title} ] // and flat: chapter_slug+para_id -> para number (integer) @@ -349,8 +350,9 @@ const SUBTOPIC_RULES = { // Scale/map → math-6-ch2 { slug: 'math-6-ch2', paragraph: null, kw: [/масштаб|карт[ае]\s+изображ/i] }, - // fallback: percentages (most common in word problems) - { slug: 'math-6-ch2', paragraph: null, kw: [] }, + // fallback: solving text problems via an equation (most generic g9 home, + // far better than defaulting every word problem to "percents") + { slug: 'algebra-7-ch3', paragraph: 16, kw: [] }, ], /* ── geom-triangles ──────────────────────────────────────── */ @@ -523,6 +525,24 @@ const SUBTOPIC_RULES = { ], }; +/* Extract plain text of answer options (opts_json) so keyword scoring can see + the actual statement contents — crucial for theory-statements, whose question + text is just "Какое из утверждений неверно" with the substance in the options. */ +function optsText(task) { + if (!task.opts_json) return ''; + try { + const o = JSON.parse(task.opts_json); + const arr = Array.isArray(o) ? o : (o && Array.isArray(o.options) ? o.options : []); + return arr.map(x => { + if (typeof x === 'string') return x; + // exam_tasks stores options as [label, html] pairs, e.g. ["а","$b^{-3}=...$"] + if (Array.isArray(x)) return x.map(String).join(' '); + if (x && typeof x === 'object') return x.html || x.text || x.label || ''; + return ''; + }).join(' '); + } catch { return ''; } +} + /* ── Classifier ───────────────────────────────────────────── */ function classify(task) { const subtopic = task.subtopic; @@ -531,9 +551,15 @@ function classify(task) { const rules = SUBTOPIC_RULES[subtopic]; if (!rules || !rules.length) return { slug: null, para: null }; - const txt = stripText(task.text_html); + const txt = stripText(task.text_html + ' ' + optsText(task)); - let bestScore = -1; + // Require at least one keyword match (score > 0) to override the fallback. + // Starting bestScore at 0 (NOT -1) means: when NOTHING matches, the explicit + // fallback (last entry) wins — not the first rule. Critical for subtopics like + // theory-statements / alg-word-problems where the question text often carries + // no distinctive keyword (otherwise every unmatched task collapsed onto the + // first rule — §15 progressions / math-6 percents). + let bestScore = 0; let bestRule = rules[rules.length - 1]; // last = fallback for (const rule of rules) { @@ -548,18 +574,13 @@ function classify(task) { } } - // If nothing matched (bestScore == -1 and bestRule is fallback), use first entry (primary) - if (bestScore < 0) { - bestRule = rules[rules.length - 1]; // explicit fallback - } - return { slug: bestRule.slug, para: bestRule.paragraph }; } /* ── Main ─────────────────────────────────────────────────── */ function main() { const tasks = db.prepare(` - SELECT id, variant, task_idx, task_type, subtopic, text_html + SELECT id, variant, task_idx, task_type, subtopic, text_html, opts_json FROM exam_tasks WHERE exam_key = ? ORDER BY variant, task_idx diff --git a/plans/exam-textbook-links/PLAN.md b/plans/exam-textbook-links/PLAN.md new file mode 100644 index 0000000..b5e93da --- /dev/null +++ b/plans/exam-textbook-links/PLAN.md @@ -0,0 +1,138 @@ +# План: точная привязка задач экзамена math9 к § учебников + +> Составлен Opus 2026-06-03 по итогам discovery. Исполнитель — Sonnet, по фазам, с верификацией. +> Эталон §-таксономии: `plans/exam-textbook-links/taxonomy.md` (читаемая) и +> `backend/scripts/data/g9_textbook_sections.json` (машиночитаемая: {chapter_slug, subject, grade, para_id, num, title}). + +## Контекст (проверено по коду/БД) + +- `exam_tasks`: 800 задач `math9`, у ВСЕХ заполнен `subtopic` (16 подтем) и `topic`. +- Текущая связь — КОСВЕННАЯ и грубая: `exam_tasks.subtopic` → `exam_topics.slug` → один + `textbook_slug`+`textbook_paragraph` на всю подтему (миграция 028). Контроллер + `backend/src/routes/exam-prep.js` штампует `topic_ref` через `getTopicRefMap()`/`shapeTask()`. + Фронт `frontend/js/exam-prep/task-card.js:42` строит ссылку `/textbook/<slug>#sec-p<N>`. +- Покрытие сейчас: 546/800 → конкретный §, 158 → только хаб `algebra-9` (alg-numbers/arithmetic/ + powers/polynomials/word-problems), 96 (theory-statements) → никуда. +- Экзамен 9 кл. проверяет программу 5–9, а интерактивный учебник 9 кл. — только материал 9 года. + Учебники 5–11 все есть (см. dump в discovery). Для math9 релевантны 5–9. + +### Готчи нумерации § (ВАЖНО для классификатора и ссылок) +- **algebra-7, algebra-9, geometry-7, geometry-9** — СКВОЗНАЯ нумерация `sec-pN` по всему учебнику, + но каждый § физически лежит в своём файле-главе. Ключ ссылки = (slug-главы, pN). +- **geometry-8** — ПОГЛАВНАЯ нумерация (каждая глава заново `sec-p1`). Поэтому ОБЯЗАТЕЛЬНО + (slug-главы, pN-внутри-этого-файла). JSON-таксономия уже хранит правильную пару. +- **algebra-8** — сквозная (`sec-p1..p18` по 3 главам). +- **math-5 / math-6** — рендерятся движком `frontend/js/math6_engine.js` + (`<section id="sec-"+p.id>`, p.id из `window.M6.paras`). Статических `sec-pN` в файле нет. + Якорь = `sec-<p.id>`. Если нужно вести в math-5/6 — para_id брать из конфига M6 главы. + +### КРИТИЧНО: deep-link сейчас НЕ РАБОТАЕТ +- Статические страницы algebra/geometry (`algebra_9_ch3.html` и т.п.) подключают только + katex/api.js/xp.js — **`textbook-tracker.js` там НЕ подключён**. Их `init()` всегда + вызывает `goTo('p10')` и `location.hash` ИГНОРИРУЕТ. Используют `.psel-card[data-id]`. +- `textbook-tracker.js` (есть на math-5/6) `handleHashNav()` матчит только `/^#(p\d+)$/` + (т.е. `#pN`, НЕ `#sec-pN`) и кликает `.para-pill[data-para]`. +- exam-prep строит `#sec-pN`. → ссылка ведёт на главу, но НЕ открывает нужный §. +- Сервер отдаёт `/textbook/:slug` обычным `sendFile` (инъекция только при `?embed=1`, + см. `backend/src/server.js:437`). Есть `_renderEmbed()` + `_embedCache`. + +## Цель +Каждая из 800 задач math9 ведёт на наиболее подходящий § учебника 5–9, и клик реально открывает этот §. + +--- + +## Фаза 1 — Починить навигацию deep-link (prerequisite; без неё связь невидима) +Централизованный хелпер, внедряемый СЕРВЕРОМ в HTML учебника для всех режимов `/textbook/:slug`. +- `backend/src/server.js`: обобщить выдачу — всегда читать файл и инжектить + `<script id="__ls_deeplink__">…</script>` перед `</head>` (или перед `</body>`), кэш по + (filePath, mode='plain'|'embed'). Сейчас в обычном режиме `sendFile` — заменить на read+inject+send + c теми же no-store заголовками. Embed-инъекция остаётся как есть, плюс этот же хелпер. +- Хелпер (vanilla, идемпотентный): на `DOMContentLoaded` (+ небольшой setTimeout, чтобы билдеры/ + движок успели построить карточки) и на `hashchange`: + - распарсить `location.hash`: принять `#sec-pN` И `#pN` → нормализовать к `id = 'p'+N`; + - навигация по приоритету: `document.querySelector('.psel-card[data-id="'+id+'"]')?.click()` + → иначе `.para-pill[data-para="'+id+'"]'`?.click() → иначе `window.goTo?.(id)` → + иначе `getElementById('sec-'+id)?.scrollIntoView()`. + - не запускать дважды; не конфликтовать с textbook-tracker (тот матчит `#pN` — наш хелпер + дополнительно поддержит `#sec-pN`). Если на странице есть textbook-tracker и хэш в форме + `#pN`, можно отдать навигацию ему (наш хелпер сработает как фолбэк, клик идемпотентен). +- НЕ ломать embed-bridge (`ls_tb_nav`/`ls_tb_apply`). Хелпер ставить ПОСЛЕ страничных скриптов. +- Проверка: `/textbook/algebra-9-ch3#sec-p13` открывает §13 (метод интервалов), не §10; + `/textbook/geometry-8-ch2#sec-p4` открывает «Площадь треугольника». + +## Фаза 2 — Схема: per-task anchor +- Миграция `backend/src/db/migrations/0NN_exam_task_textbook.sql`: + `ALTER TABLE exam_tasks ADD COLUMN textbook_slug TEXT;` + `ALTER TABLE exam_tasks ADD COLUMN textbook_paragraph INTEGER;` + (ADD COLUMN — без пересборки; runner оборачивает в транзакцию.) +- `npm run migrate` на живой БД. + +## Фаза 3 — Эвристический классификатор (ядро) +`backend/scripts/tag-exam-textbook.js` (по образцу существующего `tag-exam-tasks.js`): +- Грузит `backend/scripts/data/g9_textbook_sections.json` (§-таксономия 7–9). +- Для каждой задачи math9: `stripText(text_html)` (как в tag-exam-tasks.js) + `subtopic` → + выбрать (slug, para): + 1. По `subtopic` → набор кандидатных глав/§ (карта ниже). + 2. Внутри кандидатов — keyword-скоринг по тексту (ключевые слова из § titles + синонимы: + «дискриминант/Виета»→квадратные, «процент»→math-6 проценты, «синус/косинус/теорема»→geometry-9, + «прогресс/разность d/знаменатель q»→прогрессии §15/§17, «параллелограмм/ромб/трапеция»→geometry-8-ch1, …). + 3. Фолбэк: primary § подтемы (если уверенного матча нет). +- Флаги: `--exam math9`, `--dry-run`, `--report` (распределение по §, сколько без §). + Идемпотентно перезаписывает `exam_tasks.textbook_slug/paragraph`. + +### Карта subtopic → primary §/главы (исправляет ошибки 028) +- `alg-numbers` → math-6 (рацион. числа) / math-5 (натуральные) по тексту; иначе хаб `math-6`. +- `alg-arithmetic` → math-5/6. +- `alg-powers` → `algebra-7-ch1` §1 (натур.), §2 (целый показатель), §3 (станд. вид). +- `alg-expressions` → `algebra-7-ch2` §4–5 / `algebra-9-ch1` §5 (преобр. рацион.). +- `alg-polynomials` → `algebra-7-ch2` §8–14 (одночлены/многочлены/ФСУ/разложение). +- `alg-fractions` → `algebra-9-ch1` §1–5 (рацион. дроби) ИЛИ math-6 (обыкн. дроби) по тексту. +- `alg-equations` → линейные `algebra-7-ch3` §15; квадратные `algebra-8-ch2` §7–9; + дробно-рацион. `algebra-9-ch3` §10; системы `algebra-7-ch4` §23–24 — по тексту. +- `alg-inequalities` → `algebra-8-ch3` §13–18; метод интервалов `algebra-9-ch3` §13 / `algebra-8-ch3` §17. +- `alg-functions` → линейная `algebra-7-ch3` §19–20; свойства/графики `algebra-9-ch2` §6–9. +- `alg-progressions` → `algebra-9-ch4`: арифм. §15/§16, геом. §17–19 (по «d»/«q»). +- `alg-word-problems` → по теме: проценты→`math-6-ch2`; уравнением→`algebra-7-ch3` §16; + системой→`algebra-7-ch4` §25; квадратным→`algebra-8-ch2` §11. +- `geom-triangles` → признаки `geometry-7-ch2`; Пифагор `geometry-8-ch2` §11; подобие `geometry-8-ch3`; + тригонометрия пр. треуг. `geometry-9-ch1` — по тексту. +- `geom-quadrilaterals` → `geometry-8-ch1` §4–16 (паралл./прямоуг./ромб/квадрат/трапеция); + вписанные/описанные `geometry-9-ch2` §9. +- `geom-circle` → `geometry-8-ch4` (вписанные углы и т.п.) / `geometry-9-ch2`. +- `geom-coordinates` → уравнение окружности `algebra-9-ch3` §12; координаты — geometry/algebra по тексту. +- `theory-statements` → распределить по теме утверждения (тот же скоринг); иначе оставить NULL + (фолбэк на subtopic-уровень, см. Фазу 5). + +## Фаза 4 — Контроллер: предпочесть task-level +`backend/src/routes/exam-prep.js`: +- В SELECT задач (`getVariantTasks`, `practiceRandom/Unsolved`, `pickRandomByDifficulty`, + `topicTasks*`, `weakBatchTasks`, `getTasksByIds`) добавить `t.textbook_slug, t.textbook_paragraph`. +- `shapeTask()` и формирование `topic_ref` в `/variants/:n/tasks`: если у задачи есть + `textbook_slug` → `topic_ref = { title, slug: task.textbook_slug, paragraph: task.textbook_paragraph }` + (title — из таксономии § или из подтемы), иначе фолбэк на `refMap.get(subtopic)`. +- Title для task-level: можно прокинуть из классификатора в отдельную таблицу/JSON или + собрать map para→title из таксономии при старте (как `getTopicRefMap`). + +## Фаза 5 — Улучшить subtopic-фолбэк (миграция данных) +- Новая миграция: переписать `exam_topics.textbook_slug/paragraph` корректно (исправить + `alg-equations`→дробно-рацион. только частный случай и т.п.), заполнить хаб-only разумным §. + Это фолбэк для задач, которым классификатор не дал task-level. + +## Фаза 6 — Тесты + верификация +- `backend/tests/exam-textbook-links.test.js`: миграция применилась (колонки есть); + после классификатора ≥90% задач имеют `textbook_slug` (или явно объяснённый остаток); + `GET /:examKey/variants/:n/tasks` отдаёт `topic_ref` с `paragraph` для размеченных задач; + ссылка формата `/textbook/<slug>#sec-p<N>` для валидного slug из таблицы textbooks. +- Прогон `node tag-exam-textbook.js --report` — приложить распределение. +- `node --test tests/*.test.js` в рамках baseline (3 Auth + флака «intro» chemistry8). +- Перезапуск сервера (подхватить миграцию + новые SELECT-поля; `_topicRefCache` для фолбэка). + +## Ограничения исполнителю (Sonnet) +- БД: встроенный `node:sqlite` (DatabaseSync), НЕ better-sqlite3. +- Большие файлы (server.js, exam-prep.js, HTML) — ТОЛЬКО точечный `Edit`, НЕ Write целиком. +- ⛔ Без эмоджи; иконки — только inline SVG `.ic`. +- Миграции — ADD COLUMN/UPDATE; НЕ пересобирать users/центральные таблицы. +- `fetch` origin перед работой (в master параллельно коммитят другие сессии); `git add` поимённо. +- Поиск: ast-index/Read, НЕ Grep tool. Каждый Edit верифицировать. +- Коммитить поэтапно осмысленными сообщениями + push (CLAUDE.md), трейлер + `Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>`. diff --git a/plans/exam-textbook-links/taxonomy.md b/plans/exam-textbook-links/taxonomy.md new file mode 100644 index 0000000..97683a7 --- /dev/null +++ b/plans/exam-textbook-links/taxonomy.md @@ -0,0 +1,249 @@ +# §-таксономия учебников 5–9 (математика) — эталон для классификатора экзамена math9 + + +## math-5 +### math-5-ch1 — Математика 5 · Глава 1 · Натуральные числа + (движок math6: статических sec[id] нет; якоря строятся из window.M6.paras → id="sec-<p.id>") +### math-5-ch2 — Математика 5 · Глава 2 · Выражения. Уравнения + (движок math6: статических sec[id] нет; якоря строятся из window.M6.paras → id="sec-<p.id>") +### math-5-ch3 — Математика 5 · Глава 3 · Обыкновенные дроби + (движок math6: статических sec[id] нет; якоря строятся из window.M6.paras → id="sec-<p.id>") + +## math-6 +### math-6-ch1 — Математика 6 · Глава 1 · Десятичные дроби + (движок math6: статических sec[id] нет; якоря строятся из window.M6.paras → id="sec-<p.id>") +### math-6-ch2 — Математика 6 · Глава 2 · Проценты и пропорции + (движок math6: статических sec[id] нет; якоря строятся из window.M6.paras → id="sec-<p.id>") +### math-6-ch3 — Математика 6 · Глава 3 · Множество + (движок math6: статических sec[id] нет; якоря строятся из window.M6.paras → id="sec-<p.id>") +### math-6-ch4 — Математика 6 · Глава 4 · Рациональные числа + (движок math6: статических sec[id] нет; якоря строятся из window.M6.paras → id="sec-<p.id>") +### math-6-ch5 — Математика 6 · Глава 5 · Координатная плоскость + (движок math6: статических sec[id] нет; якоря строятся из window.M6.paras → id="sec-<p.id>") +### math-6-ch6 — Математика 6 · Глава 6 · Наглядная геометрия + (движок math6: статических sec[id] нет; якоря строятся из window.M6.paras → id="sec-<p.id>") + +## algebra-7 +### algebra-7-ch1 — Алгебра 7 · Глава 1 · Степени + sec-p1 [§ 1] Степень с натуральным показателем и её свойства + sec-p2 [§ 2] Степень с целым показателем и её свойства + sec-p3 [§ 3] Стандартный вид числа + sec-final1 [Финал главы] Итоги. Боссы главы 1 +### algebra-7-ch2 — Алгебра 7 · Глава 2 · Выражения и преобразования + sec-p4 [§ 4] Числовые выражения и выражения с переменными + sec-p5 [§ 5] Тождество. Тождественные преобразования + sec-p6 [§ 6] Одночлен. Стандартный вид. Степень + sec-p7 [§ 7] Действия с одночленами + sec-p8 [§ 8] Многочлен. Стандартный вид. Степень + sec-p9 [§ 9] Сложение и вычитание многочленов + sec-p10 [§ 10] Умножение и деление многочлена на одночлен + sec-p11 [§ 11] Умножение многочленов + sec-p12 [§ 12] Квадрат суммы и квадрат разности + sec-p13 [§ 13] Разность квадратов: (a−b)(a+b) = a\xB2−b\xB2 + sec-p14 [§ 14] Разложение многочлена на множители + sec-final2 [Финал главы] Итоги. 6 боссов главы 2 +### algebra-7-ch3 — Алгебра 7 · Глава 3 · Уравнения, неравенства, функция + sec-p15 [§ 15] Линейные уравнения с одной переменной + sec-p16 [§ 16] Решение текстовых задач с помощью уравнений + sec-p17 [§ 17] Числовые неравенства и их свойства + sec-p18 [§ 18] Линейные неравенства с одной переменной + sec-p19 [§ 19] Функция + sec-p20 [§ 20] Линейная функция и её свойства + sec-final3 [Финал главы] Итоги. 5 боссов главы 3 +### algebra-7-ch4 — Алгебра 7 · Глава 4 · Системы линейных уравнений + sec-p21 [§ 21] Линейное уравнение с двумя переменными + sec-p22 [§ 22] График линейного уравнения $ax + by = c$ + sec-p23 [§ 23] Система линейных уравнений с двумя переменными + sec-p24 [§ 24] Способы решения системы (подстановка, сложение) + sec-p25 [§ 25] Решение текстовых задач с помощью системы + sec-final4 [Финал главы] Итоги. 5 боссов главы 4 + +## geometry-7 +### geometry-7-ch1 — Геометрия 7 · Глава 1 · Начальные понятия + sec-p1 [§ 1] Повторение материала 5-6 классов + sec-p2 [§ 2] Предмет геометрии + sec-p3 [§ 3] Прямая. Луч. Отрезок. Ломаная + sec-p4 [§ 4] Окружность и круг + sec-p5 [§ 5] Угол. Виды углов + sec-p6 [§ 6] Смежные углы. Вертикальные углы + sec-p7 [§ 7] Перпендикулярные прямые + sec-final1 [Финал главы] Итоги. 5 боссов главы 1 +### geometry-7-ch2 — Геометрия 7 · Глава 2 · Признаки равенства треугольников + sec-p8 [§ 8] Треугольники + sec-p9 [§ 9] Первый и второй признаки равенства + sec-p10 [§ 10] Высота, медиана и биссектриса треугольника + sec-p11 [§ 11] Равнобедренный треугольник + sec-p12 [§ 12] Признаки равнобедренного треугольника + sec-p13 [§ 13] Третий признак равенства треугольников + sec-p14 [§ 14] Серединный перпендикуляр к отрезку + sec-final2 [Финал главы] Итоги. 6 боссов главы 2 +### geometry-7-ch3 — Геометрия 7 · Глава 3 · Параллельность прямых + sec-p15 [§ 15] Признаки параллельности прямых + sec-p16 [§ 16] Аксиома параллельных прямых + sec-p17 [§ 17] Свойства параллельных прямых + sec-p18 [§ 18] Углы со сторонами, соответственно параллельными или перпендикулярными + sec-final3 [Финал главы] Итоги. 5 боссов главы 3 +### geometry-7-ch4 — Геометрия 7 · Глава 4 · Сумма углов треугольника + sec-p19 [§ 19] Сумма углов треугольника + sec-p20 [§ 20] Внешний угол треугольника + sec-p21 [§ 21] Соотношения между сторонами и углами + sec-p22 [§ 22] Неравенство треугольника + sec-p23 [§ 23] Прямоугольные треугольники + sec-p24 [§ 24] Признаки равенства прямоугольных треугольников + sec-p25 [§ 25] Биссектриса угла как ГМТ + sec-p26 [§ 26] Свойство катета против угла 30° + sec-final4 [Финал главы] Итоги. 5 боссов главы 4 +### geometry-7-ch5 — Геометрия 7 · Глава 5 · Задачи на построение + sec-p27 [§ 27] Простейшие построения + sec-p28 [§ 28] Построение треугольника по 3 сторонам + sec-p29 [§ 29] Построение биссектрисы угла + sec-p30 [§ 30] Середина и перпендикуляр + sec-p31 [§ 31] Метод геометрических мест точек + sec-final5 [Финал главы] Итоги. 5 боссов главы 5 + +## algebra-8 +### algebra-8-ch1 — Алгебра 8 — Глава 1 · Квадратные корни и действительные числа + sec-p1 [§ 1] Квадратный корень из числа. Арифметический квадратный корень + sec-p2 [§ 2] Множество иррациональных чисел. Множество действительных чисел + sec-p3 [§ 3] Свойства квадратных корней + sec-p4 [§ 4] Применение свойств квадратных корней + sec-p5 [§ 5] Числовые промежутки. Объединение и пересечение + sec-p6 [§ 6] Системы и совокупности линейных неравенств. Двойные неравенства + sec-final [Финал главы] Итоги. Практическая и увлекательная математика +### algebra-8-ch2 — Алгебра 8 · Глава 2 · Квадратные уравнения + sec-p7 [§ 7] Квадратные уравнения. Решение неполных квадратных уравнений + sec-p8 [§ 8] Формулы корней квадратного уравнения + sec-p9 [§ 9] Теорема Виета + sec-p10 [§ 10] Квадратный трёхчлен. Разложение на множители + sec-p11 [§ 11] Решение текстовых задач с помощью квадратных уравнений + sec-p12 [§ 12] Целые рациональные уравнения, сводящиеся к квадратным + sec-final2 [Финал главы] Итоги. Практическая и увлекательная математика +### algebra-8-ch3 — Алгебра 8 · Глава 3 · Неравенства + sec-p13 [§ 13] Числовые неравенства и их свойства + sec-p14 [§ 14] Сложение и умножение числовых неравенств. Оценка значений + sec-p15 [§ 15] Числовые промежутки. Линейные неравенства + sec-p16 [§ 16] Системы и совокупности линейных неравенств + sec-p17 [§ 17] Квадратные неравенства. Метод интервалов + sec-p18 [§ 18] Дробно-рациональные неравенства + sec-final3 [Финал главы] Итоги. Практическая и увлекательная математика + +## geometry-8 +### geometry-8-ch1 — Геометрия 8 · Глава 1 · Многоугольники + sec-p1 [§ 1] Выпуклые многоугольники. Диагональ. Периметр + sec-p2 [§ 2] Сумма углов выпуклого многоугольника + sec-p3 [§ 3] Сумма внешних углов выпуклого многоугольника + sec-p4 [§ 4] Параллелограмм + sec-p5 [§ 5] Свойства параллелограмма + sec-p6 [§ 6] Признаки параллелограмма + sec-p7 [§ 7] Прямоугольник. Свойство диагоналей + sec-p8 [§ 8] Признак прямоугольника + sec-p9 [§ 9] Ромб. Свойство диагоналей ромба. Признаки ромба + sec-p10 [§ 10] Квадрат. Свойства квадрата + sec-p11 [§ 11] Теорема Фалеса. Деление отрезка на равные части + sec-p12 [§ 12] Свойство медиан треугольника + sec-p13 [§ 13] Свойство средней линии треугольника + sec-p14 [§ 14] Трапеция. Свойство средней линии + sec-p15 [§ 15] Свойство углов и диагоналей равнобедренной трапеции + sec-p16 [§ 16] Признаки равнобедренной трапеции + sec-final1 [Финал главы] Итоги. Боссы главы 1 +### geometry-8-ch2 — Геометрия 8 · Глава 2 · Площади + sec-p1 [§ 1] Площадь квадрата + sec-p2 [§ 2] Площадь прямоугольника + sec-p3 [§ 3] Площадь параллелограмма + sec-p4 [§ 4] Площадь треугольника + sec-p5 [§ 5] Площадь трапеции + sec-p6 [§ 6] Площадь ромба + sec-p7 [§ 7] Площадь прямоугольного треугольника + sec-p8 [§ 8] Высота, проведённая к гипотенузе + sec-p9 [§ 9] Треугольники с общей высотой + sec-p10 [§ 10] Свойства медианы для площадей + sec-p11 [§ 11] Теорема Пифагора + sec-p12 [§ 12] S и h равностороннего треугольника + sec-p13 [§ 13] Диагональ квадрата + sec-p14 [§ 14] Обратная теорема Пифагора + sec-p15 [§ 15] Пифагоровы тройки + sec-final2 [Финал главы] Итоги. Боссы главы 2 +### geometry-8-ch3 — Геометрия 8 · Глава 3 · Подобные треугольники + sec-p1 [§ 1] Теорема Фалеса (обобщённая) + sec-p2 [§ 2] Деление отрезка в отношении m : n + sec-p3 [§ 3] Определение подобных треугольников + sec-p4 [§ 4] Свойство прямой, параллельной стороне треугольника + sec-p5 [§ 5] Первый признак подобия. Следствие + sec-p6 [§ 6] Второй признак подобия + sec-p7 [§ 7] Третий признак подобия + sec-p8 [§ 8] Свойство биссектрисы треугольника + sec-p9 [§ 9] Отношение площадей подобных треугольников + sec-final3 [Финал главы] Итоги. Боссы главы 3 +### geometry-8-ch4 — Геометрия 8 · Глава 4 · Окружности + sec-p1 [§ 1] Касательная. Признак касательной + sec-p2 [§ 2] Свойство касательной + sec-p3 [§ 3] Свойство касательных из одной точки + sec-p4 [§ 4] Построение касательной + sec-p5 [§ 5] Свойство окружностей, вписанных в угол + sec-p6 [§ 6] Взаимное расположение окружностей + sec-p7 [§ 7] Длина общей внешней касательной + sec-p8 [§ 8] Центральный угол. Градусная мера дуги. Вписанный угол + sec-p9 [§ 9] Свойство вписанного угла + sec-p10 [§ 10] Вписанные углы, опирающиеся на одну дугу + sec-p11 [§ 11] Вписанный угол, опирающийся на диаметр + sec-p12 [§ 12] Угол между касательной и хордой + sec-p13 [§ 13] Угол между хордами + sec-p14 [§ 14] Угол между секущими + sec-p15 [§ 15] Свойство пересекающихся хорд + sec-p16 [§ 16] Свойство касательной и секущей + sec-final4 [Финал главы] Итоги. Боссы главы 4 + +## algebra-9 +### algebra-9-ch1 — Алгебра 9 · Глава 1 · Рациональные выражения + sec-p1 [§ 1] Рациональная дробь + sec-p2 [§ 2] Основное свойство дроби + sec-p3 [§ 3] Сложение и вычитание + sec-p4 [§ 4] Умножение и деление + sec-p5 [§ 5] Преобразование выражений + sec-final1 [Финал главы] Итоги. 5 боссов главы 1 +### algebra-9-ch2 — Алгебра 9 · Глава 2 · Функции + sec-p6 [§ 6] Функция числового аргумента + sec-p7 [§ 7] Свойства функции + sec-p8 [§ 8] Чётные и нечётные функции + sec-p9 [§ 9] Сдвиги графиков + sec-final2 [Финал главы] Итоги. 5 боссов главы 2 +### algebra-9-ch3 — Алгебра 9 · Глава 3 · Дробно-рациональные уравнения и неравенства + sec-p10 [§ 10] Дробно-рациональные уравнения + sec-p11 [§ 11] Системы нелинейных уравнений + sec-p12 [§ 12] Уравнение окружности + sec-p13 [§ 13] Метод интервалов + sec-final3 [Финал главы] Итоги. 4 боссов главы 3 +### algebra-9-ch4 — Алгебра 9 · Глава 4 · Прогрессии + sec-p14 [§ 14] Числовая последовательность + sec-p15 [§ 15] Арифметическая прогрессия + sec-p16 [§ 16] Сумма арифм. прогрессии + sec-p17 [§ 17] Геометрическая прогрессия + sec-p18 [§ 18] Сумма геом. прогрессии + sec-p19 [§ 19] Бесконечно убывающая + sec-final4 [Финал главы] Итоги. 6 боссов главы 4 + +## geometry-9 +### geometry-9-ch1 — Геометрия 9 · Глава 1 · Соотношения в прямоугольном треугольнике + sec-p1 [§ 1] sin, cos, tg, ctg острого угла + sec-p2 [§ 2] Решение прямоугольного треугольника + sec-p3 [§ 3] Тригонометрические формулы + sec-p4 [§ 4] sin, cos, tg, ctg тупого угла + sec-p5 [§ 5] Формулы площади + sec-p6 [§ 6] Среднее геометрическое + sec-final1 [Финал главы] Итоги главы 1 +### geometry-9-ch2 — Геометрия 9 · Глава 2 · Окружности + sec-p7 [§ 7] Описанная и вписанная окружности треугольника + sec-p8 [§ 8] Окружности прямоугольного треугольника + sec-p9 [§ 9] Вписанные и описанные четырёхугольники + sec-final2 [★] Итоги главы 2 +### geometry-9-ch3 — Геометрия 9 · Глава 3 · Теоремы синусов и косинусов + sec-p10 [§ 10] Теорема синусов + sec-p11 [§ 11] Теорема косинусов + sec-p12 [§ 12] Формула Герона. Решение треугольников + sec-final3 [★] Итоги главы 3 +### geometry-9-ch4 — Геометрия 9 · Глава 4 · Правильные многоугольники + sec-p13 [§ 13] Правильные многоугольники + sec-p14 [§ 14] Формулы радиусов + sec-p15 [§ 15] Треугольник, квадрат, шестиугольник + sec-p16 [§ 16] Длина окружности и площадь круга + sec-final4 [★] Итоги главы 4 \ No newline at end of file