egekit-study 1.2.2__tar.gz → 1.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- egekit_study-1.3.0/GUIDE.html +654 -0
- egekit_study-1.3.0/GUIDE.md +3444 -0
- {egekit_study-1.2.2 → egekit_study-1.3.0}/MANIFEST.in +1 -0
- egekit_study-1.3.0/PKG-INFO +175 -0
- egekit_study-1.3.0/README.md +165 -0
- {egekit_study-1.2.2 → egekit_study-1.3.0}/RUSSIAN_NAMES.md +4 -2
- {egekit_study-1.2.2 → egekit_study-1.3.0}/VALIDATION.md +24 -2
- {egekit_study-1.2.2 → egekit_study-1.3.0}/build_docs.py +25 -9
- {egekit_study-1.2.2 → egekit_study-1.3.0}/egekit.py +171 -51
- egekit_study-1.3.0/egekit_study.egg-info/PKG-INFO +175 -0
- egekit_study-1.3.0/egekit_study.egg-info/SOURCES.txt +79 -0
- egekit_study-1.3.0/egekit_study.egg-info/top_level.txt +3 -0
- egekit_study-1.3.0/egekit_support.py +1071 -0
- egekit_study-1.3.0/examples_man.py +8 -0
- {egekit_study-1.2.2 → egekit_study-1.3.0}/pyproject.toml +2 -2
- egekit_study-1.3.0/templates/2026/task_01.py +12 -0
- egekit_study-1.3.0/templates/2026/task_02.py +12 -0
- egekit_study-1.3.0/templates/2026/task_03.py +15 -0
- egekit_study-1.3.0/templates/2026/task_04.py +12 -0
- egekit_study-1.3.0/templates/2026/task_05.py +13 -0
- egekit_study-1.3.0/templates/2026/task_06.py +15 -0
- egekit_study-1.3.0/templates/2026/task_07.py +12 -0
- egekit_study-1.3.0/templates/2026/task_08.py +12 -0
- egekit_study-1.3.0/templates/2026/task_09.py +14 -0
- egekit_study-1.3.0/templates/2026/task_10.py +12 -0
- egekit_study-1.3.0/templates/2026/task_11.py +12 -0
- egekit_study-1.3.0/templates/2026/task_12.py +13 -0
- egekit_study-1.3.0/templates/2026/task_13.py +12 -0
- egekit_study-1.3.0/templates/2026/task_14.py +12 -0
- egekit_study-1.3.0/templates/2026/task_15.py +12 -0
- egekit_study-1.3.0/templates/2026/task_16.py +13 -0
- egekit_study-1.3.0/templates/2026/task_17.py +14 -0
- egekit_study-1.3.0/templates/2026/task_18.py +13 -0
- egekit_study-1.3.0/templates/2026/task_19.py +16 -0
- egekit_study-1.3.0/templates/2026/task_20.py +16 -0
- egekit_study-1.3.0/templates/2026/task_21.py +16 -0
- egekit_study-1.3.0/templates/2026/task_22.py +14 -0
- egekit_study-1.3.0/templates/2026/task_23.py +12 -0
- egekit_study-1.3.0/templates/2026/task_24.py +13 -0
- egekit_study-1.3.0/templates/2026/task_25.py +12 -0
- egekit_study-1.3.0/templates/2026/task_26.py +13 -0
- egekit_study-1.3.0/templates/2026/task_27.py +16 -0
- egekit_study-1.3.0/templates/2027/task_01.py +12 -0
- egekit_study-1.3.0/templates/2027/task_02.py +12 -0
- egekit_study-1.3.0/templates/2027/task_03.py +15 -0
- egekit_study-1.3.0/templates/2027/task_04.py +12 -0
- egekit_study-1.3.0/templates/2027/task_05.py +13 -0
- egekit_study-1.3.0/templates/2027/task_06.py +15 -0
- egekit_study-1.3.0/templates/2027/task_07.py +12 -0
- egekit_study-1.3.0/templates/2027/task_08.py +12 -0
- egekit_study-1.3.0/templates/2027/task_09.py +14 -0
- egekit_study-1.3.0/templates/2027/task_10.py +12 -0
- egekit_study-1.3.0/templates/2027/task_11.py +12 -0
- egekit_study-1.3.0/templates/2027/task_12.py +13 -0
- egekit_study-1.3.0/templates/2027/task_13.py +12 -0
- egekit_study-1.3.0/templates/2027/task_14.py +12 -0
- egekit_study-1.3.0/templates/2027/task_15.py +12 -0
- egekit_study-1.3.0/templates/2027/task_16.py +13 -0
- egekit_study-1.3.0/templates/2027/task_17.py +14 -0
- egekit_study-1.3.0/templates/2027/task_18.py +13 -0
- egekit_study-1.3.0/templates/2027/task_19.py +16 -0
- egekit_study-1.3.0/templates/2027/task_20.py +16 -0
- egekit_study-1.3.0/templates/2027/task_21.py +16 -0
- egekit_study-1.3.0/templates/2027/task_22.py +14 -0
- egekit_study-1.3.0/templates/2027/task_23.py +13 -0
- egekit_study-1.3.0/templates/2027/task_24.py +13 -0
- egekit_study-1.3.0/templates/2027/task_25.py +12 -0
- egekit_study-1.3.0/templates/2027/task_26.py +13 -0
- egekit_study-1.3.0/templates/2027/task_27.py +18 -0
- egekit_study-1.3.0/tests/manual_fixtures.py +23 -0
- egekit_study-1.3.0/tests/test_learning_tools.py +100 -0
- {egekit_study-1.2.2 → egekit_study-1.3.0}/tests/test_manual.py +1 -1
- {egekit_study-1.2.2 → egekit_study-1.3.0}/tests/test_russian_names.py +1 -1
- egekit_study-1.2.2/GUIDE.html +0 -497
- egekit_study-1.2.2/GUIDE.md +0 -1446
- egekit_study-1.2.2/PKG-INFO +0 -208
- egekit_study-1.2.2/README.md +0 -198
- egekit_study-1.2.2/egekit_study.egg-info/PKG-INFO +0 -208
- egekit_study-1.2.2/egekit_study.egg-info/SOURCES.txt +0 -22
- egekit_study-1.2.2/egekit_study.egg-info/top_level.txt +0 -2
- egekit_study-1.2.2/examples_man.py +0 -10
- {egekit_study-1.2.2 → egekit_study-1.3.0}/LICENSE +0 -0
- {egekit_study-1.2.2 → egekit_study-1.3.0}/egekit_study.egg-info/dependency_links.txt +0 -0
- {egekit_study-1.2.2 → egekit_study-1.3.0}/examples.py +0 -0
- {egekit_study-1.2.2 → egekit_study-1.3.0}/examples_ru.py +0 -0
- {egekit_study-1.2.2 → egekit_study-1.3.0}/setup.cfg +0 -0
- {egekit_study-1.2.2 → egekit_study-1.3.0}/tests/test_egekit.py +0 -0
- {egekit_study-1.2.2 → egekit_study-1.3.0}/verify_official.py +0 -0
- {egekit_study-1.2.2 → egekit_study-1.3.0}//320/265/320/263/321/215.py" +0 -0
|
@@ -0,0 +1,654 @@
|
|
|
1
|
+
<!doctype html><html lang="ru"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
|
2
|
+
<title>EGEKit — 114 функций для ЕГЭ по информатике</title>
|
|
3
|
+
<style>
|
|
4
|
+
:root{color-scheme:light;--ink:#172a3a;--blue:#075c80;--line:#dbe5ea;--pale:#edf5f8}
|
|
5
|
+
*{box-sizing:border-box}body{margin:0;background:#f5f7f9;color:var(--ink);font:16px/1.65 system-ui,sans-serif}header{background:#122d40;color:white;padding:48px max(24px,calc((100vw - 1100px)/2))}header p{max-width:870px;color:#d4e7ef}h1{font-size:clamp(30px,5vw,48px);line-height:1.15;margin:8px 0 24px}h2{font-size:26px;margin:44px 0 18px}h3{margin:0;color:var(--blue);font-size:21px;overflow-wrap:anywhere}.eyebrow{letter-spacing:2px;font-size:12px;text-transform:uppercase}.wrap{max-width:1150px;margin:auto;padding:0 24px 64px}a{color:var(--blue)}header a{color:#bfe5f8}.intro,article{background:white;border:1px solid var(--line);padding:24px;border-radius:12px;margin:14px 0}pre{white-space:pre-wrap;overflow-wrap:anywhere;background:#eef3f6;border-radius:8px;padding:16px;font-size:14px;line-height:1.6}code{font-family:ui-monospace,Consolas,monospace}table{width:100%;border-collapse:collapse;font-size:14px}th,td{text-align:left;border-bottom:1px solid var(--line);padding:12px;vertical-align:top}th{background:var(--pale)}.tablewrap{overflow-x:auto}td:first-child{font-weight:bold;min-width:40px}td code{overflow-wrap:anywhere}.controls{position:sticky;top:0;background:#f5f7f9f2;border-bottom:1px solid var(--line);padding:18px 0;z-index:1;display:flex;flex-wrap:wrap;gap:12px;align-items:end}.control{display:flex;flex-direction:column;font-size:13px;font-weight:600}.search{flex:1;min-width:220px}input,select{font:inherit;background:white;border:1px solid #9cb5c3;border-radius:6px;padding:10px;color:var(--ink);max-width:100%}input:focus,select:focus{outline:3px solid #a0d9ee}.tags{font-size:13px;color:#49687b;margin:6px 0 14px}.example{border-left:3px solid #1c8cad;padding-left:14px}li{margin:12px 0}.muted{color:#587081;font-size:14px}article[hidden]{display:none}.count{min-width:120px;font-size:13px;align-self:center}details{background:white;border:1px solid var(--line);padding:18px;border-radius:10px}summary{cursor:pointer;font-weight:600}@media print{.controls{display:none}body{background:white}header{padding:20px;color:#172a3a;background:white}header p{color:#172a3a}article{break-inside:avoid}details>*{display:block}}@media(max-width:600px){.wrap{padding:0 14px 40px}header{padding:30px 20px}article{padding:16px}td,th{padding:8px}}
|
|
6
|
+
</style>
|
|
7
|
+
<header><div class="eyebrow">Python 3.10+ · версия 1.3.0 · без зависимостей</div><h1>EGEKit<br>114 функций для подготовки к ЕГЭ</h1><p>Учебная библиотека Python 3.10+ без внешних зависимостей. 114 функций для тем всех 27 номеров. Это инструменты и шаблоны: условие, диапазон и критерий проверки переносите из конкретной задачи. Автоматического решения любой формулировки и гарантии всех будущих подтипов здесь нет. Все функции доступны под понятными русскими именами; английские варианты также работают.</p><a href="#catalog">Перейти к справочнику ↓</a></header>
|
|
8
|
+
<main class="wrap"><section class="intro"><h2 style="margin-top:0">Начало работы</h2><p>Положите <code>egekit.py</code>, <code>егэ.py</code> и <code>egekit_support.py</code> рядом со своим <code>solution.py</code> либо установите пакет egekit-study версии 1.3.0 и новее. Установка не нужна. Запустите <code>python solution.py</code> в терминале этой папки. Полная инструкция — в README.md.</p><pre><code>from егэ import *
|
|
9
|
+
|
|
10
|
+
print(делители(120))
|
|
11
|
+
print(перевести_в_систему(125, 3))
|
|
12
|
+
man(делители) # Назначение, параметры, пример и вывод
|
|
13
|
+
man(делители, исходник=True) # Справка и настоящий код
|
|
14
|
+
шаблон(17) # Самостоятельная учебная заготовка
|
|
15
|
+
код(делители) # Только исходный код
|
|
16
|
+
man(17) # Функции для задания 17
|
|
17
|
+
man(по_заданиям=False) # При необходимости — алфавитный список
|
|
18
|
+
man(поиск='простые') # Поиск в справочнике
|
|
19
|
+
</code></pre><p>Примеры по всем номерам: <code>python examples_ru.py</code>. Отдельный номер: <code>python examples_ru.py --year 2027 23</code>.</p></section>
|
|
20
|
+
<h2>Номера и основные функции</h2><p>Базовая нумерация — 2026. В правом столбце тем указаны изменения проекта ФИПИ 2027.</p><div class="tablewrap"><table><thead><tr><th>№</th><th>Тема 2026</th><th>Проект 2027</th><th>С чего начать</th></tr></thead><tbody><tr><td>1</td><td>Графы и соответствие вершин</td><td>—</td><td><code>сопоставить_вершины_графов, кратчайшие_расстояния</code></td></tr><tr><td>2</td><td>Логика и таблицы истинности</td><td>—</td><td><code>таблица_истинности, определить_столбцы_таблицы, следование</code></td></tr><tr><td>3</td><td>Таблицы и базы данных</td><td>—</td><td><code>прочитать_xlsx, прочитать_ods, соединить_таблицы, сгруппировать_и_вычислить, запрос_к_базе</code></td></tr><tr><td>4</td><td>Коды и условие Фано</td><td>—</td><td><code>проверка_условия_Фано, допустимые_кодовые_слова, коды_Хаффмана, длина_кодированного_сообщения</code></td></tr><tr><td>5</td><td>Алгоритмы преобразования чисел</td><td>—</td><td><code>преобразовать_двоичную_запись, перевести_в_систему, найти_значения</code></td></tr><tr><td>6</td><td>Черепаха и геометрия</td><td>—</td><td><code>вершины_черепахи, внутренние_точки_по_Пику, целые_точки_в_фигурах</code></td></tr><tr><td>7</td><td>Изображения, звук и передача данных</td><td>—</td><td><code>объём_изображения_в_битах, объём_звука_в_битах, время_передачи</code></td></tr><tr><td>8</td><td>Комбинаторика и порядок слов</td><td>—</td><td><code>количество_слов, номер_слова, слово_по_номеру, различные_перестановки</code></td></tr><tr><td>9</td><td>Обработка строк таблицы</td><td>—</td><td><code>характеристики_строки, отобрать_строки</code></td></tr><tr><td>10</td><td>Поиск в текстовом документе</td><td>IPv4 и маски сетей</td><td><code>текст_из_docx, количество_вхождений</code></td></tr><tr><td>11</td><td>Объём хранения идентификаторов</td><td>—</td><td><code>бит_на_символ, объём_хранения_в_байтах</code></td></tr><tr><td>12</td><td>Редактор и машина Тьюринга</td><td>—</td><td><code>редактор_строк, машина_Тьюринга</code></td></tr><tr><td>13</td><td>IPv4 и маски сетей</td><td>Исполнители и количество программ</td><td><code>сведения_о_сети, количество_ip_по_условию, распределение_ip_по_единицам</code></td></tr><tr><td>14</td><td>Системы счисления</td><td>—</td><td><code>перевести_в_систему, перевести_из_системы, цифры_числа</code></td></tr><tr><td>15</td><td>Логические условия и параметры</td><td>—</td><td><code>следование, допустимые_параметры, принадлежит_интервалу</code></td></tr><tr><td>16</td><td>Рекурсия и рекуррентные формулы</td><td>—</td><td><code>вычислить_рекуррентную_функцию, рекурсивная_функция</code></td></tr><tr><td>17</td><td>Последовательности, пары и тройки</td><td>—</td><td><code>прочитать_числа, соседние_группы, статистика_соседних_групп</code></td></tr><tr><td>18</td><td>Робот и пути по таблице</td><td>—</td><td><code>суммы_путей_робота</code></td></tr><tr><td>19</td><td>Игры: первый ход</td><td>—</td><td><code>анализатор_игры</code></td></tr><tr><td>20</td><td>Игры: стратегия победы</td><td>—</td><td><code>анализатор_игры</code></td></tr><tr><td>21</td><td>Игры: неизбежное поражение</td><td>—</td><td><code>анализатор_игры</code></td></tr><tr><td>22</td><td>Параллельные процессы и зависимости</td><td>—</td><td><code>процессы_из_таблицы, расписание_процессов, активные_процессы, максимум_одновременных_интервалов</code></td></tr><tr><td>23</td><td>Исполнители и количество программ</td><td>Пути в ориентированном графе</td><td><code>количество_программ, количество_программ_через_точки</code></td></tr><tr><td>24</td><td>Строки, подстроки и выражения</td><td>—</td><td><code>подстрока_не_более, подстрока_ровно, подстрока_не_менее, найти_по_регулярному_выражению</code></td></tr><tr><td>25</td><td>Делители, простые числа и маски</td><td>—</td><td><code>делители, разложить_на_простые, решето_простых, кратные_по_маске</code></td></tr><tr><td>26</td><td>Сортировка, выбор и моделирование</td><td>—</td><td><code>выбрать_файлы_для_архива, выбрать_непересекающиеся_интервалы, вложенные_коробки, свободные_места, очередь_обслуживания, журнал_резервных_копий</code></td></tr><tr><td>27</td><td>Кластеризация и алгоритмы анализа данных</td><td>Анализ данных: точки, признаки и энергия частиц</td><td><code>кластеры_по_расстоянию, центр_по_сумме_расстояний, кластеры_по_размаху_признака, центр_по_медиане_признака; дополнительно — префиксы, остатки, динамика</code></td></tr></tbody></table></div>
|
|
21
|
+
<h2>Как применять функции</h2><details><summary>Правила, ограничения и частые ошибки</summary><ul><li>Новый модуль: from егэ import *. После импорта используйте функции без префикса. man() показывает список, man(делители) или man("делители") — подробную справку, man(17) — функции задания 17. Синоним man — справка. Для постраничного просмотра: man(листать=True), выход обычно q.</li><li>Примеры и их результаты доступны в man(функция); man(номер) дополнительно даёт подсказки по выбору алгоритма и учебный шаблон. шаблон(номер) печатает заготовку, шаблон(номер, текст=True) возвращает её строкой. код(функция) показывает реальную реализацию, man(функция, исходник=True) совмещает справку с кодом.</li><li>Все 114 функций получили русские названия. Английские имена сохранены как совместимые варианты. Параметры большинства функций имеют прежние имена; их значения и примеры описаны ниже. Исключение: функции_задания(номер, год=2026).</li><li>predicate — ваша функция проверки. lambda n: n % 7 == 0 означает «число кратно 7». key — функция выбора признака, например lambda p: p["energy"].</li><li>Нумерация 2026 и проекта 2027 различается для №10, №13 и №23. Для №27 учитывайте определение признака и центра; в демо-2027 используется энергия частиц. Проверено по материалам ФИПИ 18.10.2026.</li><li>Один номер может требовать нескольких функций. Например, №3: прочитать таблицы → соединить → отфильтровать → посчитать сумму. Шаблоны в examples.py показывают 27 таких сценариев.</li><li>None в результате обычно означает отсутствие решения. Индексы с 0, номера слов с 1; range(a,b) не включает b. Временные интервалы [start,end) включают начало и исключают конец.</li><li>допустимые_параметры проверяет только переданную конечную область. Для утверждений обо всех натуральных или вещественных значениях нужны обоснованные границы или аналитическое решение.</li><li>суммы_путей_робота поддерживает монотонные движения и стены-клетки. Для стен между клетками нужен граф, а не запись None в клетку.</li><li>Метки анализатор_игры: W1 — выиграть сразу, W2 — гарантированно выиграть вторым своим ходом, не имея W1; L1/L2 — неизбежное поражение при оптимальной игре. ? — не хватает глубины. «Неудачный ход» и «любой ход» проверяются разными кванторами.</li><li>Геометрия: теорема Пика применима только к простому многоугольнику с целыми вершинами. Для пересечений используйте целые_точки_в_фигурах. Пересекающиеся контуры и дуги требуют отдельной модели.</li><li>Кластеризация по цепочке расстояний, кластеризация по ограничению max-min и k-means решают разные задачи. Центроид, медоид и медиана одномерного признака не взаимозаменяемы.</li><li>Сложность: количество_слов — экспоненциальный перебор; сопоставить_вершины_графов — n!; центр_по_сумме_расстояний и диаметр_набора_точек — O(n²). Для больших данных проверяйте объём. У рядов функций есть ограничители, но не у всех.</li><li>Чтение XLSX/ODS использует сохранённые результаты формул; пересчёта нет. Сложные стили, даты, объединения, текстовые элементы ODS с особыми пробелами и иные редкие особенности не интерпретируются. CSV содержит строки — числа преобразуйте явно.</li><li>Десятичные числа хранятся как float. Если ответ близок к границе целого или порога, проверяйте точность и при необходимости используйте Decimal/Fraction в своём решении. прочитать_взвешенный_граф позволяет передать weight=Decimal.</li><li>Алгоритмы остатков, кольцевой дороги и выбора из групп в №27 оставлены для старых и тренировочных задач. Список функций — не официальный список подтипов ФИПИ.</li></ul></details>
|
|
22
|
+
<h2 id="catalog">Полный справочник</h2><p>У каждой функции: сигнатура, назначение, параметры, пример и ограничения. Фильтр ищет по имени и описанию. Номера показывают также смежные вспомогательные алгоритмы.</p>
|
|
23
|
+
<div class="controls"><label class="control search">Поиск<input id="search" type="search" placeholder="например: делители, энергия, count_pairs"></label><label class="control">Год<select id="year"><option value="26">2026</option><option value="27">2027 — проект</option></select></label><label class="control">Номер<select id="task"><option value="">Все номера</option><option value="1">№1</option><option value="2">№2</option><option value="3">№3</option><option value="4">№4</option><option value="5">№5</option><option value="6">№6</option><option value="7">№7</option><option value="8">№8</option><option value="9">№9</option><option value="10">№10</option><option value="11">№11</option><option value="12">№12</option><option value="13">№13</option><option value="14">№14</option><option value="15">№15</option><option value="16">№16</option><option value="17">№17</option><option value="18">№18</option><option value="19">№19</option><option value="20">№20</option><option value="21">№21</option><option value="22">№22</option><option value="23">№23</option><option value="24">№24</option><option value="25">№25</option><option value="26">№26</option><option value="27">№27</option></select></label><div id="count" class="count" aria-live="polite"></div></div>
|
|
24
|
+
<div id="cards"><article id="active_processes" data-name="active_processes" data-y26='[22]' data-y27='[22]'>
|
|
25
|
+
<h3>активные_процессы</h3><p class="muted">Английское имя: <code>active_processes</code></p><div class="tags" data-tags></div>
|
|
26
|
+
<pre><code>активные_процессы(schedule, millisecond)</code></pre><p>ID процессов, исполняющихся на миллисекунде с номером millisecond, нумерация с 1. schedule — результат расписание_процессов с нулевым началом времени. </p>
|
|
27
|
+
<p class="example"><strong>Пример:</strong> активные_процессы(расписание_процессов({'A':3},{}),3)==['A'].</p><p><strong>Как выбрать:</strong> процессы_из_таблицы читает зависимости, расписание_процессов считает самое раннее исполнение при неограниченном числе исполнителей. Для заданной миллисекунды — активные_процессы, для максимума одновременных — максимум_одновременных_интервалов. Миллисекунды в этой функции с 1.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
28
|
+
расписание = расписание_процессов({'A':3}, {})
|
|
29
|
+
print(активные_процессы(расписание,3))</code></pre><p>Ожидаемый вывод:</p><pre>['A']</pre></details></article>
|
|
30
|
+
<article id="dag_analysis" data-name="dag_analysis" data-y26='[23]' data-y27='[23]'>
|
|
31
|
+
<h3>анализ_путей_в_графе</h3><p class="muted">Английское имя: <code>dag_analysis</code></p><div class="tags" data-tags></div>
|
|
32
|
+
<pre><code>анализ_путей_в_графе(graph, start, finish)</code></pre><p>Для взвешенного DAG: число путей и min/max их длины; все вершины упорядочивает топологически, циклы — ошибка. O(V+E), без рекурсии; поддерживает отрицательные веса. </p>
|
|
33
|
+
<p class="example"><strong>Пример:</strong> анализ_путей_в_графе({'A':{'B':2},'B':{}},'A','B') == {'count':1,'min':2,'max':2}.</p><p><strong>Как выбрать:</strong> Для взвешенного DAG — анализ_путей_в_графе: количество путей, минимум и максимум длины за O(V+E). Для неотрицательных весов общего графа — кратчайшие_расстояния (Дейкстра). Наличие цикла нарушает предпосылку DAG; отрицательные веса не подходят Дейкстре.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
34
|
+
print(анализ_путей_в_графе({'A':{'B':2},'B':{}},'A','B'))</code></pre><p>Ожидаемый вывод:</p><pre>{'count': 1, 'min': 2, 'max': 2}</pre></details></article>
|
|
35
|
+
<article id="game_solver" data-name="game_solver" data-y26='[19, 20, 21]' data-y27='[19, 20, 21]'>
|
|
36
|
+
<h3>анализатор_игры</h3><p class="muted">Английское имя: <code>game_solver</code></p><div class="tags" data-tags></div>
|
|
37
|
+
<pre><code>анализатор_игры(moves, terminal, max_plies)</code></pre><p>Функция оценки конечной игры с полной информацией, без ничьих. state — хешируемое состояние; moves(state) — ходы; terminal(state) — уже достигнутая цель. Метки W1/W2 — победа за 1/2 своих хода, L1/L2 — неизбежное поражение, '?' — глубины мало. max_plies — число полуходов; terminal получает 'L0'. </p>
|
|
38
|
+
<p class="example"><strong>Пример:</strong> g=анализатор_игры(lambda s:(s+1,s*2),lambda s:s>=10,4); g(9)=='W1'. Для задач 19 с НЕУДАЧНЫМ первым ходом отдельно проверьте существование хода в W1.</p><p><strong>Как выбрать:</strong> Сначала опишите ходы и условие конца в анализатор_игры. «После неудачного хода» означает существование такого хода (any); «при любом ходе» — all. W1 означает победу сразу, а не просто возможность когда-нибудь победить.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
39
|
+
игра = анализатор_игры(lambda s:(s+1,s*2), lambda s:s>=10, 4)
|
|
40
|
+
print(игра(9), игра(4), игра(3))</code></pre><p>Ожидаемый вывод:</p><pre>W1 L1 W2</pre></details></article>
|
|
41
|
+
<article id="bits_per_symbol" data-name="bits_per_symbol" data-y26='[4, 7, 11]' data-y27='[4, 7, 11]'>
|
|
42
|
+
<h3>бит_на_символ</h3><p class="muted">Английское имя: <code>bits_per_symbol</code></p><div class="tags" data-tags></div>
|
|
43
|
+
<pre><code>бит_на_символ(alphabet_size)</code></pre><p>Минимум бит на символ равномерного кода: ceil(log2(N)), точно для больших целых. N=1 даёт 0. </p>
|
|
44
|
+
<p class="example"><strong>Пример:</strong> бит_на_символ(33) == 6.</p><p><strong>Как выбрать:</strong> Закреплённые кодовые слова: проверка_условия_Фано и допустимые_кодовые_слова. Оптимальный код без закреплений: коды_Хаффмана. Код Хаффмана не решает ограничения с заранее назначенными словами.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
45
|
+
print(бит_на_символ(33))</code></pre><p>Ожидаемый вывод:</p><pre>6</pre></details></article>
|
|
46
|
+
<article id="turtle_vertices" data-name="turtle_vertices" data-y26='[6]' data-y27='[6]'>
|
|
47
|
+
<h3>вершины_черепахи</h3><p class="muted">Английское имя: <code>turtle_vertices</code></p><div class="tags" data-tags></div>
|
|
48
|
+
<pre><code>вершины_черепахи(commands, start=(0, 0), heading=0)</code></pre><p>Математическая Черепаха без окна: commands — ('F',длина), ('L',градусы), ('R',градусы); heading=0 направлен вправо, 90 вверх. Возвращает вершины ломаной, включая старт. </p>
|
|
49
|
+
<p class="example"><strong>Пример:</strong> вершины_черепахи([('F',3),('L',90),('F',4)]). Повторы заранее разверните умножением списка; перо/дуги не моделируются.</p><p><strong>Как выбрать:</strong> Черепаха даёт вершины контура. Для простого многоугольника с целыми вершинами быстрее внутренние_точки_по_Пику. Для объединений/пересечений — целые_точки_в_фигурах. Контур, границы, самопересечения и дуги требуют отдельной проверки.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
50
|
+
print(вершины_черепахи([('F',3)]))</code></pre><p>Ожидаемый вывод:</p><pre>[(0, 0), (3.0, 0.0)]</pre></details></article>
|
|
51
|
+
<article id="weighted_median" data-name="weighted_median" data-y26='[27]' data-y27='[27]'>
|
|
52
|
+
<h3>взвешенная_медиана</h3><p class="muted">Английское имя: <code>weighted_median</code></p><div class="tags" data-tags></div>
|
|
53
|
+
<pre><code>взвешенная_медиана(points)</code></pre><p>Взвешенная медиана на прямой для (координата,вес). Минимизирует сумму вес*расстояние. Возвращает (координата,стоимость), веса >=0 с положительной общей суммой. </p>
|
|
54
|
+
<p class="example"><strong>Пример:</strong> взвешенная_медиана([(0,1),(10,3)]) == (10,10).</p><p><strong>Как выбрать:</strong> Для геометрических кластеров сначала обоснуйте разделение. кластеры_по_расстоянию строит компоненты близости, кластеры_по_средним ищет локальное разбиение. Центр по сумме расстояний — медоид, не среднее координат. Методы остатков/кольца относятся к отдельным старым и тренировочным типам. Медоид O(n²) может быть медленным.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
55
|
+
print(взвешенная_медиана([(0,1),(10,3)]))</code></pre><p>Ожидаемый вывод:</p><pre>(10, 10)</pre></details></article>
|
|
56
|
+
<article id="nested_boxes" data-name="nested_boxes" data-y26='[26]' data-y27='[26]'>
|
|
57
|
+
<h3>вложенные_коробки</h3><p class="muted">Английское имя: <code>nested_boxes</code></p><div class="tags" data-tags></div>
|
|
58
|
+
<pre><code>вложенные_коробки(sizes, gap)</code></pre><p>Максимальная цепочка одномерных коробок: разница соседних размеров >=gap>0. Возвращает размеры по возрастанию. </p>
|
|
59
|
+
<p class="example"><strong>Пример:</strong> вложенные_коробки([1,2,5,8],3)==[1,5,8]. Для многомерных коробок это правило неприменимо.</p><p><strong>Как выбрать:</strong> Выбор максимального числа файлов — выбрать_файлы_для_архива. Интервалы без пересечений — выбрать_непересекающиеся_интервалы, с прибылью — максимальная_прибыль_интервалов. Очередь и резервные копии моделируются отдельно. Один жадный алгоритм не подходит всем условиям №26.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
60
|
+
print(вложенные_коробки([1,2,5,8],3))</code></pre><p>Ожидаемый вывод:</p><pre>[1, 5, 8]</pre></details></article>
|
|
61
|
+
<article id="pick_interior" data-name="pick_interior" data-y26='[6]' data-y27='[6]'>
|
|
62
|
+
<h3>внутренние_точки_по_Пику</h3><p class="muted">Английское имя: <code>pick_interior</code></p><div class="tags" data-tags></div>
|
|
63
|
+
<pre><code>внутренние_точки_по_Пику(polygon)</code></pre><p>Количество строго внутренних решётчатых точек простого многоугольника с ЦЕЛЫМИ вершинами по теореме Пика. Быстро, без перебора. Самопересечения/дыры не поддерживаются. </p>
|
|
64
|
+
<p class="example"><strong>Пример:</strong> внутренние_точки_по_Пику([(0,0),(3,0),(3,3),(0,3)]) == 4.</p><p><strong>Как выбрать:</strong> Черепаха даёт вершины контура. Для простого многоугольника с целыми вершинами быстрее внутренние_точки_по_Пику. Для объединений/пересечений — целые_точки_в_фигурах. Контур, границы, самопересечения и дуги требуют отдельной проверки.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
65
|
+
print(внутренние_точки_по_Пику([(0,0),(3,0),(3,3),(0,3)]))</code></pre><p>Ожидаемый вывод:</p><pre>4</pre></details></article>
|
|
66
|
+
<article id="transmission_seconds" data-name="transmission_seconds" data-y26='[7]' data-y27='[7]'>
|
|
67
|
+
<h3>время_передачи</h3><p class="muted">Английское имя: <code>transmission_seconds</code></p><div class="tags" data-tags></div>
|
|
68
|
+
<pre><code>время_передачи(bits, rate, compression=1.0, overhead_bits=0)</code></pre><p>Время передачи при rate бит/с. compression — доля оставшихся данных (0.6 = 60%), служебные биты прибавляются после сжатия. </p>
|
|
69
|
+
<p class="example"><strong>Пример:</strong> время_передачи(8000,1000) == 8.</p><p><strong>Как выбрать:</strong> Определите вид данных: объём_изображения_в_битах или объём_звука_в_битах; для канала — время_передачи. Сначала считайте биты, затем байты. Частота в Гц, скорость в бит/с; не смешивайте длительность и размер.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
70
|
+
print(время_передачи(8000, 1000))</code></pre><p>Ожидаемый вывод:</p><pre>8.0</pre></details></article>
|
|
71
|
+
<article id="select_intervals" data-name="select_intervals" data-y26='[26]' data-y27='[26]'>
|
|
72
|
+
<h3>выбрать_непересекающиеся_интервалы</h3><p class="muted">Английское имя: <code>select_intervals</code></p><div class="tags" data-tags></div>
|
|
73
|
+
<pre><code>выбрать_непересекающиеся_интервалы(intervals, gap=0)</code></pre><p>Максимальное количество непересекающихся интервалов одним исполнителем, жадно по окончанию. gap — пауза между работами. </p>
|
|
74
|
+
<p class="example"><strong>Пример:</strong> выбрать_непересекающиеся_интервалы([(0,2),(1,4),(2,3)]) == [(0,2),(2,3)]. Для максимальной прибыли используйте максимальная_прибыль_интервалов.</p><p><strong>Как выбрать:</strong> Выбор максимального числа файлов — выбрать_файлы_для_архива. Интервалы без пересечений — выбрать_непересекающиеся_интервалы, с прибылью — максимальная_прибыль_интервалов. Очередь и резервные копии моделируются отдельно. Один жадный алгоритм не подходит всем условиям №26.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
75
|
+
print(выбрать_непересекающиеся_интервалы([(0,2),(1,4),(2,3)]))</code></pre><p>Ожидаемый вывод:</p><pre>[(0, 2), (2, 3)]</pre></details></article>
|
|
76
|
+
<article id="archive_files" data-name="archive_files" data-y26='[26]' data-y27='[26]'>
|
|
77
|
+
<h3>выбрать_файлы_для_архива</h3><p class="muted">Английское имя: <code>archive_files</code></p><div class="tags" data-tags></div>
|
|
78
|
+
<pre><code>выбрать_файлы_для_архива(sizes, capacity)</code></pre><p>Архивирование: максимум файлов, затем максимальный размер одного из выбранных. Возвращает count, max_file, selected. Каждый размер/ёмкость неотрицательны. </p>
|
|
79
|
+
<p class="example"><strong>Пример:</strong> выбрать_файлы_для_архива([2,3,8,9],12)['selected'] == [2,9].</p><p><strong>Как выбрать:</strong> Выбор максимального числа файлов — выбрать_файлы_для_архива. Интервалы без пересечений — выбрать_непересекающиеся_интервалы, с прибылью — максимальная_прибыль_интервалов. Очередь и резервные копии моделируются отдельно. Один жадный алгоритм не подходит всем условиям №26.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
80
|
+
print(выбрать_файлы_для_архива([2,3,8,9],12))</code></pre><p>Ожидаемый вывод:</p><pre>{'count': 2, 'max_file': 9, 'selected': [2, 9]}</pre></details></article>
|
|
81
|
+
<article id="recurrence_values" data-name="recurrence_values" data-y26='[16]' data-y27='[16]'>
|
|
82
|
+
<h3>вычислить_рекуррентную_функцию</h3><p class="muted">Английское имя: <code>recurrence_values</code></p><div class="tags" data-tags></div>
|
|
83
|
+
<pre><code>вычислить_рекуррентную_функцию(start, stop, initial, rule)</code></pre><p>Вычислить рекуррентную функцию снизу вверх на [start,stop]. initial — словарь базовых значений; rule(n,values) видит уже вычисленные значения. </p>
|
|
84
|
+
<p class="example"><strong>Пример:</strong> вычислить_рекуррентную_функцию(2,5,{0:0,1:1},lambda n,f:f[n-1]+f[n-2])[5] == 5. Для обратных зависимостей измените направление в своём цикле.</p><p><strong>Как выбрать:</strong> Небольшая глубина рекурсии — рекурсивная_функция. Большая глубина и зависимости от меньших индексов — вычислить_рекуррентную_функцию без стека. Сначала задайте базу и направление зависимостей; не повышайте лимит рекурсии без необходимости.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
85
|
+
print(вычислить_рекуррентную_функцию(2,5,{0:0,1:1},lambda n,f:f[n-1]+f[n-2])[5])</code></pre><p>Ожидаемый вывод:</p><pre>5</pre></details></article>
|
|
86
|
+
<article id="divisors" data-name="divisors" data-y26='[25]' data-y27='[25]'>
|
|
87
|
+
<h3>делители</h3><p class="muted">Английское имя: <code>divisors</code></p><div class="tags" data-tags></div>
|
|
88
|
+
<pre><code>делители(n, proper=False)</code></pre><p>Все положительные делители положительного n по возрастанию. proper=True исключает 1 и само n (нетривиальные). </p>
|
|
89
|
+
<p class="example"><strong>Пример:</strong> делители(12,True) == [2,3,4,6].</p><p><strong>Как выбрать:</strong> Немного отдельных чисел — делители/разложить_на_простые. Много чисел до общей границы — решето_простых. Маска и делимость — кратные_по_маске. При огромной границе и малом делителе перебор кратных может быть слишком медленным.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
90
|
+
print(делители(12, proper=True))</code></pre><p>Ожидаемый вывод:</p><pre>[2, 3, 4, 6]</pre></details></article>
|
|
91
|
+
<article id="diameter" data-name="diameter" data-y26='[27]' data-y27='[27]'>
|
|
92
|
+
<h3>диаметр_набора_точек</h3><p class="muted">Английское имя: <code>diameter</code></p><div class="tags" data-tags></div>
|
|
93
|
+
<pre><code>диаметр_набора_точек(points)</code></pre><p>Наибольшее расстояние между двумя точками; 0 при менее чем двух точках. Точный полный перебор O(n²), подходит отфильтрованным небольшим наборам. </p>
|
|
94
|
+
<p class="example"><strong>Пример:</strong> диаметр_набора_точек([(0,0),(3,4)])==5.</p><p><strong>Как выбрать:</strong> Для геометрических кластеров сначала обоснуйте разделение. кластеры_по_расстоянию строит компоненты близости, кластеры_по_средним ищет локальное разбиение. Центр по сумме расстояний — медоид, не среднее координат. Методы остатков/кольца относятся к отдельным старым и тренировочным типам. Медоид O(n²) может быть медленным.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
95
|
+
print(диаметр_набора_точек([(0,0),(3,4)]))</code></pre><p>Ожидаемый вывод:</p><pre>5.0</pre></details></article>
|
|
96
|
+
<article id="encoded_length" data-name="encoded_length" data-y26='[4]' data-y27='[4]'>
|
|
97
|
+
<h3>длина_кодированного_сообщения</h3><p class="muted">Английское имя: <code>encoded_length</code></p><div class="tags" data-tags></div>
|
|
98
|
+
<pre><code>длина_кодированного_сообщения(text, codebook)</code></pre><p>Длина сообщения в битах по словарю символ:код. </p>
|
|
99
|
+
<p class="example"><strong>Пример:</strong> длина_кодированного_сообщения('ABA', {'A':'0','B':'11'}) == 4.</p><p><strong>Как выбрать:</strong> Закреплённые кодовые слова: проверка_условия_Фано и допустимые_кодовые_слова. Оптимальный код без закреплений: коды_Хаффмана. Код Хаффмана не решает ограничения с заранее назначенными словами.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
100
|
+
print(длина_кодированного_сообщения('ABA', {'A':'0','B':'11'}))</code></pre><p>Ожидаемый вывод:</p><pre>4</pre></details></article>
|
|
101
|
+
<article id="longest_subarray_sum_mod" data-name="longest_subarray_sum_mod" data-y26='[27]' data-y27='[27]'>
|
|
102
|
+
<h3>длина_подмассива_по_остатку</h3><p class="muted">Английское имя: <code>longest_subarray_sum_mod</code></p><div class="tags" data-tags></div>
|
|
103
|
+
<pre><code>длина_подмассива_по_остатку(data, modulus, remainder=0)</code></pre><p>Длина самого длинного подмассива с нужным остатком суммы, O(n). Возвращает 0 при отсутствии. </p>
|
|
104
|
+
<p class="example"><strong>Пример:</strong> длина_подмассива_по_остатку([1,2,3],3)==3.</p><p><strong>Как выбрать:</strong> Для геометрических кластеров сначала обоснуйте разделение. кластеры_по_расстоянию строит компоненты близости, кластеры_по_средним ищет локальное разбиение. Центр по сумме расстояний — медоид, не среднее координат. Методы остатков/кольца относятся к отдельным старым и тренировочным типам. Медоид O(n²) может быть медленным.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
105
|
+
print(длина_подмассива_по_остатку([1,2,3],3))</code></pre><p>Ожидаемый вывод:</p><pre>3</pre></details></article>
|
|
106
|
+
<article id="available_codewords" data-name="available_codewords" data-y26='[4]' data-y27='[4]'>
|
|
107
|
+
<h3>допустимые_кодовые_слова</h3><p class="muted">Английское имя: <code>available_codewords</code></p><div class="tags" data-tags></div>
|
|
108
|
+
<pre><code>допустимые_кодовые_слова(codes, length)</code></pre><p>Все двоичные слова заданной length, совместимые с условием Фано для уже известных codes. Экспоненциальный перебор 2**length. </p>
|
|
109
|
+
<p class="example"><strong>Пример:</strong> допустимые_кодовые_слова(['0'], 2) == ['10','11'].</p><p><strong>Как выбрать:</strong> Закреплённые кодовые слова: проверка_условия_Фано и допустимые_кодовые_слова. Оптимальный код без закреплений: коды_Хаффмана. Код Хаффмана не решает ограничения с заранее назначенными словами.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
110
|
+
print(допустимые_кодовые_слова(['0'], 2))</code></pre><p>Ожидаемый вывод:</p><pre>['10', '11']</pre></details></article>
|
|
111
|
+
<article id="valid_parameters" data-name="valid_parameters" data-y26='[15]' data-y27='[15]'>
|
|
112
|
+
<h3>допустимые_параметры</h3><p class="muted">Английское имя: <code>valid_parameters</code></p><div class="tags" data-tags></div>
|
|
113
|
+
<pre><code>допустимые_параметры(parameters, domain, predicate)</code></pre><p>Найти A, для которых predicate(A,x) истинно для ВСЕХ x из конечного domain. Для пары переменных domain задайте product(...), а x распакуйте. </p>
|
|
114
|
+
<p class="example"><strong>Пример:</strong> допустимые_параметры(range(10), range(5), lambda a,x:a>=x). Это проверка конечной области, не доказательство для всех целых/вещественных.</p><p><strong>Как выбрать:</strong> допустимые_параметры проверяет все значения только в переданном конечном диапазоне. Для всех натуральных или вещественных x нужны обоснованные границы или аналитика. Логическое следование — следование; побитовые операции требуют правильных скобок.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
115
|
+
print(допустимые_параметры(range(6), range(5), lambda a,x:a>=x))</code></pre><p>Ожидаемый вывод:</p><pre>[4, 5]</pre></details></article>
|
|
116
|
+
<article id="backup_log" data-name="backup_log" data-y26='[26]' data-y27='[26]'>
|
|
117
|
+
<h3>журнал_резервных_копий</h3><p class="muted">Английское имя: <code>backup_log</code></p><div class="tags" data-tags></div>
|
|
118
|
+
<pre><code>журнал_резервных_копий(records, capacity, deadline='11:59:59')</code></pre><p>Модель журнала сервера из демо-2027: records — (ЧЧ:ММ:СС,ID,объём). При переполнении до запроса копируется накопленное; финальный остаток не копируется. Возвращает top_client, backups, top_two_sum. Все передачи учитываются при выборе клиента, при равенстве берётся меньший ID. Копии суммируются только не позднее deadline. </p>
|
|
119
|
+
<p class="example"><strong>Пример:</strong> журнал_резервных_копий([('01:00:00',1,8),('02:00:00',2,4)],10)['top_two_sum']==8.</p><p><strong>Как выбрать:</strong> Выбор максимального числа файлов — выбрать_файлы_для_архива. Интервалы без пересечений — выбрать_непересекающиеся_интервалы, с прибылью — максимальная_прибыль_интервалов. Очередь и резервные копии моделируются отдельно. Один жадный алгоритм не подходит всем условиям №26.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
120
|
+
print(журнал_резервных_копий([('01:00:00',1,8),('02:00:00',2,4)],10))</code></pre><p>Ожидаемый вывод:</p><pre>{'top_client': 1, 'backups': [('02:00:00', 8)], 'top_two_sum': 8}</pre></details></article>
|
|
121
|
+
<article id="sqlite_select" data-name="sqlite_select" data-y26='[3]' data-y27='[3]'>
|
|
122
|
+
<h3>запрос_к_базе</h3><p class="muted">Английское имя: <code>sqlite_select</code></p><div class="tags" data-tags></div>
|
|
123
|
+
<pre><code>запрос_к_базе(path, query, parameters=())</code></pre><p>Выполнить запрос к существующей SQLite-базе в режиме только чтения; вернуть кортежи строк. </p>
|
|
124
|
+
<p class="example"><strong>Пример:</strong> запрос_к_базе('data.db', 'SELECT * FROM items WHERE price > ?', (100,)). Не предназначено для XLSX.</p><p><strong>Как выбрать:</strong> Сначала прочитайте нужные листы XLSX/ODS или CSV, затем соедините таблицы по ключам и примените условия. Проверяйте дубликаты ключей, числовые типы и единицы. Формулы в XLSX/ODS не пересчитываются.</p><details><summary>Пример с ожидаемым результатом</summary><p>data.db: таблица items с целочисленным полем price и одной записью 120.</p><pre><code>from егэ import *
|
|
125
|
+
print(запрос_к_базе('data.db', 'SELECT price FROM items WHERE price > ?', (100,)))</code></pre><p>Ожидаемый вывод:</p><pre>[(120,)]</pre></details></article>
|
|
126
|
+
<article id="cluster_by_span" data-name="cluster_by_span" data-y26='[27]' data-y27='[27]'>
|
|
127
|
+
<h3>кластеры_по_размаху_признака</h3><p class="muted">Английское имя: <code>cluster_by_span</code></p><div class="tags" data-tags></div>
|
|
128
|
+
<pre><code>кластеры_по_размаху_признака(items, key, max_span)</code></pre><p>Разбить по одномерному признаку key на МИНИМАЛЬНОЕ число кластеров с max(key)-min(key)<=max_span. Сортировка O(n log n), greedy от минимального значения. Это ограничение диаметра, не цепочка соседей. </p>
|
|
129
|
+
<p class="example"><strong>Пример:</strong> кластеры_по_размаху_признака([0,1,2,3],lambda x:x,2)==[[0,1,2],[3]]. Если требуется заданное K, проверьте число кластеров; произвольное разбиение на K не ищется.</p><p><strong>Как выбрать:</strong> Минимальное число групп с ограничением max-min признака, а не компоненты близости. Проверьте требуемое K. Произвольное разбиение на заданное неминимальное K функция не ищет.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
130
|
+
print(кластеры_по_размаху_признака([0,1,2,3], lambda x:x, 2))</code></pre><p>Ожидаемый вывод:</p><pre>[[0, 1, 2], [3]]</pre></details></article>
|
|
131
|
+
<article id="cluster_by_distance" data-name="cluster_by_distance" data-y26='[27]' data-y27='[27]'>
|
|
132
|
+
<h3>кластеры_по_расстоянию</h3><p class="muted">Английское имя: <code>cluster_by_distance</code></p><div class="tags" data-tags></div>
|
|
133
|
+
<pre><code>кластеры_по_расстоянию(points, threshold)</code></pre><p>Компоненты графа близости: точки связаны, если расстояние <=threshold; связь транзитивна. Это не k-means и не полный DBSCAN. Пространственная сетка ускоряет разреженные данные, худший случай O(n²). Возвращает список кластеров (координаты). </p>
|
|
134
|
+
<p class="example"><strong>Пример:</strong> кластеры_по_расстоянию([(0,0),(1,0),(9,0)],2). Порог выбирайте по условию/визуализации, цепочки могут объединить скопления.</p><p><strong>Как выбрать:</strong> Группирует по транзитивной связи расстояния <=threshold. Цепочка промежуточных точек может соединить далёкие концы. Это не ограничение диаметра и не полный DBSCAN.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
135
|
+
print(кластеры_по_расстоянию([(0,0),(1,0),(9,0)],2))</code></pre><p>Ожидаемый вывод:</p><pre>[[(0, 0), (1, 0)], [(9, 0)]]</pre></details></article>
|
|
136
|
+
<article id="kmeans" data-name="kmeans" data-y26='[27]' data-y27='[27]'>
|
|
137
|
+
<h3>кластеры_по_средним</h3><p class="muted">Английское имя: <code>kmeans</code></p><div class="tags" data-tags></div>
|
|
138
|
+
<pre><code>кластеры_по_средним(points, centers, max_steps=100, tolerance=1e-09)</code></pre><p>Разделение по ближайшему среднему с заданными начальными centers. Возвращает clusters, centers, converged. Может попасть в локальный минимум; не гарантирует кластеры из условия. Пустой кластер сохраняет свой центр. </p>
|
|
139
|
+
<p class="example"><strong>Пример:</strong> кластеры_по_средним([(0,0),(1,0),(9,0)],[(0,0),(9,0)]). Для финального центра-медоида затем вызовите центр_по_сумме_расстояний.</p><p><strong>Как выбрать:</strong> Начальные центры задаются вами; результат может быть локальным и зависит от инициализации. Проверьте converged и соответствие условию. Для конечного медоида примените центр_по_сумме_расстояний отдельно.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
140
|
+
print(кластеры_по_средним([(0,0),(1,0),(9,0)],[(0,0),(9,0)]))</code></pre><p>Ожидаемый вывод:</p><pre>{'clusters': [[(0, 0), (1, 0)], [(9, 0)]], 'centers': [(0.5, 0.0), (9.0, 0.0)], 'converged': True}</pre></details></article>
|
|
141
|
+
<article id="source_code" data-name="source_code" data-y26='[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]' data-y27='[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]'>
|
|
142
|
+
<h3>код</h3><p class="muted">Английское имя: <code>source_code</code></p><div class="tags" data-tags></div>
|
|
143
|
+
<pre><code>код(функция, *, текст=False)</code></pre><p>Показать настоящий исходный код функции установленной версии EGEKit.
|
|
144
|
+
|
|
145
|
+
функция — объект функции или русское/английское имя строкой.
|
|
146
|
+
текст=True возвращает исходник строкой; по умолчанию он печатается.
|
|
147
|
+
Русские имена обычно являются синонимами английских реализаций, поэтому
|
|
148
|
+
в def может быть английское имя. Код показывается без подмены и не
|
|
149
|
+
исполняется. Он может зависеть от других функций и импортов модуля.
|
|
150
|
+
Для самостоятельного решения используйте шаблон(номер).
|
|
151
|
+
|
|
152
|
+
</p>
|
|
153
|
+
<p class="example"><strong>Пример:</strong>
|
|
154
|
+
код(делители)
|
|
155
|
+
код('количество_программ')
|
|
156
|
+
исходник = код(делители, текст=True)</p><p><strong>Как выбрать:</strong> Показывает настоящую реализацию из установленного Python-модуля. Русское имя обычно ссылается на английскую реализацию. Код не переименовывается и не исполняется.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
157
|
+
print('def divisors' in код(делители, текст=True))</code></pre><p>Ожидаемый вывод:</p><pre>True</pre></details></article>
|
|
158
|
+
<article id="huffman_codes" data-name="huffman_codes" data-y26='[4]' data-y27='[4]'>
|
|
159
|
+
<h3>коды_Хаффмана</h3><p class="muted">Английское имя: <code>huffman_codes</code></p><div class="tags" data-tags></div>
|
|
160
|
+
<pre><code>коды_Хаффмана(frequencies)</code></pre><p>Построить оптимальный префиксный код по словарю символ:положительная_частота. Для единственного символа код '0'. Не учитывает дополнительно закреплённые кодовые слова. </p>
|
|
161
|
+
<p class="example"><strong>Пример:</strong> коды_Хаффмана({'A':5,'B':2,'C':1}).</p><p><strong>Как выбрать:</strong> Закреплённые кодовые слова: проверка_условия_Фано и допустимые_кодовые_слова. Оптимальный код без закреплений: коды_Хаффмана. Код Хаффмана не решает ограничения с заранее назначенными словами.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
162
|
+
print(коды_Хаффмана({'A':5,'B':2,'C':1}))</code></pre><p>Ожидаемый вывод:</p><pre>{'C': '00', 'B': '01', 'A': '1'}</pre></details></article>
|
|
163
|
+
<article id="count_ip" data-name="count_ip" data-y26='[13]' data-y27='[10]'>
|
|
164
|
+
<h3>количество_ip_по_условию</h3><p class="muted">Английское имя: <code>count_ip</code></p><div class="tags" data-tags></div>
|
|
165
|
+
<pre><code>количество_ip_по_условию(address, mask, predicate, include_edges=True, max_addresses=1048576)</code></pre><p>Перебрать IPv4-адреса сети и проверить predicate(int_ip). include_edges=True включает сеть и broadcast. </p>
|
|
166
|
+
<p class="example"><strong>Пример:</strong> количество_ip_по_условию('192.168.1.0',24,lambda n:n.bit_count()%2==0). Ограничивает размер сети, чтобы случайно не перебирать миллиарды адресов.</p><p><strong>Как выбрать:</strong> Для параметров IPv4 — сведения_о_сети. Для произвольного условия на адрес — количество_ip_по_условию. Если нужна только численность по единичным битам, распределение_ip_по_единицам обходится без перебора. Уточните, включать ли сеть и broadcast.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
167
|
+
print(количество_ip_по_условию('192.168.1.0', 24, lambda ip:ip.bit_count()%2==0))</code></pre><p>Ожидаемый вывод:</p><pre>128</pre></details></article>
|
|
168
|
+
<article id="count_occurrences" data-name="count_occurrences" data-y26='[10, 24]' data-y27='[24]'>
|
|
169
|
+
<h3>количество_вхождений</h3><p class="muted">Английское имя: <code>count_occurrences</code></p><div class="tags" data-tags></div>
|
|
170
|
+
<pre><code>количество_вхождений(text, pattern, whole_word=False, ignore_case=False, overlap=False)</code></pre><p>Количество вхождений буквальной строки; whole_word использует границы Unicode-слова, ignore_case игнорирует регистр, overlap разрешает пересечения. </p>
|
|
171
|
+
<p class="example"><strong>Пример:</strong> количество_вхождений('ААА','АА',overlap=True) == 2. Дефисы и апострофы проверяйте по условию.</p><p><strong>Как выбрать:</strong> Для DOCX — текст_из_docx, затем количество_вхождений. Выберите целое слово или подстроку, регистр и пересечения. Базовое извлечение не включает колонтитулы/сноски и не моделирует весь поиск текстового редактора.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
172
|
+
print(количество_вхождений('ААА', 'АА', overlap=True))</code></pre><p>Ожидаемый вывод:</p><pre>2</pre></details></article>
|
|
173
|
+
<article id="count_pairs_mod" data-name="count_pairs_mod" data-y26='[17, 27]' data-y27='[17, 27]'>
|
|
174
|
+
<h3>количество_пар_по_остатку</h3><p class="muted">Английское имя: <code>count_pairs_mod</code></p><div class="tags" data-tags></div>
|
|
175
|
+
<pre><code>количество_пар_по_остатку(data, modulus, remainder=0, min_gap=1)</code></pre><p>Количество пар индексов i<j, j-i>=min_gap с нужным остатком суммы. min_gap=1 — любые разные элементы. O(n), отрицательные числа допустимы. </p>
|
|
176
|
+
<p class="example"><strong>Пример:</strong> количество_пар_по_остатку([1,2,3,4],3)==2.</p><p><strong>Как выбрать:</strong> Считает любые пары i<j с j-i>=min_gap по остатку суммы. Для соседних пар используйте соседние_группы: min_gap=1 здесь не означает соседство. O(n).</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
177
|
+
print(количество_пар_по_остатку([1,2,3,4],3))</code></pre><p>Ожидаемый вывод:</p><pre>2</pre></details></article>
|
|
178
|
+
<article id="count_pairs_product" data-name="count_pairs_product" data-y26='[27]' data-y27='[27]'>
|
|
179
|
+
<h3>количество_пар_с_кратным_произведением</h3><p class="muted">Английское имя: <code>count_pairs_product</code></p><div class="tags" data-tags></div>
|
|
180
|
+
<pre><code>количество_пар_с_кратным_произведением(data, divisor, min_gap=1)</code></pre><p>Количество пар i<j с j-i>=min_gap и произведением, кратным divisor. Нули/отрицательные поддерживаются. O(n*tau(divisor)), хранит классы gcd. </p>
|
|
181
|
+
<p class="example"><strong>Пример:</strong> количество_пар_с_кратным_произведением([2,3,4],6)==2.</p><p><strong>Как выбрать:</strong> Проверяет кратность ПРОИЗВЕДЕНИЯ через классы gcd. Для остатка СУММЫ нужна количество_пар_по_остатку. Условие на расстояние индексов задаёт min_gap.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
182
|
+
print(количество_пар_с_кратным_произведением([2,3,4],6))</code></pre><p>Ожидаемый вывод:</p><pre>2</pre></details></article>
|
|
183
|
+
<article id="count_subarrays_mod" data-name="count_subarrays_mod" data-y26='[27]' data-y27='[27]'>
|
|
184
|
+
<h3>количество_подмассивов_по_остатку</h3><p class="muted">Английское имя: <code>count_subarrays_mod</code></p><div class="tags" data-tags></div>
|
|
185
|
+
<pre><code>количество_подмассивов_по_остатку(data, modulus, remainder=0)</code></pre><p>Количество непустых непрерывных подмассивов с нужным остатком суммы. O(n) времени, O(min(n,modulus)) памяти; отрицательные числа поддерживаются. </p>
|
|
186
|
+
<p class="example"><strong>Пример:</strong> количество_подмассивов_по_остатку([1,2,3],3)==3.</p><p><strong>Как выбрать:</strong> Для геометрических кластеров сначала обоснуйте разделение. кластеры_по_расстоянию строит компоненты близости, кластеры_по_средним ищет локальное разбиение. Центр по сумме расстояний — медоид, не среднее координат. Методы остатков/кольца относятся к отдельным старым и тренировочным типам. Медоид O(n²) может быть медленным.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
187
|
+
print(количество_подмассивов_по_остатку([1,2,3],3))</code></pre><p>Ожидаемый вывод:</p><pre>3</pre></details></article>
|
|
188
|
+
<article id="count_programs" data-name="count_programs" data-y26='[23]' data-y27='[13]'>
|
|
189
|
+
<h3>количество_программ</h3><p class="muted">Английское имя: <code>count_programs</code></p><div class="tags" data-tags></div>
|
|
190
|
+
<pre><code>количество_программ(start, finish, commands, allowed, max_states=100000)</code></pre><p>Число программ в конечном ациклическом пространстве состояний. commands — функции одного хода; allowed(state) ограничивает область и запреты. Разные команды с одинаковым результатом считаются разными программами. Строит граф и считает без глубокой рекурсии, обнаруживает циклы. </p>
|
|
191
|
+
<p class="example"><strong>Пример:</strong> количество_программ(1,5,[lambda x:x+1,lambda x:x*2],lambda x:1<=x<=5) == 4.</p><p><strong>Как выбрать:</strong> Для команд исполнителя — количество_программ, для обязательных точек — количество_программ_через_точки. Ограничьте пространство allowed и исключите запрещённые значения. Команды должны образовывать DAG; вариант через точки требует строгой монотонности.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
192
|
+
print(количество_программ(1,5,[lambda x:x+1,lambda x:x*2],lambda x:1<=x<=5))</code></pre><p>Ожидаемый вывод:</p><pre>4</pre></details></article>
|
|
193
|
+
<article id="count_programs_via" data-name="count_programs_via" data-y26='[23]' data-y27='[13]'>
|
|
194
|
+
<h3>количество_программ_через_точки</h3><p class="muted">Английское имя: <code>count_programs_via</code></p><div class="tags" data-tags></div>
|
|
195
|
+
<pre><code>количество_программ_через_точки(start, finish, checkpoints, commands, allowed)</code></pre><p>Число программ с посещением checkpoints по порядку: произведение числа путей между контрольными точками. Применять только при строгой монотонности числовых состояний, чтобы промежуточный сегмент не пересёк будущую точку раньше срока. </p>
|
|
196
|
+
<p class="example"><strong>Пример:</strong> количество_программ_через_точки(1,5,[3],[lambda x:x+1],lambda x:1<=x<=5)==1.</p><p><strong>Как выбрать:</strong> Для команд исполнителя — количество_программ, для обязательных точек — количество_программ_через_точки. Ограничьте пространство allowed и исключите запрещённые значения. Команды должны образовывать DAG; вариант через точки требует строгой монотонности.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
197
|
+
print(количество_программ_через_точки(1,5,[3],[lambda x:x+1],lambda x:1<=x<=5))</code></pre><p>Ожидаемый вывод:</p><pre>1</pre></details></article>
|
|
198
|
+
<article id="count_graph_paths" data-name="count_graph_paths" data-y26='[1, 23]' data-y27='[1, 23]'>
|
|
199
|
+
<h3>количество_путей_в_графе</h3><p class="muted">Английское имя: <code>count_graph_paths</code></p><div class="tags" data-tags></div>
|
|
200
|
+
<pre><code>количество_путей_в_графе(graph, start, finish, forbidden=())</code></pre><p>Число путей в ориентированном ациклическом графе; graph[u] — соседи. forbidden — запрещённые вершины. Достижимый цикл вызывает ValueError. </p>
|
|
201
|
+
<p class="example"><strong>Пример:</strong> количество_путей_в_графе({'A':['B','C'],'B':['C']},'A','C').</p><p><strong>Как выбрать:</strong> Считает пути по спискам смежности без весов и с запретами. Для большого DAG без рекурсии и min/max длины — анализ_путей_в_графе.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
202
|
+
print(количество_путей_в_графе({'A':['B','C'],'B':['C']}, 'A', 'C'))</code></pre><p>Ожидаемый вывод:</p><pre>2</pre></details></article>
|
|
203
|
+
<article id="count_words" data-name="count_words" data-y26='[8]' data-y27='[8]'>
|
|
204
|
+
<h3>количество_слов</h3><p class="muted">Английское имя: <code>count_words</code></p><div class="tags" data-tags></div>
|
|
205
|
+
<pre><code>количество_слов(alphabet, length, predicate=lambda w: True)</code></pre><p>Количество слов с повторениями, подходящих под predicate. O(|алфавит|**length). </p>
|
|
206
|
+
<p class="example"><strong>Пример:</strong> количество_слов('01',4,lambda w:w.count('1')==2) == 6.</p><p><strong>Как выбрать:</strong> Нужны слова с повторениями — слова_алфавита/количество_слов; без повторов заданных букв — различные_перестановки. Для номера в полном списке слов — номер_слова или слово_по_номеру. Порядок алфавита задаёт условие, не Unicode.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
207
|
+
print(количество_слов('01', 4, lambda w:w.count('1')==2))</code></pre><p>Ожидаемый вывод:</p><pre>6</pre></details></article>
|
|
208
|
+
<article id="masked_multiples" data-name="masked_multiples" data-y26='[25]' data-y27='[25]'>
|
|
209
|
+
<h3>кратные_по_маске</h3><p class="muted">Английское имя: <code>masked_multiples</code></p><div class="tags" data-tags></div>
|
|
210
|
+
<pre><code>кратные_по_маске(mask, divisor, limit, start=1)</code></pre><p>Пары (число,частное) для кратных положительному divisor в включительном [start,limit], подходящих маске. Перебор O(limit/divisor). </p>
|
|
211
|
+
<p class="example"><strong>Пример:</strong> кратные_по_маске('1*',7,100) == [(14,2)]. При малом делителе и огромной границе нужен другой перебор.</p><p><strong>Как выбрать:</strong> Немного отдельных чисел — делители/разложить_на_простые. Много чисел до общей границы — решето_простых. Маска и делимость — кратные_по_маске. При огромной границе и малом делителе перебор кратных может быть слишком медленным.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
212
|
+
print(кратные_по_маске('1*', 7, 100))</code></pre><p>Ожидаемый вывод:</p><pre>[(14, 2)]</pre></details></article>
|
|
213
|
+
<article id="shortest_paths" data-name="shortest_paths" data-y26='[1, 23]' data-y27='[1, 23]'>
|
|
214
|
+
<h3>кратчайшие_расстояния</h3><p class="muted">Английское имя: <code>shortest_paths</code></p><div class="tags" data-tags></div>
|
|
215
|
+
<pre><code>кратчайшие_расстояния(graph, start)</code></pre><p>Расстояния от start алгоритмом Дейкстры. graph[u] — словарь сосед:неотрицательный_вес; недостижимые вершины имеют inf. </p>
|
|
216
|
+
<p class="example"><strong>Пример:</strong> кратчайшие_расстояния({'A':{'B':3},'B':{}},'A').</p><p><strong>Как выбрать:</strong> Для взвешенного DAG — анализ_путей_в_графе: количество путей, минимум и максимум длины за O(V+E). Для неотрицательных весов общего графа — кратчайшие_расстояния (Дейкстра). Наличие цикла нарушает предпосылку DAG; отрицательные веса не подходят Дейкстре.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
217
|
+
print(кратчайшие_расстояния({'A':{'B':3},'B':{}}, 'A')['B'])</code></pre><p>Ожидаемый вывод:</p><pre>3</pre></details></article>
|
|
218
|
+
<article id="best_choice_mod" data-name="best_choice_mod" data-y26='[27]' data-y27='[27]'>
|
|
219
|
+
<h3>лучшая_сумма_выбора_по_остатку</h3><p class="muted">Английское имя: <code>best_choice_mod</code></p><div class="tags" data-tags></div>
|
|
220
|
+
<pre><code>лучшая_сумма_выбора_по_остатку(groups, modulus, remainder=0, maximize=True)</code></pre><p>Выбрать ровно одно число из каждой группы, оптимизируя сумму с нужным остатком. Динамика O(число_групп*modulus*размер_группы). Возвращает сумму или None. </p>
|
|
221
|
+
<p class="example"><strong>Пример:</strong> лучшая_сумма_выбора_по_остатку([[1,2],[3,4]],3)==6. Для выбора двух из трёх передайте группы попарных сумм.</p><p><strong>Как выбрать:</strong> Для геометрических кластеров сначала обоснуйте разделение. кластеры_по_расстоянию строит компоненты близости, кластеры_по_средним ищет локальное разбиение. Центр по сумме расстояний — медоид, не среднее координат. Методы остатков/кольца относятся к отдельным старым и тренировочным типам. Медоид O(n²) может быть медленным.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
222
|
+
print(лучшая_сумма_выбора_по_остатку([[1,2],[3,4]],3))</code></pre><p>Ожидаемый вывод:</p><pre>6</pre></details></article>
|
|
223
|
+
<article id="weighted_intervals" data-name="weighted_intervals" data-y26='[26, 27]' data-y27='[26, 27]'>
|
|
224
|
+
<h3>максимальная_прибыль_интервалов</h3><p class="muted">Английское имя: <code>weighted_intervals</code></p><div class="tags" data-tags></div>
|
|
225
|
+
<pre><code>максимальная_прибыль_интервалов(jobs)</code></pre><p>Максимальная суммарная прибыль непересекающихся работ (start,end,profit), границы [start,end). Возвращает прибыль; O(n log n). </p>
|
|
226
|
+
<p class="example"><strong>Пример:</strong> максимальная_прибыль_интервалов([(0,2,5),(1,3,9),(2,4,5)]) == 10.</p><p><strong>Как выбрать:</strong> Выбор максимального числа файлов — выбрать_файлы_для_архива. Интервалы без пересечений — выбрать_непересекающиеся_интервалы, с прибылью — максимальная_прибыль_интервалов. Очередь и резервные копии моделируются отдельно. Один жадный алгоритм не подходит всем условиям №26.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
227
|
+
print(максимальная_прибыль_интервалов([(0,2,5),(1,3,9),(2,4,5)]))</code></pre><p>Ожидаемый вывод:</p><pre>10</pre></details></article>
|
|
228
|
+
<article id="max_pair_sum_mod" data-name="max_pair_sum_mod" data-y26='[27]' data-y27='[27]'>
|
|
229
|
+
<h3>максимальная_сумма_пары_по_остатку</h3><p class="muted">Английское имя: <code>max_pair_sum_mod</code></p><div class="tags" data-tags></div>
|
|
230
|
+
<pre><code>максимальная_сумма_пары_по_остатку(data, modulus, remainder=0, min_gap=1)</code></pre><p>Максимальная сумма пары с условием на остаток и расстояние индексов; None при отсутствии. O(n), хранит максимумы по остаткам. </p>
|
|
231
|
+
<p class="example"><strong>Пример:</strong> максимальная_сумма_пары_по_остатку([1,2,3,4],3)==6.</p><p><strong>Как выбрать:</strong> Ищет максимум суммы любых пар с остатком и минимальным расстоянием индексов; не только соседей. Если подходит ни одна пара, возвращает None. O(n).</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
232
|
+
print(максимальная_сумма_пары_по_остатку([1,2,3,4],3))</code></pre><p>Ожидаемый вывод:</p><pre>6</pre></details></article>
|
|
233
|
+
<article id="max_subarray" data-name="max_subarray" data-y26='[27]' data-y27='[27]'>
|
|
234
|
+
<h3>максимальная_сумма_подмассива</h3><p class="muted">Английское имя: <code>max_subarray</code></p><div class="tags" data-tags></div>
|
|
235
|
+
<pre><code>максимальная_сумма_подмассива(data)</code></pre><p>Максимальная сумма непустого подмассива (Кадане), O(n), O(1) памяти. None для пустого входа. </p>
|
|
236
|
+
<p class="example"><strong>Пример:</strong> максимальная_сумма_подмассива([-5,-2,-7]) == -2.</p><p><strong>Как выбрать:</strong> Для геометрических кластеров сначала обоснуйте разделение. кластеры_по_расстоянию строит компоненты близости, кластеры_по_средним ищет локальное разбиение. Центр по сумме расстояний — медоид, не среднее координат. Методы остатков/кольца относятся к отдельным старым и тренировочным типам. Медоид O(n²) может быть медленным.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
237
|
+
print(максимальная_сумма_подмассива([-5,-2,-7]))</code></pre><p>Ожидаемый вывод:</p><pre>-2</pre></details></article>
|
|
238
|
+
<article id="max_subarray_sum_mod" data-name="max_subarray_sum_mod" data-y26='[27]' data-y27='[27]'>
|
|
239
|
+
<h3>максимальная_сумма_подмассива_по_остатку</h3><p class="muted">Английское имя: <code>max_subarray_sum_mod</code></p><div class="tags" data-tags></div>
|
|
240
|
+
<pre><code>максимальная_сумма_подмассива_по_остатку(data, modulus, remainder=0)</code></pre><p>Максимальная сумма непустого подмассива с заданным остатком; None, если нет. O(n), работает с отрицательными. </p>
|
|
241
|
+
<p class="example"><strong>Пример:</strong> максимальная_сумма_подмассива_по_остатку([1,2,3],3)==6.</p><p><strong>Как выбрать:</strong> Для геометрических кластеров сначала обоснуйте разделение. кластеры_по_расстоянию строит компоненты близости, кластеры_по_средним ищет локальное разбиение. Центр по сумме расстояний — медоид, не среднее координат. Методы остатков/кольца относятся к отдельным старым и тренировочным типам. Медоид O(n²) может быть медленным.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
242
|
+
print(максимальная_сумма_подмассива_по_остатку([1,2,3],3))</code></pre><p>Ожидаемый вывод:</p><pre>6</pre></details></article>
|
|
243
|
+
<article id="knapsack" data-name="knapsack" data-y26='[26, 27]' data-y27='[26, 27]'>
|
|
244
|
+
<h3>максимальная_сумма_рюкзака</h3><p class="muted">Английское имя: <code>knapsack</code></p><div class="tags" data-tags></div>
|
|
245
|
+
<pre><code>максимальная_сумма_рюкзака(weights, capacity)</code></pre><p>Максимальная достижимая сумма весов <=capacity, каждый предмет используется один раз. Битовая динамика, память O(capacity) бит. </p>
|
|
246
|
+
<p class="example"><strong>Пример:</strong> максимальная_сумма_рюкзака([3,5,8],10) == 8. Не возвращает состав набора.</p><p><strong>Как выбрать:</strong> Выбор максимального числа файлов — выбрать_файлы_для_архива. Интервалы без пересечений — выбрать_непересекающиеся_интервалы, с прибылью — максимальная_прибыль_интервалов. Очередь и резервные копии моделируются отдельно. Один жадный алгоритм не подходит всем условиям №26.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
247
|
+
print(максимальная_сумма_рюкзака([3,5,8],10))</code></pre><p>Ожидаемый вывод:</p><pre>8</pre></details></article>
|
|
248
|
+
<article id="peak_overlap" data-name="peak_overlap" data-y26='[22, 26]' data-y27='[22, 26]'>
|
|
249
|
+
<h3>максимум_одновременных_интервалов</h3><p class="muted">Английское имя: <code>peak_overlap</code></p><div class="tags" data-tags></div>
|
|
250
|
+
<pre><code>максимум_одновременных_интервалов(intervals)</code></pre><p>Максимум одновременно активных полуоткрытых интервалов [start,end), например процессов или посетителей. В момент окончания ресурс освобождается. </p>
|
|
251
|
+
<p class="example"><strong>Пример:</strong> максимум_одновременных_интервалов([(0,3),(2,4),(3,5)]) == 2.</p><p><strong>Как выбрать:</strong> процессы_из_таблицы читает зависимости, расписание_процессов считает самое раннее исполнение при неограниченном числе исполнителей. Для заданной миллисекунды — активные_процессы, для максимума одновременных — максимум_одновременных_интервалов. Миллисекунды в этой функции с 1.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
252
|
+
print(максимум_одновременных_интервалов([(0,3),(2,4),(3,5)]))</code></pre><p>Ожидаемый вывод:</p><pre>2</pre></details></article>
|
|
253
|
+
<article id="turing" data-name="turing" data-y26='[12]' data-y27='[12]'>
|
|
254
|
+
<h3>машина_Тьюринга</h3><p class="muted">Английское имя: <code>turing</code></p><div class="tags" data-tags></div>
|
|
255
|
+
<pre><code>машина_Тьюринга(tape, transitions, state='q0', head=0, blank='_', halt=('halt',), max_steps=1000000)</code></pre><p>Симулятор машины Тьюринга. tape — строка или {индекс:символ}; transitions[(состояние,символ)]=(новый_символ,сдвиг,новое_состояние), сдвиг -1/0/1. Возвращает tape/head/state/steps. </p>
|
|
256
|
+
<p class="example"><strong>Пример:</strong> машина_Тьюринга('1',{('q0','1'):('0',1,'halt')}). Отсутствие перехода — ошибка, не неявная остановка.</p><p><strong>Как выбрать:</strong> Редактор строк — редактор_строк; таблица переходов состояния и ленты — машина_Тьюринга. Для нескольких независимых ЕСЛИ задайте first_only=False; для ЕСЛИ/ИНАЧЕ — True. Лимит шагов сигнализирует о возможном зацикливании.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
257
|
+
print(машина_Тьюринга('1', {('q0','1'):('0',1,'halt')}))</code></pre><p>Ожидаемый вывод:</p><pre>{'tape': {0: '0'}, 'head': 1, 'state': 'halt', 'steps': 1}</pre></details></article>
|
|
258
|
+
<article id="min_window_sum_at_least" data-name="min_window_sum_at_least" data-y26='[27]' data-y27='[27]'>
|
|
259
|
+
<h3>минимальная_длина_с_нужной_суммой</h3><p class="muted">Английское имя: <code>min_window_sum_at_least</code></p><div class="tags" data-tags></div>
|
|
260
|
+
<pre><code>минимальная_длина_с_нужной_суммой(data, target)</code></pre><p>Минимальная длина непустого подмассива с суммой >=target для НЕОТРИЦАТЕЛЬНЫХ чисел. O(n), None если нет. </p>
|
|
261
|
+
<p class="example"><strong>Пример:</strong> минимальная_длина_с_нужной_суммой([2,1,4,2],6)==2.</p><p><strong>Как выбрать:</strong> Для геометрических кластеров сначала обоснуйте разделение. кластеры_по_расстоянию строит компоненты близости, кластеры_по_средним ищет локальное разбиение. Центр по сумме расстояний — медоид, не среднее координат. Методы остатков/кольца относятся к отдельным старым и тренировочным типам. Медоид O(n²) может быть медленным.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
262
|
+
print(минимальная_длина_с_нужной_суммой([2,1,4,2],6))</code></pre><p>Ожидаемый вывод:</p><pre>2</pre></details></article>
|
|
263
|
+
<article id="search_values" data-name="search_values" data-y26='[5, 14, 15, 25]' data-y27='[5, 14, 15, 25]'>
|
|
264
|
+
<h3>найти_значения</h3><p class="muted">Английское имя: <code>search_values</code></p><div class="tags" data-tags></div>
|
|
265
|
+
<pre><code>найти_значения(values, predicate)</code></pre><p>Вернуть все элементы конечного values, удовлетворяющие predicate. </p>
|
|
266
|
+
<p class="example"><strong>Пример:</strong> найти_значения(range(100), lambda n:n%7==0). Диапазон нужно обосновать условием.</p><p><strong>Как выбрать:</strong> Сначала запишите точное правило преобразования, затем ищите исходные значения через найти_значения. Для двоичного алгоритма — преобразовать_двоичную_запись. Не путайте минимальный вход с минимальным результатом; границу перебора нужно обосновать.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
267
|
+
print(найти_значения(range(10), lambda n:n%3==0))</code></pre><p>Ожидаемый вывод:</p><pre>[0, 3, 6, 9]</pre></details></article>
|
|
268
|
+
<article id="regex_matches" data-name="regex_matches" data-y26='[10, 24]' data-y27='[24]'>
|
|
269
|
+
<h3>найти_по_регулярному_выражению</h3><p class="muted">Английское имя: <code>regex_matches</code></p><div class="tags" data-tags></div>
|
|
270
|
+
<pre><code>найти_по_регулярному_выражению(text, pattern, overlap=False)</code></pre><p>Список (начало, конец_исключая, текст) совпадений регулярного выражения. overlap=True ищет и пересекающиеся совпадения через match в каждой позиции; на длинных строках это может быть O(n²). </p>
|
|
271
|
+
<p class="example"><strong>Пример:</strong> найти_по_регулярному_выражению('12+34 A','[0-9]+(?:[+*][0-9]+)*'). Регулярку и запрет ведущих нулей задавайте по условию.</p><p><strong>Как выбрать:</strong> Для DOCX — текст_из_docx, затем количество_вхождений. Выберите целое слово или подстроку, регистр и пересечения. Базовое извлечение не включает колонтитулы/сноски и не моделирует весь поиск текстового редактора.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
272
|
+
print(найти_по_регулярному_выражению('12+34 A', r'[0-9]+(?:[+*][0-9]+)*'))</code></pre><p>Ожидаемый вывод:</p><pre>[(0, 5, '12+34')]</pre></details></article>
|
|
273
|
+
<article id="word_rank" data-name="word_rank" data-y26='[8]' data-y27='[8]'>
|
|
274
|
+
<h3>номер_слова</h3><p class="muted">Английское имя: <code>word_rank</code></p><div class="tags" data-tags></div>
|
|
275
|
+
<pre><code>номер_слова(word, alphabet)</code></pre><p>Номер слова с 1 в полном списке слов той же длины с повторениями. Порядок задаёт alphabet; символы алфавита уникальны. </p>
|
|
276
|
+
<p class="example"><strong>Пример:</strong> номер_слова('БА','АБ') == 3.</p><p><strong>Как выбрать:</strong> Нужны слова с повторениями — слова_алфавита/количество_слов; без повторов заданных букв — различные_перестановки. Для номера в полном списке слов — номер_слова или слово_по_номеру. Порядок алфавита задаёт условие, не Unicode.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
277
|
+
print(номер_слова('БА', 'АБ'))</code></pre><p>Ожидаемый вывод:</p><pre>3</pre></details></article>
|
|
278
|
+
<article id="common_prefix" data-name="common_prefix" data-y26='[13]' data-y27='[10]'>
|
|
279
|
+
<h3>общий_префикс_ip</h3><p class="muted">Английское имя: <code>common_prefix</code></p><div class="tags" data-tags></div>
|
|
280
|
+
<pre><code>общий_префикс_ip(addresses)</code></pre><p>Максимальная общая длина префикса IPv4 для непустого списка адресов. </p>
|
|
281
|
+
<p class="example"><strong>Пример:</strong> общий_префикс_ip(['192.168.1.1','192.168.1.2']) == 30.</p><p><strong>Как выбрать:</strong> Для параметров IPv4 — сведения_о_сети. Для произвольного условия на адрес — количество_ip_по_условию. Если нужна только численность по единичным битам, распределение_ip_по_единицам обходится без перебора. Уточните, включать ли сеть и broadcast.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
282
|
+
print(общий_префикс_ip(['192.168.1.1','192.168.1.2']))</code></pre><p>Ожидаемый вывод:</p><pre>30</pre></details></article>
|
|
283
|
+
<article id="audio_bits" data-name="audio_bits" data-y26='[7]' data-y27='[7]'>
|
|
284
|
+
<h3>объём_звука_в_битах</h3><p class="muted">Английское имя: <code>audio_bits</code></p><div class="tags" data-tags></div>
|
|
285
|
+
<pre><code>объём_звука_в_битах(seconds, sample_rate, depth, channels=1)</code></pre><p>Объём несжатого звука: секунды × частота Гц × глубина бит × каналы. Возвращает биты. </p>
|
|
286
|
+
<p class="example"><strong>Пример:</strong> объём_звука_в_битах(10,48000,16,2).</p><p><strong>Как выбрать:</strong> Определите вид данных: объём_изображения_в_битах или объём_звука_в_битах; для канала — время_передачи. Сначала считайте биты, затем байты. Частота в Гц, скорость в бит/с; не смешивайте длительность и размер.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
287
|
+
print(объём_звука_в_битах(1, 48000, 16, 2))</code></pre><p>Ожидаемый вывод:</p><pre>1536000</pre></details></article>
|
|
288
|
+
<article id="image_bits" data-name="image_bits" data-y26='[7]' data-y27='[7]'>
|
|
289
|
+
<h3>объём_изображения_в_битах</h3><p class="muted">Английское имя: <code>image_bits</code></p><div class="tags" data-tags></div>
|
|
290
|
+
<pre><code>объём_изображения_в_битах(width, height, colors)</code></pre><p>Объём несжатого растра в битах, без заголовка и выравнивания строк. </p>
|
|
291
|
+
<p class="example"><strong>Пример:</strong> объём_изображения_в_битах(100,100,256) == 80000.</p><p><strong>Как выбрать:</strong> Определите вид данных: объём_изображения_в_битах или объём_звука_в_битах; для канала — время_передачи. Сначала считайте биты, затем байты. Частота в Гц, скорость в бит/с; не смешивайте длительность и размер.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
292
|
+
print(объём_изображения_в_битах(100, 100, 256))</code></pre><p>Ожидаемый вывод:</p><pre>80000</pre></details></article>
|
|
293
|
+
<article id="storage_bytes" data-name="storage_bytes" data-y26='[7, 11]' data-y27='[7, 11]'>
|
|
294
|
+
<h3>объём_хранения_в_байтах</h3><p class="muted">Английское имя: <code>storage_bytes</code></p><div class="tags" data-tags></div>
|
|
295
|
+
<pre><code>объём_хранения_в_байтах(symbols, alphabet_size, records=1, round_each=True)</code></pre><p>Объём равномерного кодирования в байтах. round_each=True округляет каждый объект отдельно, False — весь поток. </p>
|
|
296
|
+
<p class="example"><strong>Пример:</strong> объём_хранения_в_байтах(10,33,100) == 800. Служебные поля прибавляйте отдельно.</p><p><strong>Как выбрать:</strong> Определите вид данных: объём_изображения_в_битах или объём_звука_в_битах; для канала — время_передачи. Сначала считайте биты, затем байты. Частота в Гц, скорость в бит/с; не смешивайте длительность и размер.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
297
|
+
print(объём_хранения_в_байтах(10, 33, records=100))</code></pre><p>Ожидаемый вывод:</p><pre>800</pre></details></article>
|
|
298
|
+
<article id="match_truth_columns" data-name="match_truth_columns" data-y26='[2]' data-y27='[2]'>
|
|
299
|
+
<h3>определить_столбцы_таблицы</h3><p class="muted">Английское имя: <code>match_truth_columns</code></p><div class="tags" data-tags></div>
|
|
300
|
+
<pre><code>определить_столбцы_таблицы(variables, rows, predicate)</code></pre><p>Найти перестановки переменных по неполной таблице. Каждая строка: n столбцов + F; None — неизвестно. Требует разных полных строк, учитывает неоднозначность. </p>
|
|
301
|
+
<p class="example"><strong>Пример:</strong> определить_столбцы_таблицы('xy', [(0,1,0)], lambda x,y:x and y).</p><p><strong>Как выбрать:</strong> Для полной таблицы — таблица_истинности. Для перестановки столбцов и пропусков — определить_столбцы_таблицы. Пропуски обозначайте None, не нулём; отдельно проверьте требование разных строк.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
302
|
+
print(определить_столбцы_таблицы('xy', [(0,1,0),(1,0,1)], lambda x,y:x))</code></pre><p>Ожидаемый вывод:</p><pre>[('x', 'y')]</pre></details></article>
|
|
303
|
+
<article id="filter_rows" data-name="filter_rows" data-y26='[9]' data-y27='[9]'>
|
|
304
|
+
<h3>отобрать_строки</h3><p class="muted">Английское имя: <code>filter_rows</code></p><div class="tags" data-tags></div>
|
|
305
|
+
<pre><code>отобрать_строки(rows, predicate, start=1)</code></pre><p>Список (номер_строки, строка) по условию predicate(row). start задаёт первый номер. </p>
|
|
306
|
+
<p class="example"><strong>Пример:</strong> отобрать_строки([[1,2],[3,3]], lambda r:len(set(r))==1).</p><p><strong>Как выбрать:</strong> Применяйте характеристики_строки для частот и повторов, отобрать_строки для условия. Повторённые значения и различные повторяющиеся числа — не одно и то же. Уточните, нумеруются ли строки с заголовком.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
307
|
+
print(отобрать_строки([[1,2],[3,3]], lambda r:len(set(r))==1))</code></pre><p>Ожидаемый вывод:</p><pre>[(2, [3, 3])]</pre></details></article>
|
|
308
|
+
<article id="service_queue" data-name="service_queue" data-y26='[26]' data-y27='[26]'>
|
|
309
|
+
<h3>очередь_обслуживания</h3><p class="muted">Английское имя: <code>service_queue</code></p><div class="tags" data-tags></div>
|
|
310
|
+
<pre><code>очередь_обслуживания(arrivals, servers, max_wait=None)</code></pre><p>FCFS-очередь к одинаковым серверам. arrivals — (приход,длительность); servers>=1. При ожидании >max_wait клиент уходит (None). Результат в исходном порядке: (номер_сервера_с_1,начало,конец) либо None. </p>
|
|
311
|
+
<p class="example"><strong>Пример:</strong> очередь_обслуживания([(0,5),(1,2)],1)==[(1,0,5),(1,5,7)]. Для задач с выбором сервера по номеру/без ожидания правила надо изменить.</p><p><strong>Как выбрать:</strong> Выбор максимального числа файлов — выбрать_файлы_для_архива. Интервалы без пересечений — выбрать_непересекающиеся_интервалы, с прибылью — максимальная_прибыль_интервалов. Очередь и резервные копии моделируются отдельно. Один жадный алгоритм не подходит всем условиям №26.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
312
|
+
print(очередь_обслуживания([(0,5),(1,2)],1))</code></pre><p>Ожидаемый вывод:</p><pre>[(1, 0, 5), (1, 5, 7)]</pre></details></article>
|
|
313
|
+
<article id="to_base" data-name="to_base" data-y26='[5, 14]' data-y27='[5, 14]'>
|
|
314
|
+
<h3>перевести_в_систему</h3><p class="muted">Английское имя: <code>to_base</code></p><div class="tags" data-tags></div>
|
|
315
|
+
<pre><code>перевести_в_систему(n, base)</code></pre><p>Перевести неотрицательное целое в строку основания 2–36. </p>
|
|
316
|
+
<p class="example"><strong>Пример:</strong> перевести_в_систему(31,16) == '1F'.</p><p><strong>Как выбрать:</strong> Сначала запишите точное правило преобразования, затем ищите исходные значения через найти_значения. Для двоичного алгоритма — преобразовать_двоичную_запись. Не путайте минимальный вход с минимальным результатом; границу перебора нужно обосновать.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
317
|
+
print(перевести_в_систему(125, 3))</code></pre><p>Ожидаемый вывод:</p><pre>11122</pre></details></article>
|
|
318
|
+
<article id="from_base" data-name="from_base" data-y26='[5, 14]' data-y27='[5, 14]'>
|
|
319
|
+
<h3>перевести_из_системы</h3><p class="muted">Английское имя: <code>from_base</code></p><div class="tags" data-tags></div>
|
|
320
|
+
<pre><code>перевести_из_системы(text, base)</code></pre><p>Значение записи в основании 2–36; неизвестные цифры сначала замените. </p>
|
|
321
|
+
<p class="example"><strong>Пример:</strong> перевести_из_системы('101',2) == 5.</p><p><strong>Как выбрать:</strong> Сначала запишите точное правило преобразования, затем ищите исходные значения через найти_значения. Для двоичного алгоритма — преобразовать_двоичную_запись. Не путайте минимальный вход с минимальным результатом; границу перебора нужно обосновать.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
322
|
+
print(перевести_из_системы('11122', 3))</code></pre><p>Ожидаемый вывод:</p><pre>125</pre></details></article>
|
|
323
|
+
<article id="polygon_area" data-name="polygon_area" data-y26='[6]' data-y27='[6]'>
|
|
324
|
+
<h3>площадь_многоугольника</h3><p class="muted">Английское имя: <code>polygon_area</code></p><div class="tags" data-tags></div>
|
|
325
|
+
<pre><code>площадь_многоугольника(polygon)</code></pre><p>Площадь простого многоугольника по формуле Гаусса. Вершины идут по контуру; повтор последней первой необязателен. Для самопересечений вернёт модуль ориентированной площади, а не площадь закраски. </p>
|
|
326
|
+
<p class="example"><strong>Пример:</strong> площадь_многоугольника([(0,0),(3,0),(3,4)]) == 6.</p><p><strong>Как выбрать:</strong> Черепаха даёт вершины контура. Для простого многоугольника с целыми вершинами быстрее внутренние_точки_по_Пику. Для объединений/пересечений — целые_точки_в_фигурах. Контур, границы, самопересечения и дуги требуют отдельной проверки.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
327
|
+
print(площадь_многоугольника([(0,0),(3,0),(3,4)]))</code></pre><p>Ожидаемый вывод:</p><pre>6.0</pre></details></article>
|
|
328
|
+
<article id="longest_distinct" data-name="longest_distinct" data-y26='[24]' data-y27='[24]'>
|
|
329
|
+
<h3>подстрока_без_повторов</h3><p class="muted">Английское имя: <code>longest_distinct</code></p><div class="tags" data-tags></div>
|
|
330
|
+
<pre><code>подстрока_без_повторов(text)</code></pre><p>Максимальная длина подстроки без повторяющихся символов, O(n). </p>
|
|
331
|
+
<p class="example"><strong>Пример:</strong> подстрока_без_повторов('ABCADE') == 5.</p><p><strong>Как выбрать:</strong> Сначала определите условие: не более k, ровно k или не менее k отмеченных символов — это разные функции. Для соседей — подстрока_с_условием_на_соседей, для отсутствия повторов — подстрока_без_повторов. Регулярное выражение удобно для грамматики, но пересечения могут дать O(n²).</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
332
|
+
print(подстрока_без_повторов('ABCADE'))</code></pre><p>Ожидаемый вывод:</p><pre>5</pre></details></article>
|
|
333
|
+
<article id="longest_at_most" data-name="longest_at_most" data-y26='[24]' data-y27='[24]'>
|
|
334
|
+
<h3>подстрока_не_более</h3><p class="muted">Английское имя: <code>longest_at_most</code></p><div class="tags" data-tags></div>
|
|
335
|
+
<pre><code>подстрока_не_более(text, predicate, k)</code></pre><p>Максимальная длина подстроки, содержащей не более k символов, удовлетворяющих predicate(ch). O(n). </p>
|
|
336
|
+
<p class="example"><strong>Пример:</strong> подстрока_не_более('ABACA',lambda c:c=='A',1)==3.</p><p><strong>Как выбрать:</strong> Возвращает максимальную длину при числе отмеченных символов НЕ БОЛЕЕ k. Если нужно РОВНО k — подстрока_ровно; МИНИМУМ длины при НЕ МЕНЕЕ k — подстрока_не_менее.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
337
|
+
print(подстрока_не_более('ABACA', lambda c:c=='A', 1))</code></pre><p>Ожидаемый вывод:</p><pre>3</pre></details></article>
|
|
338
|
+
<article id="shortest_at_least" data-name="shortest_at_least" data-y26='[24]' data-y27='[24]'>
|
|
339
|
+
<h3>подстрока_не_менее</h3><p class="muted">Английское имя: <code>shortest_at_least</code></p><div class="tags" data-tags></div>
|
|
340
|
+
<pre><code>подстрока_не_менее(text, predicate, k)</code></pre><p>Минимальная длина подстроки с минимум k отмеченными символами, None если нет; k=0 даёт 0. O(n). </p>
|
|
341
|
+
<p class="example"><strong>Пример:</strong> подстрока_не_менее('ABACA',lambda c:c=='A',2)==3.</p><p><strong>Как выбрать:</strong> Возвращает минимальную длину при НЕ МЕНЕЕ k отмеченных символах, а не максимум. При отсутствии — None; при k=0 — 0.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
342
|
+
print(подстрока_не_менее('ABACA', lambda c:c=='A', 2))</code></pre><p>Ожидаемый вывод:</p><pre>3</pre></details></article>
|
|
343
|
+
<article id="longest_exactly" data-name="longest_exactly" data-y26='[24]' data-y27='[24]'>
|
|
344
|
+
<h3>подстрока_ровно</h3><p class="muted">Английское имя: <code>longest_exactly</code></p><div class="tags" data-tags></div>
|
|
345
|
+
<pre><code>подстрока_ровно(text, predicate, k)</code></pre><p>Максимальная длина непустой подстроки ровно с k отмеченными символами; 0, если подходящей нет. O(n). </p>
|
|
346
|
+
<p class="example"><strong>Пример:</strong> подстрока_ровно('ABACA',lambda c:c=='A',2)==4.</p><p><strong>Как выбрать:</strong> Возвращает максимальную длину при РОВНО k отмеченных символах. Не подменяйте это условием «не более». Для минимальной длины с минимум k — другая функция.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
347
|
+
print(подстрока_ровно('ABACA', lambda c:c=='A', 2))</code></pre><p>Ожидаемый вывод:</p><pre>4</pre></details></article>
|
|
348
|
+
<article id="longest_adjacent" data-name="longest_adjacent" data-y26='[24]' data-y27='[24]'>
|
|
349
|
+
<h3>подстрока_с_условием_на_соседей</h3><p class="muted">Английское имя: <code>longest_adjacent</code></p><div class="tags" data-tags></div>
|
|
350
|
+
<pre><code>подстрока_с_условием_на_соседей(text, compatible)</code></pre><p>Максимальная длина подстроки, где каждая соседняя пара удовлетворяет compatible(a,b). O(n). </p>
|
|
351
|
+
<p class="example"><strong>Пример:</strong> подстрока_с_условием_на_соседей('AABAB',lambda a,b:a!=b) == 4.</p><p><strong>Как выбрать:</strong> Сначала определите условие: не более k, ровно k или не менее k отмеченных символов — это разные функции. Для соседей — подстрока_с_условием_на_соседей, для отсутствия повторов — подстрока_без_повторов. Регулярное выражение удобно для грамматики, но пересечения могут дать O(n²).</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
352
|
+
print(подстрока_с_условием_на_соседей('AABAB', lambda a,b:a!=b))</code></pre><p>Ожидаемый вывод:</p><pre>4</pre></details></article>
|
|
353
|
+
<article id="binary_transform" data-name="binary_transform" data-y26='[5]' data-y27='[5]'>
|
|
354
|
+
<h3>преобразовать_двоичную_запись</h3><p class="muted">Английское имя: <code>binary_transform</code></p><div class="tags" data-tags></div>
|
|
355
|
+
<pre><code>преобразовать_двоичную_запись(n, transform)</code></pre><p>Передать двоичную запись n без '0b' в transform и прочитать полученную запись как двоичное число. </p>
|
|
356
|
+
<p class="example"><strong>Пример:</strong> преобразовать_двоичную_запись(5, lambda s:s+'0') == 10. Правило дописывания задаётся по условию.</p><p><strong>Как выбрать:</strong> Сначала запишите точное правило преобразования, затем ищите исходные значения через найти_значения. Для двоичного алгоритма — преобразовать_двоичную_запись. Не путайте минимальный вход с минимальным результатом; границу перебора нужно обосновать.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
357
|
+
print(преобразовать_двоичную_запись(5, lambda s:s+'0'))</code></pre><p>Ожидаемый вывод:</p><pre>10</pre></details></article>
|
|
358
|
+
<article id="prefix_sums" data-name="prefix_sums" data-y26='[27]' data-y27='[27]'>
|
|
359
|
+
<h3>префиксные_суммы</h3><p class="muted">Английское имя: <code>prefix_sums</code></p><div class="tags" data-tags></div>
|
|
360
|
+
<pre><code>префиксные_суммы(data)</code></pre><p>Префиксные суммы с нулём в начале. Сумма data[l:r] равна p[r]-p[l]. </p>
|
|
361
|
+
<p class="example"><strong>Пример:</strong> префиксные_суммы([2,3,-1]) == [0,2,5,4].</p><p><strong>Как выбрать:</strong> Для геометрических кластеров сначала обоснуйте разделение. кластеры_по_расстоянию строит компоненты близости, кластеры_по_средним ищет локальное разбиение. Центр по сумме расстояний — медоид, не среднее координат. Методы остатков/кольца относятся к отдельным старым и тренировочным типам. Медоид O(n²) может быть медленным.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
362
|
+
print(префиксные_суммы([2,3,-1]))</code></pre><p>Ожидаемый вывод:</p><pre>[0, 2, 5, 4]</pre></details></article>
|
|
363
|
+
<article id="interval_contains" data-name="interval_contains" data-y26='[15]' data-y27='[15]'>
|
|
364
|
+
<h3>принадлежит_интервалу</h3><p class="muted">Английское имя: <code>interval_contains</code></p><div class="tags" data-tags></div>
|
|
365
|
+
<pre><code>принадлежит_интервалу(x, left, right, closed=True)</code></pre><p>Принадлежность закрытому [left,right] или открытому (left,right) интервалу. </p>
|
|
366
|
+
<p class="example"><strong>Пример:</strong> принадлежит_интервалу(3,1,3) == True.</p><p><strong>Как выбрать:</strong> допустимые_параметры проверяет все значения только в переданном конечном диапазоне. Для всех натуральных или вещественных x нужны обоснованные границы или аналитика. Логическое следование — следование; побитовые операции требуют правильных скобок.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
367
|
+
print(принадлежит_интервалу(3, 1, 3))</code></pre><p>Ожидаемый вывод:</p><pre>True</pre></details></article>
|
|
368
|
+
<article id="is_prefix_free" data-name="is_prefix_free" data-y26='[4]' data-y27='[4]'>
|
|
369
|
+
<h3>проверка_условия_Фано</h3><p class="muted">Английское имя: <code>is_prefix_free</code></p><div class="tags" data-tags></div>
|
|
370
|
+
<pre><code>проверка_условия_Фано(codes)</code></pre><p>Проверить условие Фано для набора непустых двоичных слов. Дубликаты недопустимы. </p>
|
|
371
|
+
<p class="example"><strong>Пример:</strong> проверка_условия_Фано(['0','10','11']) == True.</p><p><strong>Как выбрать:</strong> Закреплённые кодовые слова: проверка_условия_Фано и допустимые_кодовые_слова. Оптимальный код без закреплений: коды_Хаффмана. Код Хаффмана не решает ограничения с заранее назначенными словами.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
372
|
+
print(проверка_условия_Фано(['0', '10', '11']))</code></pre><p>Ожидаемый вывод:</p><pre>True</pre></details></article>
|
|
373
|
+
<article id="is_prime" data-name="is_prime" data-y26='[25]' data-y27='[25]'>
|
|
374
|
+
<h3>простое_число</h3><p class="muted">Английское имя: <code>is_prime</code></p><div class="tags" data-tags></div>
|
|
375
|
+
<pre><code>простое_число(n)</code></pre><p>Проверка простоты целого числа пробными делителями до sqrt(n), O(sqrt(n)); n<2 не простое. </p>
|
|
376
|
+
<p class="example"><strong>Пример:</strong> простое_число(97) == True.</p><p><strong>Как выбрать:</strong> Немного отдельных чисел — делители/разложить_на_простые. Много чисел до общей границы — решето_простых. Маска и делимость — кратные_по_маске. При огромной границе и малом делителе перебор кратных может быть слишком медленным.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
377
|
+
print(простое_число(97))</code></pre><p>Ожидаемый вывод:</p><pre>True</pre></details></article>
|
|
378
|
+
<article id="processes_from_rows" data-name="processes_from_rows" data-y26='[22]' data-y27='[22]'>
|
|
379
|
+
<h3>процессы_из_таблицы</h3><p class="muted">Английское имя: <code>processes_from_rows</code></p><div class="tags" data-tags></div>
|
|
380
|
+
<pre><code>процессы_из_таблицы(rows, skip=1)</code></pre><p>Преобразовать строки [ID,длительность,'предшественник;предшественник'] в durations/dependencies. '0'/0/None означает отсутствие зависимостей. Возвращает два словаря, ID — строки. </p>
|
|
381
|
+
<p class="example"><strong>Пример:</strong> процессы_из_таблицы([['1',3,'0'],['2',4,'1']],skip=0).</p><p><strong>Как выбрать:</strong> процессы_из_таблицы читает зависимости, расписание_процессов считает самое раннее исполнение при неограниченном числе исполнителей. Для заданной миллисекунды — активные_процессы, для максимума одновременных — максимум_одновременных_интервалов. Миллисекунды в этой функции с 1.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
382
|
+
print(процессы_из_таблицы([['1',3,'0'],['2',4,'1']], skip=0))</code></pre><p>Ожидаемый вывод:</p><pre>({'1': 3, '2': 4}, {'1': [], '2': ['1']})</pre></details></article>
|
|
383
|
+
<article id="read_csv" data-name="read_csv" data-y26='[3, 9]' data-y27='[3, 9]'>
|
|
384
|
+
<h3>прочитать_csv</h3><p class="muted">Английское имя: <code>read_csv</code></p><div class="tags" data-tags></div>
|
|
385
|
+
<pre><code>прочитать_csv(path, delimiter=';', encoding='utf-8-sig')</code></pre><p>Прочитать CSV как список словарей; первая строка — названия полей. Значения остаются строками. </p>
|
|
386
|
+
<p class="example"><strong>Пример:</strong> прочитать_csv('table.csv'). XLSX нужно предварительно экспортировать в CSV.</p><p><strong>Как выбрать:</strong> Сначала прочитайте нужные листы XLSX/ODS или CSV, затем соедините таблицы по ключам и примените условия. Проверяйте дубликаты ключей, числовые типы и единицы. Формулы в XLSX/ODS не пересчитываются.</p><details><summary>Пример с ожидаемым результатом</summary><p>table.csv: заголовок id;n, затем строка a;3.</p><pre><code>from егэ import *
|
|
387
|
+
print(прочитать_csv('table.csv'))</code></pre><p>Ожидаемый вывод:</p><pre>[{'id': 'a', 'n': '3'}]</pre></details></article>
|
|
388
|
+
<article id="read_ods" data-name="read_ods" data-y26='[3, 9, 18, 22]' data-y27='[3, 9, 18, 22]'>
|
|
389
|
+
<h3>прочитать_ods</h3><p class="muted">Английское имя: <code>read_ods</code></p><div class="tags" data-tags></div>
|
|
390
|
+
<pre><code>прочитать_ods(path, sheet=0, max_cells=2000000)</code></pre><p>Читать непустую область листа ODS в строки значений, включая сохранённые результаты формул. Числа — int/float, пропуски — None. Не пересчитывает формулы; повторения пустых хвостовых строк/ячеек обрезает. </p>
|
|
391
|
+
<p class="example"><strong>Пример:</strong> прочитать_ods('demo_22.ods'). Не поддерживает сложное форматирование/объединённые ячейки.</p><p><strong>Как выбрать:</strong> Сначала прочитайте нужные листы XLSX/ODS или CSV, затем соедините таблицы по ключам и примените условия. Проверяйте дубликаты ключей, числовые типы и единицы. Формулы в XLSX/ODS не пересчитываются.</p><details><summary>Пример с ожидаемым результатом</summary><p>9.ods, первый лист: строки [1, 2] и [3, 4], без заголовков.</p><pre><code>from егэ import *
|
|
392
|
+
print(прочитать_ods('9.ods'))</code></pre><p>Ожидаемый вывод:</p><pre>[[1, 2], [3, 4]]</pre></details></article>
|
|
393
|
+
<article id="read_xlsx" data-name="read_xlsx" data-y26='[3, 9, 18, 22]' data-y27='[3, 9, 18, 22]'>
|
|
394
|
+
<h3>прочитать_xlsx</h3><p class="muted">Английское имя: <code>read_xlsx</code></p><div class="tags" data-tags></div>
|
|
395
|
+
<pre><code>прочитать_xlsx(path, sheet=0)</code></pre><p>Читать XLSX без внешних зависимостей: выбранный лист по индексу с 0, результат — строки значений. Числа преобразуются в int/float, пропуски в None. Читает сохранённые результаты формул, НЕ пересчитывает их; отсутствующий кеш формулы — ошибка. </p>
|
|
396
|
+
<p class="example"><strong>Пример:</strong> прочитать_xlsx('9.xlsx'). Сложные типы/стили/даты не интерпретируются.</p><p><strong>Как выбрать:</strong> Сначала прочитайте нужные листы XLSX/ODS или CSV, затем соедините таблицы по ключам и примените условия. Проверяйте дубликаты ключей, числовые типы и единицы. Формулы в XLSX/ODS не пересчитываются.</p><details><summary>Пример с ожидаемым результатом</summary><p>9.xlsx, первый лист: строки [1, 2] и [3, 4], без заголовков.</p><pre><code>from егэ import *
|
|
397
|
+
print(прочитать_xlsx('9.xlsx'))</code></pre><p>Ожидаемый вывод:</p><pre>[[1, 2], [3, 4]]</pre></details></article>
|
|
398
|
+
<article id="read_weighted_graph" data-name="read_weighted_graph" data-y26='[23]' data-y27='[23]'>
|
|
399
|
+
<h3>прочитать_взвешенный_граф</h3><p class="muted">Английское имя: <code>read_weighted_graph</code></p><div class="tags" data-tags></div>
|
|
400
|
+
<pre><code>прочитать_взвешенный_граф(path, skip=0, weight=float)</code></pre><p>Прочитать ориентированный граф из строк 'u v вес'; ID — int, weight можно заменить на Decimal для точной десятичной арифметики. Результат: {u:{v:вес}}. </p>
|
|
401
|
+
<p class="example"><strong>Пример:</strong> прочитать_взвешенный_граф('23.txt'). Повторное ребро — ошибка.</p><p><strong>Как выбрать:</strong> Для команд исполнителя — количество_программ, для обязательных точек — количество_программ_через_точки. Ограничьте пространство allowed и исключите запрещённые значения. Команды должны образовывать DAG; вариант через точки требует строгой монотонности.</p><details><summary>Пример с ожидаемым результатом</summary><p>graph.txt: одна строка «1 2 3.5».</p><pre><code>from егэ import *
|
|
402
|
+
print(прочитать_взвешенный_граф('graph.txt'))</code></pre><p>Ожидаемый вывод:</p><pre>{1: {2: 3.5}, 2: {}}</pre></details></article>
|
|
403
|
+
<article id="read_rows" data-name="read_rows" data-y26='[9, 17, 22, 26, 27]' data-y27='[9, 17, 22, 26, 27]'>
|
|
404
|
+
<h3>прочитать_строки_таблицы</h3><p class="muted">Английское имя: <code>read_rows</code></p><div class="tags" data-tags></div>
|
|
405
|
+
<pre><code>прочитать_строки_таблицы(path, cast=int, skip=0, delimiter=None, encoding='utf-8-sig')</code></pre><p>Прочитать строки таблицы в список списков. skip — число строк заголовка; delimiter=None — любые пробелы. Пустые строки пропускаются. </p>
|
|
406
|
+
<p class="example"><strong>Пример:</strong> прочитать_строки_таблицы('26.txt', skip=1).</p><p><strong>Как выбрать:</strong> Результат — список списков, строки заголовка пропускаются через skip. Если первая строка содержит число строк, используйте skip=1; для смешанных полей cast=str.</p><details><summary>Пример с ожидаемым результатом</summary><p>17.txt: две строки «1 2» и «3 4», без заголовка.</p><pre><code>from егэ import *
|
|
407
|
+
print(прочитать_строки_таблицы('17.txt'))</code></pre><p>Ожидаемый вывод:</p><pre>[[1, 2], [3, 4]]</pre></details></article>
|
|
408
|
+
<article id="read_text" data-name="read_text" data-y26='[3, 9, 17, 22, 24, 26, 27]' data-y27='[3, 9, 17, 22, 24, 26, 27]'>
|
|
409
|
+
<h3>прочитать_текст</h3><p class="muted">Английское имя: <code>read_text</code></p><div class="tags" data-tags></div>
|
|
410
|
+
<pre><code>прочитать_текст(path, encoding='utf-8-sig')</code></pre><p>Прочитать текст, сохраняя переводы строк. Для Windows-файла задайте encoding='cp1251'. </p>
|
|
411
|
+
<p class="example"><strong>Пример:</strong> прочитать_текст('24.txt').</p><p><strong>Как выбрать:</strong> Прочтите файл в нужной кодировке. Относительный путь отсчитывается от рабочей папки программы. Для числовой таблицы удобнее прочитать_строки_таблицы, для чисел — прочитать_числа.</p><details><summary>Пример с ожидаемым результатом</summary><p>17.txt: две строки «1 2» и «3 4».</p><pre><code>from егэ import *
|
|
412
|
+
print(прочитать_текст('17.txt').strip())</code></pre><p>Ожидаемый вывод:</p><pre>1 2
|
|
413
|
+
3 4</pre></details></article>
|
|
414
|
+
<article id="read_points" data-name="read_points" data-y26='[27]' data-y27='[27]'>
|
|
415
|
+
<h3>прочитать_точки</h3><p class="muted">Английское имя: <code>read_points</code></p><div class="tags" data-tags></div>
|
|
416
|
+
<pre><code>прочитать_точки(path, skip=1, decimal_comma=True, encoding='utf-8-sig')</code></pre><p>Прочитать двумерные координаты из TXT, разделённые пробелами/табуляцией. skip=1 пропускает заголовок; decimal_comma заменяет десятичные запятые. </p>
|
|
417
|
+
<p class="example"><strong>Пример:</strong> прочитать_точки('27_A.txt'). При файле без заголовка задайте skip=0.</p><p><strong>Как выбрать:</strong> По умолчанию skip=1: файл без заголовка требует skip=0. Это только двумерные точки. Частицы с массой/скоростью читаются через прочитать_частицы.</p><details><summary>Пример с ожидаемым результатом</summary><p>points.txt: заголовок x y, затем строка 1,5 2,5.</p><pre><code>from егэ import *
|
|
418
|
+
print(прочитать_точки('points.txt'))</code></pre><p>Ожидаемый вывод:</p><pre>[(1.5, 2.5)]</pre></details></article>
|
|
419
|
+
<article id="read_particles" data-name="read_particles" data-y26='[27]' data-y27='[27]'>
|
|
420
|
+
<h3>прочитать_частицы</h3><p class="muted">Английское имя: <code>read_particles</code></p><div class="tags" data-tags></div>
|
|
421
|
+
<pre><code>прочитать_частицы(path, skip=0)</code></pre><p>Читать частицы из строк x y vx vy mass type, десятичная запятая допустима. Возвращает словари полей, включая energy=mass*(vx²+vy²)/2. </p>
|
|
422
|
+
<p class="example"><strong>Пример:</strong> прочитать_частицы('27.txt'). Строки заголовка явно пропустите skip.</p><p><strong>Как выбрать:</strong> Для геометрических кластеров сначала обоснуйте разделение. кластеры_по_расстоянию строит компоненты близости, кластеры_по_средним ищет локальное разбиение. Центр по сумме расстояний — медоид, не среднее координат. Методы остатков/кольца относятся к отдельным старым и тренировочным типам. Медоид O(n²) может быть медленным.</p><details><summary>Пример с ожидаемым результатом</summary><p>particles.txt: одна строка «0 0 3 4 0,2 II», без заголовка.</p><pre><code>from егэ import *
|
|
423
|
+
print(прочитать_частицы('particles.txt')[0]['energy'])</code></pre><p>Ожидаемый вывод:</p><pre>2.5</pre></details></article>
|
|
424
|
+
<article id="read_numbers" data-name="read_numbers" data-y26='[17, 26, 27]' data-y27='[17, 26, 27]'>
|
|
425
|
+
<h3>прочитать_числа</h3><p class="muted">Английское имя: <code>read_numbers</code></p><div class="tags" data-tags></div>
|
|
426
|
+
<pre><code>прочитать_числа(path, skip=0, encoding='utf-8-sig')</code></pre><p>Прочитать все целые числа после skip строк заголовка, независимо от числа столбцов. </p>
|
|
427
|
+
<p class="example"><strong>Пример:</strong> прочитать_числа('17.txt').</p><p><strong>Как выбрать:</strong> Укажите skip=1 только если первая строка — заголовок/количество. Иначе будет потеряно первое число. Функция читает все числа, не только первый столбец.</p><details><summary>Пример с ожидаемым результатом</summary><p>17.txt: две строки «1 2» и «3 4», без заголовка.</p><pre><code>from егэ import *
|
|
428
|
+
print(прочитать_числа('17.txt'))</code></pre><p>Ожидаемый вывод:</p><pre>[1, 2, 3, 4]</pre></details></article>
|
|
429
|
+
<article id="unique_permutations" data-name="unique_permutations" data-y26='[8]' data-y27='[8]'>
|
|
430
|
+
<h3>различные_перестановки</h3><p class="muted">Английское имя: <code>unique_permutations</code></p><div class="tags" data-tags></div>
|
|
431
|
+
<pre><code>различные_перестановки(text)</code></pre><p>Ленивый перебор различных перестановок символов, включая повторяющиеся, без хранения всех перестановок. </p>
|
|
432
|
+
<p class="example"><strong>Пример:</strong> list(различные_перестановки('ААБ')).</p><p><strong>Как выбрать:</strong> Нужны слова с повторениями — слова_алфавита/количество_слов; без повторов заданных букв — различные_перестановки. Для номера в полном списке слов — номер_слова или слово_по_номеру. Порядок алфавита задаёт условие, не Unicode.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
433
|
+
print(list(различные_перестановки('ААБ')))</code></pre><p>Ожидаемый вывод:</p><pre>['ААБ', 'АБА', 'БАА']</pre></details></article>
|
|
434
|
+
<article id="prime_factors" data-name="prime_factors" data-y26='[25]' data-y27='[25]'>
|
|
435
|
+
<h3>разложить_на_простые</h3><p class="muted">Английское имя: <code>prime_factors</code></p><div class="tags" data-tags></div>
|
|
436
|
+
<pre><code>разложить_на_простые(n)</code></pre><p>Простые множители с кратностями в словаре; n>=1. </p>
|
|
437
|
+
<p class="example"><strong>Пример:</strong> разложить_на_простые(72) == {2:3,3:2}.</p><p><strong>Как выбрать:</strong> Немного отдельных чисел — делители/разложить_на_простые. Много чисел до общей границы — решето_простых. Маска и делимость — кратные_по_маске. При огромной границе и малом делителе перебор кратных может быть слишком медленным.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
438
|
+
print(разложить_на_простые(72))</code></pre><p>Ожидаемый вывод:</p><pre>{2: 3, 3: 2}</pre></details></article>
|
|
439
|
+
<article id="process_schedule" data-name="process_schedule" data-y26='[22]' data-y27='[22]'>
|
|
440
|
+
<h3>расписание_процессов</h3><p class="muted">Английское имя: <code>process_schedule</code></p><div class="tags" data-tags></div>
|
|
441
|
+
<pre><code>расписание_процессов(durations, dependencies, lag=0)</code></pre><p>Ранние start/finish процессов при неограниченном числе исполнителей. durations — {ID:длительность}, dependencies — {ID:[предшественники]}; лаг lag добавляется после зависимостей, не к корневым процессам. Возвращает starts, finishes, total. Циклы/неизвестные ID — ошибка. </p>
|
|
442
|
+
<p class="example"><strong>Пример:</strong> расписание_процессов({'A':3,'B':2},{'B':['A']})['total']==5. Для ограниченного числа процессоров нужен отдельный планировщик.</p><p><strong>Как выбрать:</strong> процессы_из_таблицы читает зависимости, расписание_процессов считает самое раннее исполнение при неограниченном числе исполнителей. Для заданной миллисекунды — активные_процессы, для максимума одновременных — максимум_одновременных_интервалов. Миллисекунды в этой функции с 1.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
443
|
+
print(расписание_процессов({'A':3,'B':2}, {'B':['A']}))</code></pre><p>Ожидаемый вывод:</p><pre>{'starts': {'A': 0, 'B': 3}, 'finishes': {'A': 3, 'B': 5}, 'total': 5}</pre></details></article>
|
|
444
|
+
<article id="ip_weight_counts" data-name="ip_weight_counts" data-y26='[13]' data-y27='[10]'>
|
|
445
|
+
<h3>распределение_ip_по_единицам</h3><p class="muted">Английское имя: <code>ip_weight_counts</code></p><div class="tags" data-tags></div>
|
|
446
|
+
<pre><code>распределение_ip_по_единицам(address, mask)</code></pre><p>Число всех адресов сети с каждым количеством единичных битов, без перебора. Сеть и broadcast включены. </p>
|
|
447
|
+
<p class="example"><strong>Пример:</strong> sum(распределение_ip_по_единицам('10.0.0.0',8).values()) == 2**24.</p><p><strong>Как выбрать:</strong> Для параметров IPv4 — сведения_о_сети. Для произвольного условия на адрес — количество_ip_по_условию. Если нужна только численность по единичным битам, распределение_ip_по_единицам обходится без перебора. Уточните, включать ли сеть и broadcast.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
448
|
+
print(sum(распределение_ip_по_единицам('10.0.0.0', 8).values()))</code></pre><p>Ожидаемый вывод:</p><pre>16777216</pre></details></article>
|
|
449
|
+
<article id="distance" data-name="distance" data-y26='[27]' data-y27='[27]'>
|
|
450
|
+
<h3>расстояние_между_точками</h3><p class="muted">Английское имя: <code>distance</code></p><div class="tags" data-tags></div>
|
|
451
|
+
<pre><code>расстояние_между_точками(a, b)</code></pre><p>Евклидово расстояние между двумя точками плоскости. </p>
|
|
452
|
+
<p class="example"><strong>Пример:</strong> расстояние_между_точками((0,0),(3,4)) == 5.</p><p><strong>Как выбрать:</strong> Для геометрических кластеров сначала обоснуйте разделение. кластеры_по_расстоянию строит компоненты близости, кластеры_по_средним ищет локальное разбиение. Центр по сумме расстояний — медоид, не среднее координат. Методы остатков/кольца относятся к отдельным старым и тренировочным типам. Медоид O(n²) может быть медленным.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
453
|
+
print(расстояние_между_точками((0,0),(3,4)))</code></pre><p>Ожидаемый вывод:</p><pre>5.0</pre></details></article>
|
|
454
|
+
<article id="rewrite" data-name="rewrite" data-y26='[12]' data-y27='[12]'>
|
|
455
|
+
<h3>редактор_строк</h3><p class="muted">Английское имя: <code>rewrite</code></p><div class="tags" data-tags></div>
|
|
456
|
+
<pre><code>редактор_строк(text, rules, condition=None, first_only=True, max_steps=100000)</code></pre><p>Исполнитель Редактор: rules — упорядоченные пары (что,на_что). first_only=True — за итерацию первое применимое правило (ЕСЛИ/ИНАЧЕ); False — все правила по порядку (несколько ЕСЛИ). Каждая замена меняет первое вхождение. condition(text) проверяет ПОКА. </p>
|
|
457
|
+
<p class="example"><strong>Пример:</strong> редактор_строк('1111',[('11','2')]) == '22'. Лимит вызывает RuntimeError.</p><p><strong>Как выбрать:</strong> Редактор строк — редактор_строк; таблица переходов состояния и ленты — машина_Тьюринга. Для нескольких независимых ЕСЛИ задайте first_only=False; для ЕСЛИ/ИНАЧЕ — True. Лимит шагов сигнализирует о возможном зацикливании.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
458
|
+
print(редактор_строк('1111', [('11','2')]))</code></pre><p>Ожидаемый вывод:</p><pre>22</pre></details></article>
|
|
459
|
+
<article id="recursive_function" data-name="recursive_function" data-y26='[16]' data-y27='[16]'>
|
|
460
|
+
<h3>рекурсивная_функция</h3><p class="muted">Английское имя: <code>recursive_function</code></p><div class="tags" data-tags></div>
|
|
461
|
+
<pre><code>рекурсивная_функция(rule)</code></pre><p>Создать мемоизированную функцию f(n); rule(f,n) содержит базу и рекурсию. </p>
|
|
462
|
+
<p class="example"><strong>Пример:</strong> f=рекурсивная_функция(lambda f,n:1 if n<=1 else n*f(n-1)); f(5)==120. Для большой глубины используйте вычислить_рекуррентную_функцию, лимит рекурсии не меняется.</p><p><strong>Как выбрать:</strong> Небольшая глубина рекурсии — рекурсивная_функция. Большая глубина и зависимости от меньших индексов — вычислить_рекуррентную_функцию без стека. Сначала задайте базу и направление зависимостей; не повышайте лимит рекурсии без необходимости.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
463
|
+
f = рекурсивная_функция(lambda f,n:1 if n<=1 else n*f(n-1))
|
|
464
|
+
print(f(5))</code></pre><p>Ожидаемый вывод:</p><pre>120</pre></details></article>
|
|
465
|
+
<article id="sieve" data-name="sieve" data-y26='[25]' data-y27='[25]'>
|
|
466
|
+
<h3>решето_простых</h3><p class="muted">Английское имя: <code>sieve</code></p><div class="tags" data-tags></div>
|
|
467
|
+
<pre><code>решето_простых(limit)</code></pre><p>Список простых чисел от 2 до limit включительно, решето Эратосфена. Память O(limit). </p>
|
|
468
|
+
<p class="example"><strong>Пример:</strong> решето_простых(10) == [2,3,5,7].</p><p><strong>Как выбрать:</strong> Немного отдельных чисел — делители/разложить_на_простые. Много чисел до общей границы — решето_простых. Маска и делимость — кратные_по_маске. При огромной границе и малом делителе перебор кратных может быть слишком медленным.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
469
|
+
print(решето_простых(10))</code></pre><p>Ожидаемый вывод:</p><pre>[2, 3, 5, 7]</pre></details></article>
|
|
470
|
+
<article id="longest_run" data-name="longest_run" data-y26='[24]' data-y27='[24]'>
|
|
471
|
+
<h3>самая_длинная_цепочка</h3><p class="muted">Английское имя: <code>longest_run</code></p><div class="tags" data-tags></div>
|
|
472
|
+
<pre><code>самая_длинная_цепочка(text, allowed)</code></pre><p>Самая длинная непрерывная подстрока из символов allowed (множество или строка). Возвращает длину. </p>
|
|
473
|
+
<p class="example"><strong>Пример:</strong> самая_длинная_цепочка('ABXAAA','AB') == 3.</p><p><strong>Как выбрать:</strong> Сначала определите условие: не более k, ровно k или не менее k отмеченных символов — это разные функции. Для соседей — подстрока_с_условием_на_соседей, для отсутствия повторов — подстрока_без_повторов. Регулярное выражение удобно для грамматики, но пересечения могут дать O(n²).</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
474
|
+
print(самая_длинная_цепочка('ABXAAA', 'AB'))</code></pre><p>Ожидаемый вывод:</p><pre>3</pre></details></article>
|
|
475
|
+
<article id="network_info" data-name="network_info" data-y26='[13]' data-y27='[10]'>
|
|
476
|
+
<h3>сведения_о_сети</h3><p class="muted">Английское имя: <code>network_info</code></p><div class="tags" data-tags></div>
|
|
477
|
+
<pre><code>сведения_о_сети(address, mask)</code></pre><p>Параметры IPv4-сети по адресу и маске (число бит или строка). hosts_count — обычные адреса без сети/ broadcast; для /31 и /32 соответствует ipaddress.hosts(). </p>
|
|
478
|
+
<p class="example"><strong>Пример:</strong> сведения_о_сети('192.168.1.12',24).</p><p><strong>Как выбрать:</strong> Для параметров IPv4 — сведения_о_сети. Для произвольного условия на адрес — количество_ip_по_условию. Если нужна только численность по единичным битам, распределение_ip_по_единицам обходится без перебора. Уточните, включать ли сеть и broadcast.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
479
|
+
print(сведения_о_сети('192.168.1.12', 24)['network'])</code></pre><p>Ожидаемый вывод:</p><pre>192.168.1.0</pre></details></article>
|
|
480
|
+
<article id="missing_seats" data-name="missing_seats" data-y26='[26]' data-y27='[26]'>
|
|
481
|
+
<h3>свободные_места</h3><p class="muted">Английское имя: <code>missing_seats</code></p><div class="tags" data-tags></div>
|
|
482
|
+
<pre><code>свободные_места(occupied, free_count=2)</code></pre><p>Найти ровно free_count свободных мест между соседними занятыми в одном ряду. occupied — пары (ряд,место); возвращает (ряд,первое_свободное) по убыванию ряда, затем возрастанию места. </p>
|
|
483
|
+
<p class="example"><strong>Пример:</strong> свободные_места([(5,2),(5,5)])==[(5,3)].</p><p><strong>Как выбрать:</strong> Выбор максимального числа файлов — выбрать_файлы_для_архива. Интервалы без пересечений — выбрать_непересекающиеся_интервалы, с прибылью — максимальная_прибыль_интервалов. Очередь и резервные копии моделируются отдельно. Один жадный алгоритм не подходит всем условиям №26.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
484
|
+
print(свободные_места([(5,2),(5,5)]))</code></pre><p>Ожидаемый вывод:</p><pre>[(5, 3)]</pre></details></article>
|
|
485
|
+
<article id="group_aggregate" data-name="group_aggregate" data-y26='[3]' data-y27='[3]'>
|
|
486
|
+
<h3>сгруппировать_и_вычислить</h3><p class="muted">Английское имя: <code>group_aggregate</code></p><div class="tags" data-tags></div>
|
|
487
|
+
<pre><code>сгруппировать_и_вычислить(rows, key, value, aggregate=sum)</code></pre><p>Сгруппировать словари по полю key, применить aggregate к значениям поля value. Строковые числа сначала преобразуйте. </p>
|
|
488
|
+
<p class="example"><strong>Пример:</strong> сгруппировать_и_вычислить([{'city':'A','n':3}], 'city','n').</p><p><strong>Как выбрать:</strong> Сначала прочитайте нужные листы XLSX/ODS или CSV, затем соедините таблицы по ключам и примените условия. Проверяйте дубликаты ключей, числовые типы и единицы. Формулы в XLSX/ODS не пересчитываются.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
489
|
+
print(сгруппировать_и_вычислить([{'city':'A','n':3},{'city':'A','n':2}], 'city', 'n'))</code></pre><p>Ожидаемый вывод:</p><pre>{'A': 5}</pre></details></article>
|
|
490
|
+
<article id="implies" data-name="implies" data-y26='[2, 15]' data-y27='[2, 15]'>
|
|
491
|
+
<h3>следование</h3><p class="muted">Английское имя: <code>implies</code></p><div class="tags" data-tags></div>
|
|
492
|
+
<pre><code>следование(a, b)</code></pre><p>Логическое следование a → b. </p>
|
|
493
|
+
<p class="example"><strong>Пример:</strong> следование(True, False) вернёт False. Для эквивалентности используйте a == b.</p><p><strong>Как выбрать:</strong> Для полной таблицы — таблица_истинности. Для перестановки столбцов и пропусков — определить_столбцы_таблицы. Пропуски обозначайте None, не нулём; отдельно проверьте требование разных строк.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
494
|
+
print(следование(True, False))</code></pre><p>Ожидаемый вывод:</p><pre>False</pre></details></article>
|
|
495
|
+
<article id="words" data-name="words" data-y26='[8]' data-y27='[8]'>
|
|
496
|
+
<h3>слова_алфавита</h3><p class="muted">Английское имя: <code>words</code></p><div class="tags" data-tags></div>
|
|
497
|
+
<pre><code>слова_алфавита(alphabet, length)</code></pre><p>Ленивый перебор слов с повторениями в порядке заданного alphabet. </p>
|
|
498
|
+
<p class="example"><strong>Пример:</strong> list(слова_алфавита('АБ',2)) == ['АА','АБ','БА','ББ'].</p><p><strong>Как выбрать:</strong> Нужны слова с повторениями — слова_алфавита/количество_слов; без повторов заданных букв — различные_перестановки. Для номера в полном списке слов — номер_слова или слово_по_номеру. Порядок алфавита задаёт условие, не Unicode.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
499
|
+
print(list(слова_алфавита('АБ', 2)))</code></pre><p>Ожидаемый вывод:</p><pre>['АА', 'АБ', 'БА', 'ББ']</pre></details></article>
|
|
500
|
+
<article id="word_at" data-name="word_at" data-y26='[8]' data-y27='[8]'>
|
|
501
|
+
<h3>слово_по_номеру</h3><p class="muted">Английское имя: <code>word_at</code></p><div class="tags" data-tags></div>
|
|
502
|
+
<pre><code>слово_по_номеру(rank, alphabet, length)</code></pre><p>Слово по номеру rank с 1; обратная к номер_слова. </p>
|
|
503
|
+
<p class="example"><strong>Пример:</strong> слово_по_номеру(3,'АБ',2) == 'БА'.</p><p><strong>Как выбрать:</strong> Нужны слова с повторениями — слова_алфавита/количество_слов; без повторов заданных букв — различные_перестановки. Для номера в полном списке слов — номер_слова или слово_по_номеру. Порядок алфавита задаёт условие, не Unicode.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
504
|
+
print(слово_по_номеру(3, 'АБ', 2))</code></pre><p>Ожидаемый вывод:</p><pre>БА</pre></details></article>
|
|
505
|
+
<article id="join_tables" data-name="join_tables" data-y26='[3]' data-y27='[3]'>
|
|
506
|
+
<h3>соединить_таблицы</h3><p class="muted">Английское имя: <code>join_tables</code></p><div class="tags" data-tags></div>
|
|
507
|
+
<pre><code>соединить_таблицы(left, right, left_key, right_key)</code></pre><p>Внутреннее соединение списков словарей по ключам; результат — пары (левая_строка, правая_строка). Дубликаты дают все сочетания. </p>
|
|
508
|
+
<p class="example"><strong>Пример:</strong> соединить_таблицы([{'id':1}], [{'ref':1}], 'id', 'ref').</p><p><strong>Как выбрать:</strong> Сначала прочитайте нужные листы XLSX/ODS или CSV, затем соедините таблицы по ключам и примените условия. Проверяйте дубликаты ключей, числовые типы и единицы. Формулы в XLSX/ODS не пересчитываются.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
509
|
+
print(соединить_таблицы([{'id':1}], [{'ref':1}], 'id', 'ref'))</code></pre><p>Ожидаемый вывод:</p><pre>[({'id': 1}, {'ref': 1})]</pre></details></article>
|
|
510
|
+
<article id="mask_matches" data-name="mask_matches" data-y26='[25]' data-y27='[25]'>
|
|
511
|
+
<h3>соответствует_маске</h3><p class="muted">Английское имя: <code>mask_matches</code></p><div class="tags" data-tags></div>
|
|
512
|
+
<pre><code>соответствует_маске(n, mask)</code></pre><p>Соответствие неотрицательного числа десятичной маске: ? — ровно одна цифра, * — любая последовательность, включая пустую. Другие символы запрещены. </p>
|
|
513
|
+
<p class="example"><strong>Пример:</strong> соответствует_маске(12345,'1?3*') == True.</p><p><strong>Как выбрать:</strong> Немного отдельных чисел — делители/разложить_на_простые. Много чисел до общей границы — решето_простых. Маска и делимость — кратные_по_маске. При огромной границе и малом делителе перебор кратных может быть слишком медленным.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
514
|
+
print(соответствует_маске(12345, '1?3*'))</code></pre><p>Ожидаемый вывод:</p><pre>True</pre></details></article>
|
|
515
|
+
<article id="match_graphs" data-name="match_graphs" data-y26='[1]' data-y27='[1]'>
|
|
516
|
+
<h3>сопоставить_вершины_графов</h3><p class="muted">Английское имя: <code>match_graphs</code></p><div class="tags" data-tags></div>
|
|
517
|
+
<pre><code>сопоставить_вершины_графов(graph, numbered, compare_weights=False)</code></pre><p>Все соответствия вершин двух графов (списки словарей смежности с весами). Учитывает направление; по умолчанию сопоставляет только наличие рёбер (для №1), compare_weights=True дополнительно требует одинаковых весов. Все вершины, включая изолированные, должны быть ключами обоих словарей. Полный перебор n!, подходит небольшим графам. </p>
|
|
518
|
+
<p class="example"><strong>Пример:</strong> сопоставить_вершины_графов({'A':{'B':1},'B':{'A':1}}, {1:{2:1},2:{1:1}}).</p><p><strong>Как выбрать:</strong> Если нужно сопоставить буквы и номера, выбирайте сопоставить_вершины_графов. Для расстояний — кратчайшие_расстояния. Сопоставление перебирает n! вариантов и подходит только небольшим графам; укажите все вершины.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
519
|
+
print(сопоставить_вершины_графов({'A':{'B':1},'B':{}}, {1:{2:7},2:{}}))</code></pre><p>Ожидаемый вывод:</p><pre>[{'A': 1, 'B': 2}]</pre></details></article>
|
|
520
|
+
<article id="adjacent_windows" data-name="adjacent_windows" data-y26='[17]' data-y27='[17]'>
|
|
521
|
+
<h3>соседние_группы</h3><p class="muted">Английское имя: <code>adjacent_windows</code></p><div class="tags" data-tags></div>
|
|
522
|
+
<pre><code>соседние_группы(data, width, predicate)</code></pre><p>Подходящие последовательные окна: список (индекс_с_0, кортеж_значений). </p>
|
|
523
|
+
<p class="example"><strong>Пример:</strong> соседние_группы([1,2,3],2,lambda w:sum(w)>3). В отличие от всех пар берёт только соседние элементы.</p><p><strong>Как выбрать:</strong> Для СОСЕДНИХ пар/троек — статистика_соседних_групп или соседние_группы, ширина 2 или 3. Для ЛЮБЫХ пар — количество_пар_по_остатку либо свой алгоритм. Порог по всему файлу вычисляйте до обработки групп, условие «ровно один» не заменяйте «хотя бы один».</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
524
|
+
print(соседние_группы([1,2,3], 2, lambda w:sum(w)>3))</code></pre><p>Ожидаемый вывод:</p><pre>[(1, (2, 3))]</pre></details></article>
|
|
525
|
+
<article id="man" data-name="man" data-y26='[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]' data-y27='[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]'>
|
|
526
|
+
<h3>справка</h3><p class="muted">Английское имя: <code>man</code></p><div class="tags" data-tags></div>
|
|
527
|
+
<pre><code>справка(функция=None, *, задание=None, год=2026, поиск=None, листать=False, по_заданиям=True, исходник=False)</code></pre><p>Справочник EGEKit в терминале: назначение, сигнатура, параметры, пример и номера заданий.
|
|
528
|
+
|
|
529
|
+
функция — объект функции либо её русское/английское имя строкой.
|
|
530
|
+
Без функции выводится список с краткими описаниями. Целое число первым
|
|
531
|
+
аргументом означает номер задания. задание и год фильтруют список;
|
|
532
|
+
поиск ищет текст в именах и описаниях; по_заданиям=True группирует список
|
|
533
|
+
по номерам 1–27 с названиями тем (режим по умолчанию).
|
|
534
|
+
по_заданиям=False включает алфавитный список. Каждый пункт показывает номера
|
|
535
|
+
заданий для выбранного года; листать=True открывает системный
|
|
536
|
+
просмотрщик через pydoc.pager (выход обычно клавишей q).
|
|
537
|
+
По умолчанию справка просто печатается, не требует действий и возвращает None.
|
|
538
|
+
исходник=True добавляет настоящий код выбранной функции.
|
|
539
|
+
Примеры и их результаты хранятся в справке; вызов справка их не исполняет.
|
|
540
|
+
Ничего не выполняет из переданной строки: имена берутся только из каталога.
|
|
541
|
+
|
|
542
|
+
</p>
|
|
543
|
+
<p class="example"><strong>Пример:</strong>
|
|
544
|
+
справка() # Функции по заданиям от №1 до №27
|
|
545
|
+
справка(по_заданиям=False) # Алфавитный список
|
|
546
|
+
справка(по_заданиям=True) # Группы по заданиям 1–27
|
|
547
|
+
справка(делители) # Подробная справка и проверенный результат
|
|
548
|
+
справка(делители, исходник=True) # Справка вместе с настоящим кодом
|
|
549
|
+
справка('делители') # То же по строковому имени
|
|
550
|
+
справка('делители') # Английское имя тоже подходит
|
|
551
|
+
справка(17) # Функции задания 17
|
|
552
|
+
справка(задание=10, год=2027) # Номер по проекту 2027
|
|
553
|
+
справка(поиск='простые') # Поиск в справочнике
|
|
554
|
+
справка('делители', листать=True) # Постраничный просмотр</p><p><strong>Как выбрать:</strong> man(номер) показывает выбор алгоритма и учебный пример. man(функция) показывает вызов и результат. man(функция, исходник=True) добавляет настоящую реализацию. Для копируемого решения — шаблон(номер).</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
555
|
+
man(делители)</code></pre><p>Ожидаемый вывод (выдержка):</p><pre>НАЗВАНИЕ
|
|
556
|
+
делители (английское имя: divisors)</pre></details></article>
|
|
557
|
+
<article id="centroid" data-name="centroid" data-y26='[27]' data-y27='[27]'>
|
|
558
|
+
<h3>среднее_координат</h3><p class="muted">Английское имя: <code>centroid</code></p><div class="tags" data-tags></div>
|
|
559
|
+
<pre><code>среднее_координат(points)</code></pre><p>Среднее арифметическое координат; обычно не совпадает с точкой исходного набора. </p>
|
|
560
|
+
<p class="example"><strong>Пример:</strong> среднее_координат([(0,0),(2,4)]) == (1.0,2.0). Не заменяет медоид.</p><p><strong>Как выбрать:</strong> Считает среднее арифметическое координат. Оно может не быть точкой набора и не минимизирует сумму обычных расстояний. Для медоида нужна центр_по_сумме_расстояний.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
561
|
+
print(среднее_координат([(0,0),(2,4)]))</code></pre><p>Ожидаемый вывод:</p><pre>(1.0, 2.0)</pre></details></article>
|
|
562
|
+
<article id="scaled_center_mean" data-name="scaled_center_mean" data-y26='[27]' data-y27='[27]'>
|
|
563
|
+
<h3>среднее_центров_с_масштабом</h3><p class="muted">Английское имя: <code>scaled_center_mean</code></p><div class="tags" data-tags></div>
|
|
564
|
+
<pre><code>среднее_центров_с_масштабом(centers, scale=10000, rounding='trunc')</code></pre><p>Среднее координат центров, умноженное на scale. rounding='trunc' отбрасывает дробную часть к нулю, 'floor' округляет вниз, 'round' использует Python round. </p>
|
|
565
|
+
<p class="example"><strong>Пример:</strong> среднее_центров_с_масштабом([(1,2),(3,4)]) == (20000,30000). Модуль/порядок координат задавайте по условию отдельно.</p><p><strong>Как выбрать:</strong> Для геометрических кластеров сначала обоснуйте разделение. кластеры_по_расстоянию строит компоненты близости, кластеры_по_средним ищет локальное разбиение. Центр по сумме расстояний — медоид, не среднее координат. Методы остатков/кольца относятся к отдельным старым и тренировочным типам. Медоид O(n²) может быть медленным.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
566
|
+
print(среднее_центров_с_масштабом([(1,2),(3,4)]))</code></pre><p>Ожидаемый вывод:</p><pre>(20000, 30000)</pre></details></article>
|
|
567
|
+
<article id="adjacent_summary" data-name="adjacent_summary" data-y26='[17]' data-y27='[17]'>
|
|
568
|
+
<h3>статистика_соседних_групп</h3><p class="muted">Английское имя: <code>adjacent_summary</code></p><div class="tags" data-tags></div>
|
|
569
|
+
<pre><code>статистика_соседних_групп(data, width, predicate, score=sum)</code></pre><p>Количество подходящих соседних окон и минимум/максимум score(window); None при отсутствии. </p>
|
|
570
|
+
<p class="example"><strong>Пример:</strong> статистика_соседних_групп([1,2,3],2,lambda w:True) == {'count':2,'min':3,'max':5}.</p><p><strong>Как выбрать:</strong> Для СОСЕДНИХ пар/троек — статистика_соседних_групп или соседние_группы, ширина 2 или 3. Для ЛЮБЫХ пар — количество_пар_по_остатку либо свой алгоритм. Порог по всему файлу вычисляйте до обработки групп, условие «ровно один» не заменяйте «хотя бы один».</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
571
|
+
print(статистика_соседних_групп([1,2,3], 2, lambda w:True))</code></pre><p>Ожидаемый вывод:</p><pre>{'count': 2, 'min': 3, 'max': 5}</pre></details></article>
|
|
572
|
+
<article id="circular_costs" data-name="circular_costs" data-y26='[27]' data-y27='[27]'>
|
|
573
|
+
<h3>стоимости_на_кольце</h3><p class="muted">Английское имя: <code>circular_costs</code></p><div class="tags" data-tags></div>
|
|
574
|
+
<pre><code>стоимости_на_кольце(weights)</code></pre><p>Стоимость пункта в каждой позиции равномерно размеченного кольца: sum(weights[j]*min(|i-j|,n-|i-j|)). O(n) через префиксы, n>=1. </p>
|
|
575
|
+
<p class="example"><strong>Пример:</strong> стоимости_на_кольце([1,0,0,0]) == [0,1,2,1]. Умножьте на физический шаг между позициями.</p><p><strong>Как выбрать:</strong> Для геометрических кластеров сначала обоснуйте разделение. кластеры_по_расстоянию строит компоненты близости, кластеры_по_средним ищет локальное разбиение. Центр по сумме расстояний — медоид, не среднее координат. Методы остатков/кольца относятся к отдельным старым и тренировочным типам. Медоид O(n²) может быть медленным.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
576
|
+
print(стоимости_на_кольце([1,0,0,0]))</code></pre><p>Ожидаемый вывод:</p><pre>[0, 1, 2, 1]</pre></details></article>
|
|
577
|
+
<article id="grid_path_extremes" data-name="grid_path_extremes" data-y26='[18]' data-y27='[18]'>
|
|
578
|
+
<h3>суммы_путей_робота</h3><p class="muted">Английское имя: <code>grid_path_extremes</code></p><div class="tags" data-tags></div>
|
|
579
|
+
<pre><code>суммы_путей_робота(grid, moves=((1, 0), (0, 1)), blocked=None)</code></pre><p>Минимальная и максимальная сумма пути из верхней левой в нижнюю правую клетку, включая обе. None — стена. moves допускает только сдвиги вниз/вправо без (0,0). Возвращает (None,None), если пути нет. </p>
|
|
580
|
+
<p class="example"><strong>Пример:</strong> суммы_путей_робота([[1,2],[3,4]]) == (7,8). Стены между клетками моделируйте отдельно графом.</p><p><strong>Как выбрать:</strong> суммы_путей_робота подходит для прямоугольной таблицы и монотонных движений вниз/вправо. None блокирует клетку целиком. Стена между клетками, повторные посещения и иные правила требуют графа/другой динамики.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
581
|
+
print(суммы_путей_робота([[1,2],[3,4]]))</code></pre><p>Ожидаемый вывод:</p><pre>(7, 8)</pre></details></article>
|
|
582
|
+
<article id="truth_table" data-name="truth_table" data-y26='[2]' data-y27='[2]'>
|
|
583
|
+
<h3>таблица_истинности</h3><p class="muted">Английское имя: <code>truth_table</code></p><div class="tags" data-tags></div>
|
|
584
|
+
<pre><code>таблица_истинности(variables, predicate)</code></pre><p>Полная таблица истинности. variables — строка/список имён; predicate получает именованные аргументы. Результат: словари с полем F. </p>
|
|
585
|
+
<p class="example"><strong>Пример:</strong> таблица_истинности('xy', lambda x,y: x and not y).</p><p><strong>Как выбрать:</strong> Для полной таблицы — таблица_истинности. Для перестановки столбцов и пропусков — определить_столбцы_таблицы. Пропуски обозначайте None, не нулём; отдельно проверьте требование разных строк.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
586
|
+
print(таблица_истинности('xy', lambda x,y: x and not y))</code></pre><p>Ожидаемый вывод:</p><pre>[{'x': 0, 'y': 0, 'F': 0}, {'x': 0, 'y': 1, 'F': 0}, {'x': 1, 'y': 0, 'F': 1}, {'x': 1, 'y': 1, 'F': 0}]</pre></details></article>
|
|
587
|
+
<article id="docx_text" data-name="docx_text" data-y26='[10]' data-y27='[]'>
|
|
588
|
+
<h3>текст_из_docx</h3><p class="muted">Английское имя: <code>docx_text</code></p><div class="tags" data-tags></div>
|
|
589
|
+
<pre><code>текст_из_docx(path)</code></pre><p>Извлечь текст основных абзацев и таблиц DOCX средствами stdlib, без форматирования; колонтитулы/сноски не включены. </p>
|
|
590
|
+
<p class="example"><strong>Пример:</strong> текст_из_docx('book.docx'). Для старого DOC сначала сохраните DOCX.</p><p><strong>Как выбрать:</strong> Для DOCX — текст_из_docx, затем количество_вхождений. Выберите целое слово или подстроку, регистр и пересечения. Базовое извлечение не включает колонтитулы/сноски и не моделирует весь поиск текстового редактора.</p><details><summary>Пример с ожидаемым результатом</summary><p>book.docx: один абзац «Кот и котик».</p><pre><code>from егэ import *
|
|
591
|
+
print(текст_из_docx('book.docx'))</code></pre><p>Ожидаемый вывод:</p><pre>Кот и котик</pre></details></article>
|
|
592
|
+
<article id="point_in_polygon" data-name="point_in_polygon" data-y26='[6]' data-y27='[6]'>
|
|
593
|
+
<h3>точка_в_многоугольнике</h3><p class="muted">Английское имя: <code>point_in_polygon</code></p><div class="tags" data-tags></div>
|
|
594
|
+
<pre><code>точка_в_многоугольнике(point, polygon, boundary=False, eps=1e-09)</code></pre><p>Проверить точку в простом многоугольнике методом луча; boundary включает контур. eps — допуск для вещественных координат. </p>
|
|
595
|
+
<p class="example"><strong>Пример:</strong> точка_в_многоугольнике((1,1),[(0,0),(3,0),(3,3),(0,3)]) == True.</p><p><strong>Как выбрать:</strong> Черепаха даёт вершины контура. Для простого многоугольника с целыми вершинами быстрее внутренние_точки_по_Пику. Для объединений/пересечений — целые_точки_в_фигурах. Контур, границы, самопересечения и дуги требуют отдельной проверки.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
596
|
+
print(точка_в_многоугольнике((1,1), [(0,0),(3,0),(3,3),(0,3)]))</code></pre><p>Ожидаемый вывод:</p><pre>True</pre></details></article>
|
|
597
|
+
<article id="functions_for" data-name="functions_for" data-y26='[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]' data-y27='[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]'>
|
|
598
|
+
<h3>функции_задания</h3><p class="muted">Английское имя: <code>functions_for</code></p><div class="tags" data-tags></div>
|
|
599
|
+
<pre><code>функции_задания(номер, год=2026)</code></pre><p>Русские имена функций для задания и года. </p>
|
|
600
|
+
<p class="example"><strong>Пример:</strong> функции_задания(13, год=2026).</p><p><strong>Как выбрать:</strong> Общий инструмент: выберите номер через man(номер).</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
601
|
+
print('делители' in функции_задания(25))</code></pre><p>Ожидаемый вывод:</p><pre>True</pre></details></article>
|
|
602
|
+
<article id="row_profile" data-name="row_profile" data-y26='[9]' data-y27='[9]'>
|
|
603
|
+
<h3>характеристики_строки</h3><p class="muted">Английское имя: <code>row_profile</code></p><div class="tags" data-tags></div>
|
|
604
|
+
<pre><code>характеристики_строки(row)</code></pre><p>Сводка строки: сумма, min/max (None для пустой), частоты, повторённые и одиночные значения с учётом кратности. </p>
|
|
605
|
+
<p class="example"><strong>Пример:</strong> характеристики_строки([1,2,2])['repeated'] == [2,2].</p><p><strong>Как выбрать:</strong> Применяйте характеристики_строки для частот и повторов, отобрать_строки для условия. Повторённые значения и различные повторяющиеся числа — не одно и то же. Уточните, нумеруются ли строки с заголовком.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
606
|
+
print(характеристики_строки([1,2,2])['repeated'])</code></pre><p>Ожидаемый вывод:</p><pre>[2, 2]</pre></details></article>
|
|
607
|
+
<article id="lattice_points" data-name="lattice_points" data-y26='[6]' data-y27='[6]'>
|
|
608
|
+
<h3>целые_точки_в_фигурах</h3><p class="muted">Английское имя: <code>lattice_points</code></p><div class="tags" data-tags></div>
|
|
609
|
+
<pre><code>целые_точки_в_фигурах(polygons, mode='intersection', boundary=False, max_candidates=2000000)</code></pre><p>Целочисленные точки внутри пересечения/объединения простых многоугольников, mode='intersection'/'union'. boundary включает границы. Возвращает координаты, не только количество. Перебор ограничен max_candidates. </p>
|
|
610
|
+
<p class="example"><strong>Пример:</strong> len(целые_точки_в_фигурах([[(0,0),(3,0),(3,3),(0,3)]])) == 4.</p><p><strong>Как выбрать:</strong> Черепаха даёт вершины контура. Для простого многоугольника с целыми вершинами быстрее внутренние_точки_по_Пику. Для объединений/пересечений — целые_точки_в_фигурах. Контур, границы, самопересечения и дуги требуют отдельной проверки.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
611
|
+
print(len(целые_точки_в_фигурах([[(0,0),(3,0),(3,3),(0,3)]])))</code></pre><p>Ожидаемый вывод:</p><pre>4</pre></details></article>
|
|
612
|
+
<article id="median_item" data-name="median_item" data-y26='[27]' data-y27='[27]'>
|
|
613
|
+
<h3>центр_по_медиане_признака</h3><p class="muted">Английское имя: <code>median_item</code></p><div class="tags" data-tags></div>
|
|
614
|
+
<pre><code>центр_по_медиане_признака(items, key)</code></pre><p>Элемент, минимизирующий сумму абсолютных разностей одномерного признака; сортировка O(n log n). При нескольких оптимальных берёт нижнюю медиану. </p>
|
|
615
|
+
<p class="example"><strong>Пример:</strong> центр_по_медиане_признака([9,1,2],lambda x:x)==2. Для энергий: key=lambda p:p['energy'].</p><p><strong>Как выбрать:</strong> Выбирает медиану одномерного признака и минимизирует сумму абсолютных разностей. Подходит энергии, если так задано условием. При нескольких решениях возвращает нижнюю медиану.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
616
|
+
print(центр_по_медиане_признака([9,1,2], lambda x:x))</code></pre><p>Ожидаемый вывод:</p><pre>2</pre></details></article>
|
|
617
|
+
<article id="medoid" data-name="medoid" data-y26='[27]' data-y27='[27]'>
|
|
618
|
+
<h3>центр_по_сумме_расстояний</h3><p class="muted">Английское имя: <code>medoid</code></p><div class="tags" data-tags></div>
|
|
619
|
+
<pre><code>центр_по_сумме_расстояний(points)</code></pre><p>Точка набора с минимальной суммой евклидовых расстояний до остальных. Точный O(n²), O(n) памяти; при равенстве первая во входе. </p>
|
|
620
|
+
<p class="example"><strong>Пример:</strong> центр_по_сумме_расстояний([(0,0),(1,0),(10,0)]) == (1,0). На очень больших кластерах может работать долго.</p><p><strong>Как выбрать:</strong> Возвращает исходную точку с минимальной суммой евклидовых расстояний. Среднее координат не эквивалентно; точный перебор O(n²). Для одномерной энергии используйте центр_по_медиане_признака.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
621
|
+
print(центр_по_сумме_расстояний([(0,0),(1,0),(10,0)]))</code></pre><p>Ожидаемый вывод:</p><pre>(1, 0)</pre></details></article>
|
|
622
|
+
<article id="cluster_centers" data-name="cluster_centers" data-y26='[27]' data-y27='[27]'>
|
|
623
|
+
<h3>центры_кластеров</h3><p class="muted">Английское имя: <code>cluster_centers</code></p><div class="tags" data-tags></div>
|
|
624
|
+
<pre><code>центры_кластеров(clusters, method='medoid')</code></pre><p>Центры непустых кластеров: method='центр_по_сумме_расстояний' или 'среднее_координат'. </p>
|
|
625
|
+
<p class="example"><strong>Пример:</strong> центры_кластеров([[(0,0),(1,0),(9,0)]]) == [(1,0)]. Выбирайте определение центра строго по условию.</p><p><strong>Как выбрать:</strong> Для геометрических кластеров сначала обоснуйте разделение. кластеры_по_расстоянию строит компоненты близости, кластеры_по_средним ищет локальное разбиение. Центр по сумме расстояний — медоид, не среднее координат. Методы остатков/кольца относятся к отдельным старым и тренировочным типам. Медоид O(n²) может быть медленным.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
626
|
+
print(центры_кластеров([[(0,0),(1,0),(9,0)]]))</code></pre><p>Ожидаемый вывод:</p><pre>[(1, 0)]</pre></details></article>
|
|
627
|
+
<article id="base_digits" data-name="base_digits" data-y26='[14]' data-y27='[14]'>
|
|
628
|
+
<h3>цифры_числа</h3><p class="muted">Английское имя: <code>base_digits</code></p><div class="tags" data-tags></div>
|
|
629
|
+
<pre><code>цифры_числа(n, base)</code></pre><p>Цифры неотрицательного числа списком, от старшей к младшей; допускает основания больше 36. </p>
|
|
630
|
+
<p class="example"><strong>Пример:</strong> цифры_числа(10,3) == [1,0,1].</p><p><strong>Как выбрать:</strong> Для записи числа в основании до 36 — перевести_в_систему. Для оснований больше 36 — цифры_числа. Неизвестную цифру перебирайте только среди допустимых для основания; ведущий ноль проверьте отдельно.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
631
|
+
print(цифры_числа(10, 3))</code></pre><p>Ожидаемый вывод:</p><pre>[1, 0, 1]</pre></details></article>
|
|
632
|
+
<article id="task_template" data-name="task_template" data-y26='[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]' data-y27='[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]'>
|
|
633
|
+
<h3>шаблон</h3><p class="muted">Английское имя: <code>task_template</code></p><div class="tags" data-tags></div>
|
|
634
|
+
<pre><code>шаблон(номер, *, год=2026, текст=False)</code></pre><p>Самостоятельная учебная заготовка решения для задания 1–27.
|
|
635
|
+
|
|
636
|
+
номер — целое от 1 до 27; год — 2026 или 2027 (проект).
|
|
637
|
+
По умолчанию печатает Python-код и возвращает None.
|
|
638
|
+
текст=True возвращает код строкой без печати: удобно копировать/сохранять.
|
|
639
|
+
Шаблон использует маленькие встроенные данные; замените их и правила
|
|
640
|
+
конкретной задачей. Файлы и сеть не читаются, шаблон не исполняется.
|
|
641
|
+
Ожидаемый результат этого примера доступен через справка(номер, год=год).
|
|
642
|
+
|
|
643
|
+
</p>
|
|
644
|
+
<p class="example"><strong>Пример:</strong>
|
|
645
|
+
шаблон(17)
|
|
646
|
+
код_решения = шаблон(23, год=2027, текст=True)
|
|
647
|
+
print(код_решения)</p><p><strong>Как выбрать:</strong> Это рабочая заготовка на маленьких учебных данных, не ответ на произвольный вариант. Замените данные и условия. шаблон(17, текст=True) вернёт строку для сохранения; обычный вызов её печатает.</p><details><summary>Пример с ожидаемым результатом</summary><pre><code>from егэ import *
|
|
648
|
+
print(шаблон(17, текст=True).splitlines()[0])</code></pre><p>Ожидаемый вывод:</p><pre># Задание №17, 2026</pre></details></article></div><p id="empty" hidden>Функций с такими условиями не найдено. Попробуйте другое слово или номер.</p>
|
|
649
|
+
<h2>Проверки и источники</h2><p>30 автоматических тестовых методов, в том числе сотни случайных сравнений с полным перебором. На файлах демоверсии 2027 совпали официальные ответы №22, №23, №24, №26 и №27. Это проверка конкретных алгоритмов и данных, а не доказательство универсальной применимости.</p><p>ФИПИ: <a href="https://fipi.ru/ege/demoversii-specifikacii-kodifikatory">демоверсии, спецификации, кодификаторы</a>. Проверено 18.10.2026. Изменения 2027 приведены по опубликованному проекту.</p><p class="muted">Исходный код — egekit.py · Полные примеры — examples_ru.py · Текстовая версия — GUIDE.md · Проверки — VALIDATION.md. Страница работает без интернета.</p></main>
|
|
650
|
+
<script>
|
|
651
|
+
const cards=[...document.querySelectorAll('article')], search=document.querySelector('#search'), year=document.querySelector('#year'), task=document.querySelector('#task');
|
|
652
|
+
function filter(){let shown=0;const q=search.value.trim().toLocaleLowerCase('ru');for(const card of cards){const tags=JSON.parse(card.dataset['y'+year.value]);card.querySelector('[data-tags]').textContent='Номера '+(year.value==='26'?'2026':'проекта 2027')+': '+(tags.length?tags.join(', '):'историческая функция');const visible=(!q||card.textContent.toLocaleLowerCase('ru').includes(q))&&(!task.value||tags.includes(Number(task.value)));card.hidden=!visible;if(visible)shown++;}document.querySelector('#count').textContent=shown+' из '+cards.length+' функций';document.querySelector('#empty').hidden=shown>0;}
|
|
653
|
+
search.addEventListener('input',filter);year.addEventListener('change',filter);task.addEventListener('change',filter);filter();
|
|
654
|
+
</script></html>
|