Українська
Завдання
Відповідно до номера свого варіанта виконайте завдання обраного рівня складності.
Усі рівні використовують Python 3.14 й анотації. Публікація на PyPI/TestPyPI не входить до обов’язкових вимог.
Варіанти
Варіант 1. Узагальнений стек
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з узагальненим класом Stack[T]: методи push, pop і len; pop порожнього стека породжує IndexError. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з узагальненим класом Stack[T]: методи push, pop і len; pop порожнього стека породжує IndexError. Додати ітерацію від вершини без зміни стека. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з узагальненим класом Stack[T]: методи push, pop і len; pop порожнього стека породжує IndexError. Додати ітерацію від вершини без зміни стека. Консольна команда читає JSON-масив цілих чисел, будує Stack[int] і записує стек у JSON-файл із перевіркою типів елементів. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr. Перевірити wheel у чистому середовищі й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 2. Кеш LRU
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з узагальненим кешем LRU[K, V] місткістю 1–1000 і методами put та get; get оновлює давність, відсутній ключ дає KeyError. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з узагальненим кешем LRU[K, V] місткістю 1–1000 і методами put та get; get оновлює давність, відсутній ключ дає KeyError. Додати лічильники влучань і промахів та тест витіснення. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з узагальненим кешем LRU[K, V] місткістю 1–1000 і методами put та get; get оновлює давність, відсутній ключ дає KeyError. Додати лічильники влучань і промахів та тест витіснення. Консольна команда читає з JSON-файла місткість і послідовність операцій put/get та друкує результати get і статистику влучань. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr. Перевірити wheel у чистому середовищі й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 3. Конвертер одиниць
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з типізованими функціями перетворення метрів, сантиметрів і кілометрів для скінченних значень 0–1e6. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з типізованими функціями перетворення метрів, сантиметрів і кілометрів для скінченних значень 0–1e6. Додати консольну команду, що приймає значення, одиницю джерела й одиницю результату та друкує перетворене значення. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з типізованими функціями перетворення метрів, сантиметрів і кілометрів для скінченних значень 0–1e6. Додати консольну команду, що приймає значення, одиницю джерела й одиницю результату та друкує перетворене значення. Команда також перетворює CSV-файл значень з одиницями в новий CSV і друкує звіт неправильних рядків. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr. Перевірити wheel у чистому середовищі й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 4. Черга пріоритетів
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з узагальненою чергою PriorityQueue[T] з цілим пріоритетом 0–100: менший пріоритет обслуговується першим, рівні – у порядку FIFO. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з узагальненою чергою PriorityQueue[T] з цілим пріоритетом 0–100: менший пріоритет обслуговується першим, рівні – у порядку FIFO. Додати скасування елемента за унікальним додатним ідентифікатором. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з узагальненою чергою PriorityQueue[T] з цілим пріоритетом 0–100: менший пріоритет обслуговується першим, рівні – у порядку FIFO. Додати скасування елемента за унікальним додатним ідентифікатором. Консольна команда виконує операції над чергою з JSON-файла, друкує порядок обслуговування та зберігає чергу в JSON без зміни порядку. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr. Перевірити wheel у чистому середовищі й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 5. Граф маршрутів
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з узагальненим класом Graph[N] неорієнтованого графа над хешованими вершинами без повторних ребер. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з узагальненим класом Graph[N] неорієнтованого графа над хешованими вершинами без повторних ребер. Додати пошук шляху BFS між двома вершинами, що повертає список вершин або None за відсутності шляху. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з узагальненим класом Graph[N] неорієнтованого графа над хешованими вершинами без повторних ребер. Додати пошук шляху BFS між двома вершинами, що повертає список вершин або None за відсутності шляху. Консольна команда читає вершини й ребра з JSON-файла, приймає дві вершини та друкує звіт про знайдений шлях. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr. Перевірити wheel у чистому середовищі й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 6. Репозиторій сутностей
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з узагальненим протоколом Repository[T] (Protocol) з методами get і add: ключі – унікальні цілі числа, get повертає T або None. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з узагальненим протоколом Repository[T] (Protocol) з методами get і add: ключі – унікальні цілі числа, get повертає T або None. Додати реалізацію в пам’яті та тести, що працюють через протокол. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з узагальненим протоколом Repository[T] (Protocol) з методами get і add: ключі – унікальні цілі числа, get повертає T або None. Додати реалізацію в пам’яті та тести, що працюють через протокол. Додати SQLite-реалізацію для книг (цілий ключ, назва) і тест відкату транзакції при конфлікті ключа; консольна команда додає книги й шукає їх за ключем. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr. Перевірити wheel у чистому середовищі й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 7. Валідатор конфігурацій
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з типом Options (TypedDict) з полями mode (short або full) і limit (1–100) та функцією валідації JSON без cast. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з типом Options (TypedDict) з полями mode (short або full) і limit (1–100) та функцією валідації JSON без cast. Додати консольну команду, що читає JSON-файл і друкує прийняті параметри або точне повідомлення про невідомі й відсутні ключі. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з типом Options (TypedDict) з полями mode (short або full) і limit (1–100) та функцією валідації JSON без cast. Додати консольну команду, що читає JSON-файл і друкує прийняті параметри або точне повідомлення про невідомі й відсутні ключі. Команда також пакетно перевіряє всі JSON-файли каталогу, не змінюючи їх, і друкує звіт для кожного файла. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr. Перевірити wheel у чистому середовищі й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 8. Числова матриця
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з узагальненим класом Matrix[T: (int, float)] для непорожніх прямокутних даних і методом сум рядків. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з узагальненим класом Matrix[T: (int, float)] для непорожніх прямокутних даних і методом сум рядків. Додати додавання матриць однакової форми й транспонування. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з узагальненим класом Matrix[T: (int, float)] для непорожніх прямокутних даних і методом сум рядків. Додати додавання матриць однакової форми й транспонування. Консольна команда читає дві матриці з JSON-файла, відхиляє NaN і несумісні форми та друкує суму, транспоновані матриці й суми рядків. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr. Перевірити wheel у чистому середовищі й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 9. Подієва шина
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з узагальненим класом EventBus[T]: підписка обробників Callable[[T], None], відписка й виклик у порядку підписки. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з узагальненим класом EventBus[T]: підписка обробників Callable[[T], None], відписка й виклик у порядку підписки. Додати публікацію через копію списку обробників, щоб зміни підписки діяли з наступної події. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з узагальненим класом EventBus[T]: підписка обробників Callable[[T], None], відписка й виклик у порядку підписки. Додати публікацію через копію списку обробників, щоб зміни підписки діяли з наступної події. Консольна команда публікує події з JSON-файла й записує журнал послідовності викликів у JSON; додати тест повторної підписки. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr. Перевірити wheel у чистому середовищі й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 10. Бінарне дерево
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з узагальненим бінарним деревом пошуку зі скінченними ключами int і значеннями будь-якого типу; повторний ключ оновлює значення. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з узагальненим бінарним деревом пошуку зі скінченними ключами int і значеннями будь-якого типу; повторний ключ оновлює значення. Додати пошук за ключем та ітерацію за зростанням ключа. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з узагальненим бінарним деревом пошуку зі скінченними ключами int і значеннями будь-якого типу; повторний ключ оновлює значення. Додати пошук за ключем та ітерацію за зростанням ключа. Консольна команда імпортує пари «ключ, значення» з JSON-файла, друкує записи за зростанням ключа й знайдене значення; додати тест виродженого дерева на 100 записів. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr. Перевірити wheel у чистому середовищі й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 11. Звіти CSV
1. Початковий рівень. Створити src-пакет із pyproject.toml, README і консольною командою, що читає CSV-файл із рядками name,amount (непорожня назва, ціла сума 0–1e6) і друкує підсумки за назвою. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml, README і консольною командою, що читає CSV-файл із рядками name,amount (непорожня назва, ціла сума 0–1e6) і друкує підсумки за назвою. Додати сортування підсумків і окремий звіт рядків із помилками. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml, README і консольною командою, що читає CSV-файл із рядками name,amount (непорожня назва, ціла сума 0–1e6) і друкує підсумки за назвою. Додати сортування підсумків і окремий звіт рядків із помилками. Команда також експортує підсумки в CSV і не перезаписує наявний файл без прапорця --overwrite. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr. Перевірити wheel у чистому середовищі й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 12. Тип результату
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з типом Result[T, E] як об’єднанням dataclass Ok і Err та функцією parse_int, що повертає результат розбору рядка без винятку. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з типом Result[T, E] як об’єднанням dataclass Ok і Err та функцією parse_int, що повертає результат розбору рядка без винятку. Додати метод map, що перетворює успішний результат і зберігає помилку. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з типом Result[T, E] як об’єднанням dataclass Ok і Err та функцією parse_int, що повертає результат розбору рядка без винятку. Додати метод map, що перетворює успішний результат і зберігає помилку. Консольна команда пакетно розбирає рядки з файла й друкує JSON-звіт успішних значень і помилок. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr. Перевірити wheel у чистому середовищі й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 13. Пагінатор
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з узагальненим класом Page[T] і функцією paginate для списку: розмір сторінки 1–100, номер від 1, за межами – порожня сторінка. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з узагальненим класом Page[T] і функцією paginate для списку: розмір сторінки 1–100, номер від 1, за межами – порожня сторінка. Додати поля total і pages та тести останньої неповної сторінки. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з узагальненим класом Page[T] і функцією paginate для списку: розмір сторінки 1–100, номер від 1, за межами – порожня сторінка. Додати поля total і pages та тести останньої неповної сторінки. Консольна команда читає JSON-масив, розмір і номер сторінки, друкує сторінку в JSON або повідомлення про неправильні параметри. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr. Перевірити wheel у чистому середовищі й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 14. Трекер бюджету
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з класом обліку доходів і витрат у цілих копійках 1–1e8; витрата не може перевищувати залишок. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з класом обліку доходів і витрат у цілих копійках 1–1e8; витрата не може перевищувати залишок. Додати консольну команду та історію операцій з унікальними ідентифікаторами. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з класом обліку доходів і витрат у цілих копійках 1–1e8; витрата не може перевищувати залишок. Додати консольну команду та історію операцій з унікальними ідентифікаторами. Створити також GUI PySide6 для введення операцій і перегляду залишку, ресурс початкових налаштувань і збірку PyInstaller. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr; GUI показує помилки без завершення. Перевірити wheel у чистому середовищі, ресурси й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 15. Кільцевий буфер
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з узагальненим класом RingBuffer[T] місткістю 1–1000: у повному буфері новий елемент витісняє найстаріший. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з узагальненим класом RingBuffer[T] місткістю 1–1000: у повному буфері новий елемент витісняє найстаріший. Додати ітерацію від найстарішого елемента та overload доступу за індексом і зрізом. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з узагальненим класом RingBuffer[T] місткістю 1–1000: у повному буфері новий елемент витісняє найстаріший. Додати ітерацію від найстарішого елемента та overload доступу за індексом і зрізом. Консольна команда завантажує місткість і елементи з JSON-файла та експортує кінцевий вміст буфера в JSON. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr. Перевірити wheel у чистому середовищі й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 16. Словник з історією
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з узагальненим словником VersionedDict[K, V] і методами set, delete та undo; undo без історії повертає False. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з узагальненим словником VersionedDict[K, V] і методами set, delete та undo; undo без історії повертає False. Додати відновлення попереднього значення й вилученого ключа під час undo. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з узагальненим словником VersionedDict[K, V] і методами set, delete та undo; undo без історії повертає False. Додати відновлення попереднього значення й вилученого ключа під час undo. Консольна команда виконує команди set/delete/undo з файла й друкує вміст словника; додати тест послідовності undo до початкового стану. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr. Перевірити wheel у чистому середовищі й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 17. Форматери звітів
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з протоколом Formatter[T] і двома форматерами, табличним і рядковим, для списку Book(title, year). Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з протоколом Formatter[T] і двома форматерами, табличним і рядковим, для списку Book(title, year). Додати консольну команду, що читає книги з JSON-файла, перевіряє рік 1500–2100 і друкує їх вибраним форматером. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з протоколом Formatter[T] і двома форматерами, табличним і рядковим, для списку Book(title, year). Додати консольну команду, що читає книги з JSON-файла, перевіряє рік 1500–2100 і друкує їх вибраним форматером. Додати реєстр форматерів за іменем без виконання зовнішнього коду; команда приймає ім’я форматера з реєстру. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr. Перевірити wheel у чистому середовищі й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 18. Таймер тренувань
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з моделлю таймера тривалістю 1–3600 с: операції start, pause, reset і передане джерело часу. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з моделлю таймера тривалістю 1–3600 с: операції start, pause, reset і передане джерело часу. Додати консольну команду, що симулює проходження часу без реального очікування й друкує залишок. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з моделлю таймера тривалістю 1–3600 с: операції start, pause, reset і передане джерело часу. Додати консольну команду, що симулює проходження часу без реального очікування й друкує залишок. Створити також GUI PySide6 з QTimer, що показує залишок, ресурс налаштувань у JSON і збірку PyInstaller. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr; GUI показує помилки без завершення. Перевірити wheel у чистому середовищі, ресурси й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 19. Інтервали
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з узагальненим класом Interval[T] для int або float з умовою left <= right і перетином замкнених інтервалів. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з узагальненим класом Interval[T] для int або float з умовою left <= right і перетином замкнених інтервалів. Додати колекцію інтервалів із пошуком усіх, що містять задану точку. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з узагальненим класом Interval[T] для int або float з умовою left <= right і перетином замкнених інтервалів. Додати колекцію інтервалів із пошуком усіх, що містять задану точку. Консольна команда читає інтервали з JSON-файла, приймає точку й друкує інтервали, що її містять; додати тест дотичних меж. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr. Перевірити wheel у чистому середовищі й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 20. Статистика вибірки
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з типізованими функціями min, max і mean для 1–1000 скінченних чисел у межах ±1e6. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з типізованими функціями min, max і mean для 1–1000 скінченних чисел у межах ±1e6. Додати популяційну дисперсію та тести одиничної вибірки. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з типізованими функціями min, max і mean для 1–1000 скінченних чисел у межах ±1e6. Додати популяційну дисперсію та тести одиничної вибірки. Консольна команда читає числа з CSV-файла й друкує JSON-звіт статистик із явним ddof=0. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr. Перевірити wheel у чистому середовищі й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 21. Конвеєр обробки
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з узагальненим класом Pipeline[In, Out] над Callable із методом run, що застосовує кроки конвеєра до вхідного значення. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з узагальненим класом Pipeline[In, Out] над Callable із методом run, що застосовує кроки конвеєра до вхідного значення. Додати типізовану композицію then і приклад конвеєра str → int → float. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з узагальненим класом Pipeline[In, Out] над Callable із методом run, що застосовує кроки конвеєра до вхідного значення. Додати типізовану композицію then і приклад конвеєра str → int → float. Консольна команда пропускає рядки з файла через конвеєр, друкує результати й номер невдалого перетворення. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr. Перевірити wheel у чистому середовищі й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 22. Мультимножина
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з узагальненою мультимножиною Bag[T] над хешованими елементами: методи add, count і remove; видалення відсутнього елемента дає KeyError. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з узагальненою мультимножиною Bag[T] над хешованими елементами: методи add, count і remove; видалення відсутнього елемента дає KeyError. Додати ітерацію з повторами та len як суму кратностей. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з узагальненою мультимножиною Bag[T] над хешованими елементами: методи add, count і remove; видалення відсутнього елемента дає KeyError. Додати ітерацію з повторами та len як суму кратностей. Консольна команда читає два текстові файли й друкує порівняння частот їхніх слів. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr. Перевірити wheel у чистому середовищі й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 23. Планувальник задач
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з узагальненою чергою задач TaskQueue[T] з цілими моментами часу 0–86400 і порядком FIFO для рівних моментів. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з узагальненою чергою задач TaskQueue[T] з цілими моментами часу 0–86400 і порядком FIFO для рівних моментів. Додати вибір усіх задач, готових на заданий момент, без реального очікування. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з узагальненою чергою задач TaskQueue[T] з цілими моментами часу 0–86400 і порядком FIFO для рівних моментів. Додати вибір усіх задач, готових на заданий момент, без реального очікування. Консольна команда імпортує розклад із JSON-файла, симулює час і друкує журнал виконання задач. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr. Перевірити wheel у чистому середовищі й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 24. Налаштування TOML
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з типізованою конфігурацією з полями host (непорожній рядок) і port (1–65535), що читається з TOML-файла через tomllib. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з типізованою конфігурацією з полями host (непорожній рядок) і port (1–65535), що читається з TOML-файла через tomllib. Додати консольну команду перевірки файла, що повідомляє про невідомі ключі й неправильні типи. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з типізованою конфігурацією з полями host (непорожній рядок) і port (1–65535), що читається з TOML-файла через tomllib. Додати консольну команду перевірки файла, що повідомляє про невідомі ключі й неправильні типи. Команда також формує пакетний звіт для кількох конфігурацій без доступу до мережі. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr. Перевірити wheel у чистому середовищі й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 25. Витрати CLI
1. Початковий рівень. Створити src-пакет із pyproject.toml, README і консольною командою додавання витрати, що приймає категорію 1–30 символів і суму в додатних цілих копійках та друкує прийнятий запис. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml, README і консольною командою додавання витрати, що приймає категорію 1–30 символів і суму в додатних цілих копійках та друкує прийнятий запис. Додати збереження в SQLite і підсумок за категорією; тестувати з тимчасовою базою. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml, README і консольною командою додавання витрати, що приймає категорію 1–30 символів і суму в додатних цілих копійках та друкує прийнятий запис. Додати збереження в SQLite і підсумок за категорією; тестувати з тимчасовою базою. Команда також експортує витрати в CSV; додати тест відкату транзакції після помилки. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr. Перевірити wheel у чистому середовищі й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 26. Дерево категорій
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з узагальненим деревом Tree[T] без циклів і генератором обходу в глибину. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з узагальненим деревом Tree[T] без циклів і генератором обходу в глибину. Додати пошук першого вузла за предикатом і обхід у ширину. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з узагальненим деревом Tree[T] без циклів і генератором обходу в глибину. Додати пошук першого вузла за предикатом і обхід у ширину. Консольна команда читає дерево з JSON-файла, перевіряє глибину до 100 і друкує вузли в обраному порядку обходу. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr. Перевірити wheel у чистому середовищі й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 27. Двосторонній словник
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з узагальненим двобічним словником BiMap[K, V] з унікальними хешованими ключами й значеннями; конфлікт дає ValueError. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з узагальненим двобічним словником BiMap[K, V] з унікальними хешованими ключами й значеннями; конфлікт дає ValueError. Додати атомарне оновлення та пошук в обох напрямках. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з узагальненим двобічним словником BiMap[K, V] з унікальними хешованими ключами й значеннями; конфлікт дає ValueError. Додати атомарне оновлення та пошук в обох напрямках. Консольна команда виконує команди додавання, оновлення й пошуку з файла; додати перевірку незмінності словника після конфлікту. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr. Перевірити wheel у чистому середовищі й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 28. Облік товарів
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з класом Product (унікальний код, назва, кількість 0–1e6) і типізованим репозиторієм товарів. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з класом Product (унікальний код, назва, кількість 0–1e6) і типізованим репозиторієм товарів. Додати SQLite-реалізацію CRUD із перевіркою конфліктів ключів. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з класом Product (унікальний код, назва, кількість 0–1e6) і типізованим репозиторієм товарів. Додати SQLite-реалізацію CRUD із перевіркою конфліктів ключів. Створити також GUI PySide6 для перегляду й редагування товарів і збірку PyInstaller; базу зберігати поза ресурсами. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr; GUI показує помилки без завершення. Перевірити wheel у чистому середовищі, ресурси й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 29. Типізований декоратор
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з декоратором logged[**P, T], що друкує виклики функції та зберігає її сигнатуру й тип результату Callable[P, T]. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з декоратором logged[**P, T], що друкує виклики функції та зберігає її сигнатуру й тип результату Callable[P, T]. Додати декоратор повтору лише для явно заданого винятку, 1–5 спроб, без затримки в тестах. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з декоратором logged[**P, T], що друкує виклики функції та зберігає її сигнатуру й тип результату Callable[P, T]. Додати декоратор повтору лише для явно заданого винятку, 1–5 спроб, без затримки в тестах. Консольна команда демонструє обидва декоратори на прикладній функції; додати негативний тест mypy для неправильного аргументу. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr. Перевірити wheel у чистому середовищі й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Варіант 30. Бібліотека геометрії
1. Початковий рівень. Створити src-пакет із pyproject.toml і README з протоколом Shape (методи area і perimeter) та класами Circle і Rectangle з додатними скінченними розмірами. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати локальний wheel і продемонструвати імпорт після встановлення поза каталогом джерел.
2. Базовий рівень. Створити src-пакет із pyproject.toml і README з протоколом Shape (методи area і perimeter) та класами Circle і Rectangle з додатними скінченними розмірами. Додати консольну команду, що читає фігури з JSON-файла й друкує їх площі та периметри; тести формул через pytest.approx. Анотувати API, додати pytest для нормального, граничного й неправильного випадку, зібрати wheel і перевірити чисте встановлення. Забезпечити mypy --strict і Ruff без помилок; показати негативну перевірку типів окремим файлом.
3. Високий рівень. Створити src-пакет із pyproject.toml і README з протоколом Shape (методи area і perimeter) та класами Circle і Rectangle з додатними скінченними розмірами. Додати консольну команду, що читає фігури з JSON-файла й друкує їх площі та периметри; тести формул через pytest.approx. Додати реєстр типів фігур і звіт сумарних площ і периметрів без eval. Додати щонайменше п’ять pytest-сценаріїв, mypy --strict, Ruff і локальні команди CI. CLI має --help, коди 0/2 і помилки в stderr. Перевірити wheel у чистому середовищі й запуск з іншого каталогу; публікація в реєстрі не потрібна.
Порядок виконання та захисту роботи
- Опишіть API, одиниці, обмеження й поведінку помилок.
- Створіть src-проєкт із pyproject.toml і README.
- Реалізуйте предметний код окремо від введення та інтерфейсу.
- Перевірте звичайний, граничний і неправильний вхід через pytest.
- Запустіть mypy та Ruff; поясніть виправлення, не приховуйте їх.
- Зберіть wheel і перевірте його в чистому середовищі поза джерелами.
- Для високого рівня виконайте додаткову вимогу варіанта та CI; GUI-збірку перевірте з ресурсами з іншого каталогу.
- Додайте до звіту структуру, код, команди, версії, результати, негативну перевірку типів і відомі обмеження навчальної моделі.