Metadata-Version: 2.4
Name: egekit-study
Version: 1.2.2
Summary: Алгоритмические инструменты для подготовки к ЕГЭ по информатике
License-Expression: MIT
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: license-file

# EGEKit — библиотека для подготовки к ЕГЭ по информатике

Версия 1.2.2 · Python 3.10+ · 112 функций · внешние зависимости не нужны.

Библиотека охватывает темы всех 27 номеров: логика, базы данных, кодирование,
исполнители, комбинаторика, геометрия, сети, рекурсия, игры, строки,
числовые алгоритмы, сортировка, динамика, графы и кластеризация.
Это набор алгоритмов и шаблонов, а не автоматический решатель произвольного
русскоязычного условия. Для новой задачи нужно выбрать алгоритм, перенести
правила и ограничения в код. Гарантировать все возможные типы задач, включая
будущие, нельзя. Есть методы с ограничениями применимости и сложности —
они указаны у каждой функции в справочнике.

## Импорт и встроенная справка

```python
from егэ import *

print(делители(120))
print(перевести_в_систему(125, 3))
man()                         # Полный список с назначением функций
man(делители)                 # Параметры, назначение и пример
man("делители")               # То же по имени
man("divisors")               # Английское имя тоже работает
man(17)                       # Список функций задания 17
man(задание=10, год=2027)      # Нумерация проекта 2027
man(поиск="простые")          # Поиск в именах и описаниях
man(листать=True)              # Просмотрщик; выход обычно q
справка(делители)              # Русский синоним man
```

По умолчанию `man` печатает текст и возвращает None. Параметры и значения
по умолчанию показаны в сигнатуре, назначение и ограничения — в описании.
`from егэ import *` доступен в версии 1.2.0 и новее; он экспортирует все
публичные функции, включая английские имена. Прежние импорты `import egekit`
тоже работают. При использовании без установки нужны оба файла:
`егэ.py` и `egekit.py` рядом с решением. Не называйте свой скрипт `егэ.py`.

## Русские названия

Все 112 функций теперь имеют русские имена. Например: `делители`,
`таблица_истинности`, `количество_программ`, `сведения_о_сети`,
`максимальная_сумма_подмассива`. Список по номеру:
`e.функции_задания(17, год=2026)`.

Таблица всех соответствий — `RUSSIAN_NAMES.md`.
`examples_ru.py` содержит все 27 примеров с русскими названиями функций.
Английские имена и `examples.py` продолжают работать. Имена параметров
большинства функций сохранены; пример именованного аргумента:
`e.делители(120, proper=True)`. Python поддерживает кириллицу в именах;
сохраняйте свои скрипты в UTF-8.

## Как начать на Windows

1. Распакуйте весь архив.
2. Откройте `GUIDE.html` в браузере: это справочник на русском с поиском,
   фильтром по году и номеру, параметрами и примерами всех функций.
3. Рядом с `egekit.py` создайте файл `solution.py`:

```python
import egekit as e

print(e.перевести_в_систему(125, 3))  # 11122
print(e.делители(12))    # [1, 2, 3, 4, 6, 12]
print(e.функции_задания(13, год=2026))
help(e.количество_программ)
```

4. Откройте терминал в этой папке и выполните:

```bash
python solution.py
```

Если Windows использует команду `py`, замените `python` на `py`.
Не называйте свой файл `egekit.py`, иначе он закроет модуль библиотеки.

## Установка для других проектов

Для запуска из папки с `egekit.py` установка вообще не нужна.
Чтобы импортировать из других папок, установите библиотеку в нужное
виртуальное окружение из корня распакованного проекта:

```bash
python -m pip install -e .
```

Сам модуль использует только стандартную библиотеку Python.
Установка через pip может потребовать получения сборщика setuptools;
для полностью автономного использования просто положите `egekit.py`
рядом со своим решением. В PyPI библиотека не опубликована.

## Примеры по всем номерам

```bash
python examples_ru.py
python examples_ru.py 17
python examples_ru.py --year 2027 23
```

Вывод примеров относится к встроенным учебным данным, а не к ответам
на произвольный вариант ЕГЭ. Исходник каждого примера содержит пояснения.

## Различия 2026 / проект 2027

Основа: материалы ФИПИ, проверенные 18.10.2026.
В справочнике по умолчанию используется нумерация 2026.

| Номер | 2026 | Проект 2027 |
|---|---|---|
| 10 | Поиск в текстовом документе | Маски подсетей IPv4 |
| 13 | Маски подсетей IPv4 | Исполнители и количество программ |
| 23 | Исполнители и количество программ | Пути во взвешенном ориентированном графе |
| 27 | Анализ данных, в том числе кластеризация точек | Анализ данных; в демо — частицы и кинетическая энергия |

Остальные темы сохраняют номера. Пример из демоверсии не исчерпывает все
возможные формулировки. Старые задачи на остатки, выбор из групп и кольцевую
дорогу сохранены как дополнительные алгоритмы №27. `functions_for` возвращает
также связанные вспомогательные функции, а не перечень официальных подтипов.

## Что внутри

- `egekit.py` — алгоритмы и встроенная справка.
- `егэ.py` — модуль для `from егэ import *`.
- `examples_man.py` — пример нового импорта и справки.
- `GUIDE.html` — полный справочник с поиском, работает без интернета.
- `GUIDE.md` — тот же справочник текстом.
- `examples.py` — 27 учебных примеров и изменённые номера для 2027.
- `verify_official.py` — проверка на файлах демоверсии 2027, скачанных пользователем.
- `tests/test_egekit.py` — функциональные проверки и сравнение быстрых алгоритмов с полным перебором.
- `VALIDATION.md` — что проверено и какие ограничения остались.

## Важные правила работы

- `predicate` — функция проверки условия, часто записывается через `lambda`.
  Например, `lambda n: n % 7 == 0` проверяет кратность 7.
- Все найденные ответы зависят от заданного диапазона. Перебор `range(1000)`
  не доказывает утверждение для всех натуральных чисел.
- В Python `range(a,b)` не включает b; индексы массивов начинаются с 0.
- `None` в результатах означает, что подходящего решения нет.
- Для памяти различайте биты/байты и округление каждого объекта/всего потока;
  килобайт/Кбайт обычно 1024 байта только если так определено в условии.
- Для игр различайте «существует неудачный ход» и «при любом ходе».
- Центр-медоид, среднее координат и медиана энергии — разные определения.
- Сложность O(n²) может быть неприемлемой для больших файлов; ограничения
  и быстрые альтернативы указаны в справочнике.
- XLSX/ODS читаются по сохранённым значениям. Формулы библиотека не вычисляет.

Проверки:

```bash
python -m unittest discover -s tests -v
```

## Официальные источники

- ФИПИ, демоверсии/спецификации/кодификаторы:
  https://fipi.ru/ege/demoversii-specifikacii-kodifikatory
- Архив проекта по информатике 2027:
  https://doc.fipi.ru/ege/demoversii-specifikacii-kodifikatory/2027/inf_11_2027.zip

Официальные PDF и исходные экзаменационные файлы в этот пакет не включены.
Это независимая учебная библиотека, не продукт ФИПИ.

## Обновление в PyPI

Версия этой сборки — 1.1.0. Если вы уже опубликовали 1.1.0, новая версия
не заменяет старую: она публикуется отдельным выпуском. Сохраните собственное
название проекта в поле name pyproject.toml, если меняли его ранее.
Собирайте новую версию в чистой распакованной папке, чтобы dist не содержал
старых архивов. После публикации пользователи обновляют пакет через
`python -m pip install --upgrade ИМЯ_ВАШЕГО_ПАКЕТА`.

Готовые файлы для публикации версии 1.2.2 находятся в папке dist. После
проверки `python -m twine check dist/*` их можно загрузить командой
`python -m twine upload dist/*`. Если меняете код, пересоберите пакет.
После публикации обновите установленный пакет:
`python -m pip install --upgrade egekit-study`.

## Номера заданий в справке: версия 1.2.2

`man()` по умолчанию группирует функции по номерам от №1 до №27 и подписывает у каждой функции номера заданий выбранного года. Для алфавитного списка: `man(по_заданиям=False)`.
`man(по_заданиям=True)` выводит группы с заголовками «ЗАДАНИЕ №1», «ЗАДАНИЕ
№2» и так далее. Общие инструменты вынесены в отдельный раздел. Функция,
подходящая нескольким номерам, появляется в каждой соответствующей группе.

```python
from егэ import *
man()                           # Разделы от задания №1 до №27
man(по_заданиям=False)            # Алфавитный список с номерами
man(по_заданиям=True)             # Группы по заданиям
man(17)                          # Только функции для №17
man(по_заданиям=True, год=2027)   # Нумерация проекта 2027
```

На установленной версии 1.2.0 эти новые параметры ещё не работают.
Для установки без ожидания обновления индекса PyPI можно установить
готовый файл dist/egekit_study-1.2.2-py3-none-any.whl из этого архива.
