egekit-study 1.2.1__tar.gz → 1.2.2__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.
Files changed (24) hide show
  1. {egekit_study-1.2.1 → egekit_study-1.2.2}/GUIDE.html +7 -5
  2. {egekit_study-1.2.1 → egekit_study-1.2.2}/GUIDE.md +6 -4
  3. {egekit_study-1.2.1 → egekit_study-1.2.2}/PKG-INFO +8 -7
  4. {egekit_study-1.2.1 → egekit_study-1.2.2}/README.md +7 -6
  5. {egekit_study-1.2.1 → egekit_study-1.2.2}/RUSSIAN_NAMES.md +1 -1
  6. {egekit_study-1.2.1 → egekit_study-1.2.2}/VALIDATION.md +8 -1
  7. {egekit_study-1.2.1 → egekit_study-1.2.2}/build_docs.py +2 -2
  8. {egekit_study-1.2.1 → egekit_study-1.2.2}/egekit.py +7 -5
  9. {egekit_study-1.2.1 → egekit_study-1.2.2}/egekit_study.egg-info/PKG-INFO +8 -7
  10. {egekit_study-1.2.1 → egekit_study-1.2.2}/pyproject.toml +1 -1
  11. {egekit_study-1.2.1 → egekit_study-1.2.2}/tests/test_manual.py +8 -1
  12. {egekit_study-1.2.1 → egekit_study-1.2.2}/LICENSE +0 -0
  13. {egekit_study-1.2.1 → egekit_study-1.2.2}/MANIFEST.in +0 -0
  14. {egekit_study-1.2.1 → egekit_study-1.2.2}/egekit_study.egg-info/SOURCES.txt +0 -0
  15. {egekit_study-1.2.1 → egekit_study-1.2.2}/egekit_study.egg-info/dependency_links.txt +0 -0
  16. {egekit_study-1.2.1 → egekit_study-1.2.2}/egekit_study.egg-info/top_level.txt +0 -0
  17. {egekit_study-1.2.1 → egekit_study-1.2.2}/examples.py +0 -0
  18. {egekit_study-1.2.1 → egekit_study-1.2.2}/examples_man.py +0 -0
  19. {egekit_study-1.2.1 → egekit_study-1.2.2}/examples_ru.py +0 -0
  20. {egekit_study-1.2.1 → egekit_study-1.2.2}/setup.cfg +0 -0
  21. {egekit_study-1.2.1 → egekit_study-1.2.2}/tests/test_egekit.py +0 -0
  22. {egekit_study-1.2.1 → egekit_study-1.2.2}/tests/test_russian_names.py +0 -0
  23. {egekit_study-1.2.1 → egekit_study-1.2.2}/verify_official.py +0 -0
  24. {egekit_study-1.2.1 → egekit_study-1.2.2}//320/265/320/263/321/215.py" +0 -0
@@ -4,14 +4,14 @@
4
4
  :root{color-scheme:light;--ink:#172a3a;--blue:#075c80;--line:#dbe5ea;--pale:#edf5f8}
5
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
6
  </style>
7
- <header><div class="eyebrow">Python 3.10+ · версия 1.2.1 · без зависимостей</div><h1>EGEKit<br>112 функций для подготовки к ЕГЭ</h1><p>Учебная библиотека Python 3.10+ без внешних зависимостей. 112 функций для тем всех 27 номеров. Это инструменты и шаблоны: условие, диапазон и критерий проверки переносите из конкретной задачи. Автоматического решения любой формулировки и гарантии всех будущих подтипов здесь нет. Все функции доступны под понятными русскими именами; английские варианты также работают.</p><a href="#catalog">Перейти к справочнику ↓</a></header>
7
+ <header><div class="eyebrow">Python 3.10+ · версия 1.2.2 · без зависимостей</div><h1>EGEKit<br>112 функций для подготовки к ЕГЭ</h1><p>Учебная библиотека Python 3.10+ без внешних зависимостей. 112 функций для тем всех 27 номеров. Это инструменты и шаблоны: условие, диапазон и критерий проверки переносите из конкретной задачи. Автоматического решения любой формулировки и гарантии всех будущих подтипов здесь нет. Все функции доступны под понятными русскими именами; английские варианты также работают.</p><a href="#catalog">Перейти к справочнику ↓</a></header>
8
8
  <main class="wrap"><section class="intro"><h2 style="margin-top:0">Начало работы</h2><p>Положите <code>egekit.py</code> и <code>егэ.py</code> рядом со своим <code>solution.py</code> либо установите пакет egekit-study версии 1.2.0 и новее. Установка не нужна. Запустите <code>python solution.py</code> в терминале этой папки. Полная инструкция — в README.md.</p><pre><code>from егэ import *
9
9
 
10
10
  print(делители(120))
11
11
  print(перевести_в_систему(125, 3))
12
12
  man(делители) # Назначение, параметры и пример
13
13
  man(17) # Функции для задания 17
14
- man(по_заданиям=True) # Сгруппировать по номерам
14
+ man(по_заданиям=False) # При необходимости — алфавитный список
15
15
  man(поиск=&#x27;простые&#x27;) # Поиск в справочнике
16
16
  </code></pre><p>Примеры по всем номерам: <code>python examples_ru.py</code>. Отдельный номер: <code>python examples_ru.py --year 2027 23</code>.</p></section>
17
17
  <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>
@@ -404,13 +404,14 @@ man(поиск=&#x27;простые&#x27;) # Поиск в справ
404
404
  <p class="example"><strong>Пример:</strong> соседние_группы([1,2,3],2,lambda w:sum(w)&gt;3). В отличие от всех пар берёт только соседние элементы.</p></article>
405
405
  <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]'>
406
406
  <h3>справка</h3><p class="muted">Английское имя: <code>man</code></p><div class="tags" data-tags></div>
407
- <pre><code>справка(функция=None, *, задание=None, год=2026, поиск=None, листать=False, по_заданиям=False)</code></pre><p>Справочник EGEKit в терминале: назначение, сигнатура, параметры, пример и номера заданий.
407
+ <pre><code>справка(функция=None, *, задание=None, год=2026, поиск=None, листать=False, по_заданиям=True)</code></pre><p>Справочник EGEKit в терминале: назначение, сигнатура, параметры, пример и номера заданий.
408
408
 
409
409
  функция — объект функции либо её русское/английское имя строкой.
410
410
  Без функции выводится список с краткими описаниями. Целое число первым
411
411
  аргументом означает номер задания. задание и год фильтруют список;
412
412
  поиск ищет текст в именах и описаниях; по_заданиям=True группирует список
413
- по номерам 1–27 с названиями тем. Каждый пункт списка показывает номера
413
+ по номерам 1–27 с названиями тем (режим по умолчанию).
414
+ по_заданиям=False включает алфавитный список. Каждый пункт показывает номера
414
415
  заданий для выбранного года; листать=True открывает системный
415
416
  просмотрщик через pydoc.pager (выход обычно клавишей q).
416
417
  По умолчанию справка просто печатается, не требует действий и возвращает None.
@@ -418,7 +419,8 @@ man(поиск=&#x27;простые&#x27;) # Поиск в справ
418
419
 
419
420
  </p>
420
421
  <p class="example"><strong>Пример:</strong>
421
- справка() # Все функции с описаниями и номерами
422
+ справка() # Функции по заданиям от №1 до №27
423
+ справка(по_заданиям=False) # Алфавитный список
422
424
  справка(по_заданиям=True) # Группы по заданиям 1–27
423
425
  справка(делители) # Подробная справка о функции
424
426
  справка(&#x27;делители&#x27;) # То же по строковому имени
@@ -13,7 +13,7 @@ print(делители(120))
13
13
  print(перевести_в_систему(125, 3))
14
14
  man(делители) # Назначение, параметры и пример
15
15
  man(17) # Функции для задания 17
16
- man(по_заданиям=True) # Сгруппировать по номерам
16
+ man(по_заданиям=False) # При необходимости — алфавитный список
17
17
  man(поиск='простые') # Поиск в справочнике
18
18
 
19
19
  ```
@@ -1225,7 +1225,7 @@ FCFS-очередь к одинаковым серверам. arrivals — (пр
1225
1225
  ### справка
1226
1226
 
1227
1227
  ```python
1228
- справка(функция=None, *, задание=None, год=2026, поиск=None, листать=False, по_заданиям=False)
1228
+ справка(функция=None, *, задание=None, год=2026, поиск=None, листать=False, по_заданиям=True)
1229
1229
  ```
1230
1230
 
1231
1231
  Английское имя: `man`.
@@ -1238,14 +1238,16 @@ FCFS-очередь к одинаковым серверам. arrivals — (пр
1238
1238
  Без функции выводится список с краткими описаниями. Целое число первым
1239
1239
  аргументом означает номер задания. задание и год фильтруют список;
1240
1240
  поиск ищет текст в именах и описаниях; по_заданиям=True группирует список
1241
- по номерам 1–27 с названиями тем. Каждый пункт списка показывает номера
1241
+ по номерам 1–27 с названиями тем (режим по умолчанию).
1242
+ по_заданиям=False включает алфавитный список. Каждый пункт показывает номера
1242
1243
  заданий для выбранного года; листать=True открывает системный
1243
1244
  просмотрщик через pydoc.pager (выход обычно клавишей q).
1244
1245
  По умолчанию справка просто печатается, не требует действий и возвращает None.
1245
1246
  Ничего не выполняет из переданной строки: имена берутся только из каталога.
1246
1247
 
1247
1248
  Пример:
1248
- справка() # Все функции с описаниями и номерами
1249
+ справка() # Функции по заданиям от №1 до №27
1250
+ справка(по_заданиям=False) # Алфавитный список
1249
1251
  справка(по_заданиям=True) # Группы по заданиям 1–27
1250
1252
  справка(делители) # Подробная справка о функции
1251
1253
  справка('делители') # То же по строковому имени
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: egekit-study
3
- Version: 1.2.1
3
+ Version: 1.2.2
4
4
  Summary: Алгоритмические инструменты для подготовки к ЕГЭ по информатике
5
5
  License-Expression: MIT
6
6
  Requires-Python: >=3.10
@@ -10,7 +10,7 @@ Dynamic: license-file
10
10
 
11
11
  # EGEKit — библиотека для подготовки к ЕГЭ по информатике
12
12
 
13
- Версия 1.2.1 · Python 3.10+ · 112 функций · внешние зависимости не нужны.
13
+ Версия 1.2.2 · Python 3.10+ · 112 функций · внешние зависимости не нужны.
14
14
 
15
15
  Библиотека охватывает темы всех 27 номеров: логика, базы данных, кодирование,
16
16
  исполнители, комбинаторика, геометрия, сети, рекурсия, игры, строки,
@@ -181,22 +181,23 @@ python -m unittest discover -s tests -v
181
181
  старых архивов. После публикации пользователи обновляют пакет через
182
182
  `python -m pip install --upgrade ИМЯ_ВАШЕГО_ПАКЕТА`.
183
183
 
184
- Готовые файлы для публикации версии 1.2.1 находятся в папке dist. После
184
+ Готовые файлы для публикации версии 1.2.2 находятся в папке dist. После
185
185
  проверки `python -m twine check dist/*` их можно загрузить командой
186
186
  `python -m twine upload dist/*`. Если меняете код, пересоберите пакет.
187
187
  После публикации обновите установленный пакет:
188
188
  `python -m pip install --upgrade egekit-study`.
189
189
 
190
- ## Номера заданий в справке: версия 1.2.1
190
+ ## Номера заданий в справке: версия 1.2.2
191
191
 
192
- `man()` теперь подписывает у каждой функции номера заданий выбранного года.
192
+ `man()` по умолчанию группирует функции по номерам от №1 до №27 и подписывает у каждой функции номера заданий выбранного года. Для алфавитного списка: `man(по_заданиям=False)`.
193
193
  `man(по_заданиям=True)` выводит группы с заголовками «ЗАДАНИЕ №1», «ЗАДАНИЕ
194
194
  №2» и так далее. Общие инструменты вынесены в отдельный раздел. Функция,
195
195
  подходящая нескольким номерам, появляется в каждой соответствующей группе.
196
196
 
197
197
  ```python
198
198
  from егэ import *
199
- man() # Алфавитный список с номерами
199
+ man() # Разделы от задания №1 до №27
200
+ man(по_заданиям=False) # Алфавитный список с номерами
200
201
  man(по_заданиям=True) # Группы по заданиям
201
202
  man(17) # Только функции для №17
202
203
  man(по_заданиям=True, год=2027) # Нумерация проекта 2027
@@ -204,4 +205,4 @@ man(по_заданиям=True, год=2027) # Нумерация проект
204
205
 
205
206
  На установленной версии 1.2.0 эти новые параметры ещё не работают.
206
207
  Для установки без ожидания обновления индекса PyPI можно установить
207
- готовый файл dist/egekit_study-1.2.1-py3-none-any.whl из этого архива.
208
+ готовый файл dist/egekit_study-1.2.2-py3-none-any.whl из этого архива.
@@ -1,6 +1,6 @@
1
1
  # EGEKit — библиотека для подготовки к ЕГЭ по информатике
2
2
 
3
- Версия 1.2.1 · Python 3.10+ · 112 функций · внешние зависимости не нужны.
3
+ Версия 1.2.2 · Python 3.10+ · 112 функций · внешние зависимости не нужны.
4
4
 
5
5
  Библиотека охватывает темы всех 27 номеров: логика, базы данных, кодирование,
6
6
  исполнители, комбинаторика, геометрия, сети, рекурсия, игры, строки,
@@ -171,22 +171,23 @@ python -m unittest discover -s tests -v
171
171
  старых архивов. После публикации пользователи обновляют пакет через
172
172
  `python -m pip install --upgrade ИМЯ_ВАШЕГО_ПАКЕТА`.
173
173
 
174
- Готовые файлы для публикации версии 1.2.1 находятся в папке dist. После
174
+ Готовые файлы для публикации версии 1.2.2 находятся в папке dist. После
175
175
  проверки `python -m twine check dist/*` их можно загрузить командой
176
176
  `python -m twine upload dist/*`. Если меняете код, пересоберите пакет.
177
177
  После публикации обновите установленный пакет:
178
178
  `python -m pip install --upgrade egekit-study`.
179
179
 
180
- ## Номера заданий в справке: версия 1.2.1
180
+ ## Номера заданий в справке: версия 1.2.2
181
181
 
182
- `man()` теперь подписывает у каждой функции номера заданий выбранного года.
182
+ `man()` по умолчанию группирует функции по номерам от №1 до №27 и подписывает у каждой функции номера заданий выбранного года. Для алфавитного списка: `man(по_заданиям=False)`.
183
183
  `man(по_заданиям=True)` выводит группы с заголовками «ЗАДАНИЕ №1», «ЗАДАНИЕ
184
184
  №2» и так далее. Общие инструменты вынесены в отдельный раздел. Функция,
185
185
  подходящая нескольким номерам, появляется в каждой соответствующей группе.
186
186
 
187
187
  ```python
188
188
  from егэ import *
189
- man() # Алфавитный список с номерами
189
+ man() # Разделы от задания №1 до №27
190
+ man(по_заданиям=False) # Алфавитный список с номерами
190
191
  man(по_заданиям=True) # Группы по заданиям
191
192
  man(17) # Только функции для №17
192
193
  man(по_заданиям=True, год=2027) # Нумерация проекта 2027
@@ -194,4 +195,4 @@ man(по_заданиям=True, год=2027) # Нумерация проект
194
195
 
195
196
  На установленной версии 1.2.0 эти новые параметры ещё не работают.
196
197
  Для установки без ожидания обновления индекса PyPI можно установить
197
- готовый файл dist/egekit_study-1.2.1-py3-none-any.whl из этого архива.
198
+ готовый файл dist/egekit_study-1.2.2-py3-none-any.whl из этого архива.
@@ -1,4 +1,4 @@
1
- # Русские названия функций EGEKit 1.2.1
1
+ # Русские названия функций EGEKit 1.2.2
2
2
 
3
3
  112 функций: 111 прежних алгоритмов и встроенная справка man/справка.
4
4
 
@@ -1,4 +1,4 @@
1
- # Проверка EGEKit 1.2.1
1
+ # Проверка EGEKit 1.2.2
2
2
 
3
3
  Дата: 18 октября 2026 года. Среда проверки: Python 3.12.14, Linux.
4
4
  Минимальная заявленная версия Python — 3.10 (отдельный запуск под 3.10 не выполнялся).
@@ -96,3 +96,10 @@ wheel установлен в отдельное чистое окружение
96
96
  Два новых тестовых метода проверяют подписи у функций для обоих годов,
97
97
  все 27 групп, отдельный раздел общих инструментов, фильтрацию по номеру,
98
98
  поиск и пустую выдачу. Всего 24 тестовых метода проходят.
99
+
100
+ ## Сортировка по умолчанию, версия 1.2.2
101
+
102
+ man() теперь эквивалентен man(по_заданиям=True). Тест проверяет числовой
103
+ порядок заголовков №1–27 и алфавитный порядок альтернативного режима
104
+ man(по_заданиям=False). Все 24 тестовых метода проходят. Алгоритмы задач
105
+ не менялись.
@@ -69,7 +69,7 @@ print(делители(120))
69
69
  print(перевести_в_систему(125, 3))
70
70
  man(делители) # Назначение, параметры и пример
71
71
  man(17) # Функции для задания 17
72
- man(по_заданиям=True) # Сгруппировать по номерам
72
+ man(по_заданиям=False) # При необходимости — алфавитный список
73
73
  man(поиск='простые') # Поиск в справочнике
74
74
  """
75
75
  notes.insert(0, 'Новый модуль: from егэ import *. После импорта используйте функции без префикса. man() показывает список, man(делители) или man("делители") — подробную справку, man(17) — функции задания 17. Синоним man — справка. Для постраничного просмотра: man(листать=True), выход обычно q.')
@@ -115,7 +115,7 @@ page='''<!doctype html><html lang="ru"><meta charset="utf-8"><meta name="viewpor
115
115
  :root{color-scheme:light;--ink:#172a3a;--blue:#075c80;--line:#dbe5ea;--pale:#edf5f8}
116
116
  *{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}}
117
117
  </style>
118
- <header><div class="eyebrow">Python 3.10+ · версия 1.2.1 · без зависимостей</div><h1>EGEKit<br>112 функций для подготовки к ЕГЭ</h1><p>INTRO</p><a href="#catalog">Перейти к справочнику ↓</a></header>
118
+ <header><div class="eyebrow">Python 3.10+ · версия 1.2.2 · без зависимостей</div><h1>EGEKit<br>112 функций для подготовки к ЕГЭ</h1><p>INTRO</p><a href="#catalog">Перейти к справочнику ↓</a></header>
119
119
  <main class="wrap"><section class="intro"><h2 style="margin-top:0">Начало работы</h2><p>Положите <code>egekit.py</code> и <code>егэ.py</code> рядом со своим <code>solution.py</code> либо установите пакет egekit-study версии 1.2.0 и новее. Установка не нужна. Запустите <code>python solution.py</code> в терминале этой папки. Полная инструкция — в README.md.</p><pre><code>QUICK</code></pre><p>Примеры по всем номерам: <code>python examples_ru.py</code>. Отдельный номер: <code>python examples_ru.py --year 2027 23</code>.</p></section>
120
120
  <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>ROWS</tbody></table></div>
121
121
  <h2>Как применять функции</h2><details><summary>Правила, ограничения и частые ошибки</summary><ul>NOTES</ul></details>
@@ -17,7 +17,7 @@ import sqlite3
17
17
  import zipfile
18
18
  import xml.etree.ElementTree as ET
19
19
 
20
- __version__ = '1.2.1'
20
+ __version__ = '1.2.2'
21
21
  CATALOG = {}
22
22
 
23
23
  def _task(*numbers):
@@ -1291,21 +1291,23 @@ __all__ = ['CATALOG', 'CATALOG_2027', 'РУССКИЕ_ИМЕНА', '__version__'
1291
1291
 
1292
1292
 
1293
1293
  @_task(*range(1, 28))
1294
- def man(функция=None, *, задание=None, год=2026, поиск=None, листать=False, по_заданиям=False):
1294
+ def man(функция=None, *, задание=None, год=2026, поиск=None, листать=False, по_заданиям=True):
1295
1295
  """Справочник EGEKit в терминале: назначение, сигнатура, параметры, пример и номера заданий.
1296
1296
 
1297
1297
  функция — объект функции либо её русское/английское имя строкой.
1298
1298
  Без функции выводится список с краткими описаниями. Целое число первым
1299
1299
  аргументом означает номер задания. задание и год фильтруют список;
1300
1300
  поиск ищет текст в именах и описаниях; по_заданиям=True группирует список
1301
- по номерам 1–27 с названиями тем. Каждый пункт списка показывает номера
1301
+ по номерам 1–27 с названиями тем (режим по умолчанию).
1302
+ по_заданиям=False включает алфавитный список. Каждый пункт показывает номера
1302
1303
  заданий для выбранного года; листать=True открывает системный
1303
1304
  просмотрщик через pydoc.pager (выход обычно клавишей q).
1304
1305
  По умолчанию справка просто печатается, не требует действий и возвращает None.
1305
1306
  Ничего не выполняет из переданной строки: имена берутся только из каталога.
1306
1307
 
1307
1308
  Пример:
1308
- man() # Все функции с описаниями и номерами
1309
+ man() # Функции по заданиям от №1 до №27
1310
+ man(по_заданиям=False) # Алфавитный список
1309
1311
  man(по_заданиям=True) # Группы по заданиям 1–27
1310
1312
  man(делители) # Подробная справка о функции
1311
1313
  man('делители') # То же по строковому имени
@@ -1440,7 +1442,7 @@ def man(функция=None, *, задание=None, год=2026, поиск=Non
1440
1442
  add_entry(name)
1441
1443
  lines.extend(['', 'Подробнее: man(делители) или man("делители")',
1442
1444
  'Поиск: man(поиск="строк") | По заданию: man(17)',
1443
- 'Группы по номерам: man(по_заданиям=True)',
1445
+ 'Алфавитный список: man(по_заданиям=False)',
1444
1446
  'Постраничный просмотр: man(листать=True)',
1445
1447
  'Номера включают смежные и вспомогательные инструменты, а не только готовые решения.'])
1446
1448
  text = '\n'.join(lines)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: egekit-study
3
- Version: 1.2.1
3
+ Version: 1.2.2
4
4
  Summary: Алгоритмические инструменты для подготовки к ЕГЭ по информатике
5
5
  License-Expression: MIT
6
6
  Requires-Python: >=3.10
@@ -10,7 +10,7 @@ Dynamic: license-file
10
10
 
11
11
  # EGEKit — библиотека для подготовки к ЕГЭ по информатике
12
12
 
13
- Версия 1.2.1 · Python 3.10+ · 112 функций · внешние зависимости не нужны.
13
+ Версия 1.2.2 · Python 3.10+ · 112 функций · внешние зависимости не нужны.
14
14
 
15
15
  Библиотека охватывает темы всех 27 номеров: логика, базы данных, кодирование,
16
16
  исполнители, комбинаторика, геометрия, сети, рекурсия, игры, строки,
@@ -181,22 +181,23 @@ python -m unittest discover -s tests -v
181
181
  старых архивов. После публикации пользователи обновляют пакет через
182
182
  `python -m pip install --upgrade ИМЯ_ВАШЕГО_ПАКЕТА`.
183
183
 
184
- Готовые файлы для публикации версии 1.2.1 находятся в папке dist. После
184
+ Готовые файлы для публикации версии 1.2.2 находятся в папке dist. После
185
185
  проверки `python -m twine check dist/*` их можно загрузить командой
186
186
  `python -m twine upload dist/*`. Если меняете код, пересоберите пакет.
187
187
  После публикации обновите установленный пакет:
188
188
  `python -m pip install --upgrade egekit-study`.
189
189
 
190
- ## Номера заданий в справке: версия 1.2.1
190
+ ## Номера заданий в справке: версия 1.2.2
191
191
 
192
- `man()` теперь подписывает у каждой функции номера заданий выбранного года.
192
+ `man()` по умолчанию группирует функции по номерам от №1 до №27 и подписывает у каждой функции номера заданий выбранного года. Для алфавитного списка: `man(по_заданиям=False)`.
193
193
  `man(по_заданиям=True)` выводит группы с заголовками «ЗАДАНИЕ №1», «ЗАДАНИЕ
194
194
  №2» и так далее. Общие инструменты вынесены в отдельный раздел. Функция,
195
195
  подходящая нескольким номерам, появляется в каждой соответствующей группе.
196
196
 
197
197
  ```python
198
198
  from егэ import *
199
- man() # Алфавитный список с номерами
199
+ man() # Разделы от задания №1 до №27
200
+ man(по_заданиям=False) # Алфавитный список с номерами
200
201
  man(по_заданиям=True) # Группы по заданиям
201
202
  man(17) # Только функции для №17
202
203
  man(по_заданиям=True, год=2027) # Нумерация проекта 2027
@@ -204,4 +205,4 @@ man(по_заданиям=True, год=2027) # Нумерация проект
204
205
 
205
206
  На установленной версии 1.2.0 эти новые параметры ещё не работают.
206
207
  Для установки без ожидания обновления индекса PyPI можно установить
207
- готовый файл dist/egekit_study-1.2.1-py3-none-any.whl из этого архива.
208
+ готовый файл dist/egekit_study-1.2.2-py3-none-any.whl из этого архива.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "egekit-study"
7
- version = "1.2.1"
7
+ version = "1.2.2"
8
8
  description = "Алгоритмические инструменты для подготовки к ЕГЭ по информатике"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -52,6 +52,13 @@ class ManualTests(unittest.TestCase):
52
52
 
53
53
  def test_grouped_catalog_and_filters(self):
54
54
  text=self.output(по_заданиям=True)
55
+ self.assertEqual(text,self.output())
56
+ positions=[text.index(f"ЗАДАНИЕ №{n} —") for n in range(1,28)]
57
+ self.assertEqual(positions,sorted(positions))
58
+ alphabetical=self.output(по_заданиям=False)
59
+ self.assertNotIn("ЗАДАНИЕ №1 —",alphabetical)
60
+ entries=[line for line in alphabetical.splitlines() if line.startswith(" ") and not line.startswith(" ")]
61
+ self.assertEqual(entries,sorted(entries))
55
62
  for n in range(1,28): self.assertIn(f'ЗАДАНИЕ №{n} —',text)
56
63
  self.assertEqual(text.count('справка [man]'),1)
57
64
  selected=self.output(17,по_заданиям=True)
@@ -68,7 +75,7 @@ class ManualTests(unittest.TestCase):
68
75
  self.assertEqual(ns['число'],'11122')
69
76
  self.assertIs(ns['man'],e.man)
70
77
  self.assertIs(ns['справка'],e.man)
71
- self.assertEqual(егэ.__version__,'1.2.1')
78
+ self.assertEqual(егэ.__version__,'1.2.2')
72
79
  for name in e.__all__: self.assertIs(getattr(егэ,name),getattr(e,name))
73
80
 
74
81
  if __name__=='__main__': unittest.main()
File without changes
File without changes
File without changes
File without changes