Українська
Завдання
Відповідно до номера свого варіанта виконайте завдання обраного рівня складності.
Використовуйте Python 3.14, функції з анотаціями параметрів і результату та стандартну бібліотеку. Власні класи й зовнішні пакети не потрібні; NamedTuple допускається як засіб опису іменованого запису. Для високого рівня реалізуйте аргументи sys.argv, --help, введення з клавіатури за відсутності аргументів, повідомлення до sys.stderr і коди завершення. Парсинг відокремте від функцій обробки. Файли й бази даних на цьому етапі не потрібні. Для грошових сум використовуйте цілі копійки, для дат – явно задані цілі номери днів. Усі правила обліку в завданнях навчальні.
Варіанти
Варіант 1. Футбольна ліга
1. Початковий рівень. Створити консольну програму, яка зчитує назви команд через пробіл і друкує відсортований список унікальних назв та їх кількість за допомогою множини.
2. Базовий рівень. Створити консольну програму, яка зчитує матчі команда1:команда2:голи1:голи2 до порожнього рядка. Нарахувати 3 очки за перемогу, 1 за нічию, 0 за поразку. Відхилити від’ємні голи й гру команди із собою; вивести таблицю за спаданням очок, різниці голів, потім за назвою. Повторні зустрічі дозволені.
3. Високий рівень. Створити консольну програму обліку ліги з аргументами матчів команда1:команда2:голи1:голи2, клавіатурним введенням без аргументів і --help. У словниках накопичити ігри, перемоги, нічиї, поразки, голи й очки 3/1/0. Вивести рейтинг за очками, різницею голів і назвою та загальну кількість матчів. Відхилити неправильні записи до зміни таблиці; помилки вивести до stderr, код завершення 2, успіх 0. Перевірити нічию і порожній турнір.
Варіант 2. Готель
1. Початковий рівень. Створити консольну програму, яка зчитує кількість номерів від 1 до 100 і зайняті номери через пробіл. Множиною знайти й надрукувати вільні номери від 1 до введеної кількості; відхилити номер поза цими межами.
2. Базовий рівень. Створити консольну програму, яка зчитує місткість готелю та бронювання номер:гостя до порожнього рядка. Зберігати бронювання у словнику, відхиляти повторний зайнятий номер і номер поза діапазоном. Надрукувати бронювання за номером, вільні номери та відсоток зайнятих.
3. Високий рівень. Створити консольну програму з аргументами місткість, операціями book:номер:гість і cancel:номер, клавіатурним введенням та --help. Виконати операції послідовно у словнику, відхилити подвійне бронювання, скасування вільного номера й неправильний номер. Після кожного кроку показати число вільних місць; наприкінці таблицю бронювань і завантаженість. Помилки записати до stderr, завершитися з кодом 2, успіх 0.
Варіант 3. Музичний плейлист
1. Початковий рівень. Створити консольну програму, яка зчитує назви треків через кому, прибирає пробіли по краях і друкує пронумерований список та його зворотний порядок. Порожні назви відхилити; порожній рядок означає порожній плейлист.
2. Базовий рівень. Створити консольну програму, яка зчитує записи трек:жанр до порожнього рядка, зберігає їх у deque і запитує цілий крок обертання. Надрукувати чергу після rotate, наступний трек або повідомлення про порожню чергу та частоти жанрів через Counter. Відхилити неповні записи.
3. Високий рівень. Створити консольний програвач з аргументами add:трек:жанр, next, rotate:крок, shuffle:seed, введенням без аргументів і --help. Зберігати чергу у deque; для відтворюваного перемішування використати random.Random(seed).shuffle над тимчасовим списком. Вивести зіграні треки, залишок і Counter жанрів. Відхилити невідомі команди та next для порожньої черги: stderr, код 2; успіх 0.
Варіант 4. Вибори
1. Початковий рівень. Створити консольну програму, яка зчитує прізвища кандидатів у бюлетенях через пробіл і друкує кількість голосів за кожного через Counter. Порожній рядок означає відсутність голосів.
2. Базовий рівень. Створити консольну програму, яка зчитує список кандидатів і список голосів. Відхилити голос за невідомого кандидата. Показати всіх кандидатів, включаючи тих, хто має 0 голосів, кількість і відсоток від дійсних голосів. За порожнього голосування відсотки 0; рейтинг за голосами, потім прізвищем.
3. Високий рівень. Створити консольну програму з аргументами candidates:A,B,C та vote:A, клавіатурним введенням і --help. Порахувати голоси Counter. Переможець потребує строго понад 50 відсотків голосів; інакше показати двох лідерів для другого туру. За нічиєї на межі проходження вивести всіх претендентів і повідомити, що потрібне додаткове правило. Надрукувати таблицю й підсумок; неправильні дані: stderr, код 2, успіх 0.
Варіант 5. Автобусні маршрути
1. Початковий рівень. Створити консольну програму, яка зчитує два списки зупинок через кому і за допомогою множин друкує спільні зупинки та зупинки лише першого маршруту. Прибрати пробіли, результат сортувати.
2. Базовий рівень. Створити консольну програму, яка зчитує маршрути номер:зупинка,зупинка до порожнього рядка, а потім початок і кінець поїздки. Відхилити повторний номер і порожні зупинки; вивести всі прямі маршрути, що містять обидві зупинки. Напрям руху в цій задачі не враховувати; за відсутності показати повідомлення.
3. Високий рівень. Створити консольний планувальник з аргументами from:зупинка, to:зупинка та номер:зупинка,зупинка, введенням без аргументів і --help. Зберігати зупинки маршрутів множинами. Знайти прямі шляхи й усі варіанти з однією пересадкою, вивести номери маршрутів і спільну зупинку без дублів; напрям не враховувати. Підсумувати кількість варіантів. Некоректні записи й невідомі кінцеві зупинки: stderr, код 2; успіх 0.
Варіант 6. Склад
1. Початковий рівень. Створити консольну програму, яка зчитує назви отриманих одиниць товарів через пробіл та друкує залишки за назвою через Counter і загальну кількість.
2. Базовий рівень. Створити консольну програму, яка зчитує надходження товар:кількість до порожнього рядка та цілий невід’ємний мінімум. Накопичити залишки defaultdict(int), відхилити недодатні кількості й порожні назви. Вивести таблицю, загальну кількість і товари із залишком нижче мінімуму.
3. Високий рівень. Створити консольну програму з аргументами min:число, in:товар:кількість і out:товар:кількість, клавіатурним введенням та --help. Обробити рухи послідовно, не дозволяти списання понад залишок і невідомого товару. Зберігати нульові залишки; вивести таблицю надходжень, списань, залишків, дефіцит до мінімуму та підсумки. Помилки до зміни відповідного запису: stderr, код 2; успіх 0. Перевірити повне списання.
Варіант 7. Конференція
1. Початковий рівень. Створити консольну програму, яка зчитує учасників двох секцій через кому, друкує спільних учасників і загальну кількість різних людей через множини.
2. Базовий рівень. Створити консольну програму, яка зчитує реєстрації учасник:секція до порожнього рядка. Групувати людей у defaultdict(set), повторну реєстрацію не рахувати двічі. Відхилити порожні поля; надрукувати секції з учасниками та людей, записаних щонайменше у дві секції.
3. Високий рівень. Створити консольну програму реєстрації з аргументами учасник:секція:слот, клавіатурним введенням і --help; слот є цілим числом 1–8. Одній секції відповідає один слот. Виявити людей, записаних у різні секції одного слота, групувати реєстрації словниками множин, прибрати точні дублікати. Вивести розклад секцій, конфлікти й підсумки. Порожні поля, неправильні слоти та різні слоти однієї секції: stderr, код 2; успіх 0.
Варіант 8. Шкільний розклад
1. Початковий рівень. Створити консольну програму, яка зчитує назви уроків одного дня через кому та друкує їх із номерами через enumerate, число уроків і різних предметів.
2. Базовий рівень. Створити консольну програму, яка зчитує записи день:урок:кабінет:учитель до порожнього рядка. День 1–5, урок 1–8, інші поля непорожні. Словниками знайти конфлікти кабінету або вчителя в одному часовому слоті; надрукувати відсортований розклад і всі конфліктні пари записів.
3. Високий рівень. Створити консольну програму з аргументами день:урок:кабінет:учитель, клавіатурним введенням, --help і параметром free:день:урок. Побудувати словник слотів, знайти конфлікти кабінетів і вчителів, вивести розклад та вільних у вказаний слот учителів із множини всіх уведених учителів. Підсумувати уроки за днями. Межі 1–5 і 1–8; неправильний формат: stderr, код 2; успіх 0, навіть якщо знайдено конфлікти.
Варіант 9. Холодильник і рецепти
1. Початковий рівень. Створити консольну програму, яка зчитує наявні продукти та інгредієнти однієї страви через кому. Множинами визначити, чи всі інгредієнти є, та надрукувати відсутні продукти в алфавітному порядку.
2. Базовий рівень. Створити консольну програму, яка зчитує наявні продукти і рецепти страва:продукт,продукт до порожнього рядка. Зберігати словник множин, відхилити повторні назви страв і порожні інгредієнти. Надрукувати страви, доступні повністю, та для решти відсутні продукти; кількості не враховувати.
3. Високий рівень. Створити консольний планувальник із аргументами stock:продукт,продукт та страва:продукт,продукт, клавіатурним введенням і --help. Для кожної страви обчислити множину відсутніх продуктів, рейтинг за числом покупок і назвою; для двох найкращих різних страв вивести об’єднаний список покупок і його розмір. Кількості не враховувати; якщо страв менше двох, пояснити це. Повторні назви й порожні поля: stderr, код 2; успіх 0.
Варіант 10. Кінотеатр
1. Початковий рівень. Створити консольну програму, яка зчитує додатні кількості рядів і місць до 20, створює незалежні рядки матриці з нулів і друкує схему залу. Значення 0 означає вільне місце.
2. Базовий рівень. Створити консольну програму, яка зчитує розміри залу до 20 на 20 та бронювання ряд:місце до порожнього рядка. Використати вкладені списки, нумерація від 1. Відхиляти зайняте місце й координати поза залом; вивести схему 0/1, число вільних місць у кожному ряді та загалом.
3. Високий рівень. Створити консольну програму з аргументами size:ряди:місця, book:ряд:місце, cancel:ряд:місце, find:кількість, введенням і --help. Зберігати зал вкладеними списками до 20 на 20. Знайти всі відрізки потрібної кількості сусідніх вільних місць в одному ряді, не бронюючи їх. Вивести схему й підсумок; подвійне бронювання, скасування вільного місця та неправильні координати: stderr, код 2; успіх 0.
Варіант 11. Біржа праці
1. Початковий рівень. Створити консольну програму, яка зчитує навички кандидата та вимоги вакансії через кому. Множинами надрукувати спільні й відсутні навички.
2. Базовий рівень. Створити консольну програму, яка зчитує непорожню множину вимог і кандидатів ім’я:навичка,навичка до порожнього рядка. Обчислити відсоток покриття вимог, відсортувати за спаданням покриття й іменем; показати відсутні навички. Повторені імена відхилити.
3. Високий рівень. Створити консольну програму з аргументами required:навички, optional:навички та ім’я:навички, клавіатурним введенням і --help. Навички перелічуються через кому. Обов’язкові й бажані множини не перетинаються. Ранжувати за кількістю обов’язкових, бажаних збігів та іменем; виділити кандидатів із повним покриттям обов’язкових вимог. Вивести таблицю й підсумки. Порожні обов’язкові вимоги, дублікати імен і неправильний формат: stderr, код 2; успіх 0.
Варіант 12. Олімпіада
1. Початковий рівень. Створити консольну програму, яка зчитує країни переможців через пробіл та через Counter друкує кількість перемог кожної країни й загальну суму.
2. Базовий рівень. Створити консольну програму, яка зчитує записи країна:медаль до порожнього рядка; медаль gold, silver або bronze. Накопичити словник лічильників і вивести залік за спаданням золота, срібла, бронзи, потім за назвою. Відхилити невідому медаль і порожню країну.
3. Високий рівень. Створити консольний залік з аргументами вид:країна:медаль, клавіатурним введенням і --help. Для кожного виду дозволити лише одну медаль кожного кольору gold, silver, bronze; повтор відхилити. У вкладених словниках накопичити медалі країн, вивести загальну таблицю за золотом, сріблом, бронзою і назвою та підсумки за видами. Помилки: stderr, код 2; успіх 0. Перевірити рівні результати країн.
Варіант 13. Приймальне відділення
1. Початковий рівень. Створити консольну програму, яка зчитує імена відвідувачів через кому, поміщає їх у deque та друкує порядок обслуговування через popleft. Порожня черга повинна давати повідомлення без винятку.
2. Базовий рівень. Створити консольну програму, яка зчитує ім’я:пріоритет до порожнього рядка. Пріоритет 1–5, менший означає раніше обслуговування. Побудувати heapq з порядковим номером надходження, вивести чергу обслуговування і частоти пріоритетів. За рівних пріоритетів зберегти порядок.
3. Високий рівень. Створити консольну програму з аргументами arrive:ім’я:пріоритет та serve, клавіатурним введенням і --help. У навчальній моделі пріоритети 1–5, менший перший; рівні обслуговуються за часом надходження. Використати heapq і унікальний номер запису, вивести журнал обслуговування, решту черги й статистику. serve за порожньої черги та неправильні дані: stderr, код 2; успіх 0. Збіги імен дозволити.
Варіант 14. Двомовний словник
1. Початковий рівень. Створити консольну програму, яка зчитує пари слово:переклад до порожнього рядка та слово для пошуку. Зберігати словник, відхилити повторні ключі; вивести переклад або повідомлення через get.
2. Базовий рівень. Створити консольну програму, яка зчитує слово:переклад до порожнього рядка й групує кілька перекладів слова множиною. Побудувати зворотний словник множин, надрукувати обидва напрями в алфавітному порядку. Порожні поля відхилити, точні повтори ігнорувати.
3. Високий рівень. Створити консольну програму з аргументами слово:переклад, параметром find:слово, клавіатурним введенням і --help. Побудувати прямий і зворотний словники множин. Вивести переклади запиту та інші вихідні слова зі спільним перекладом як навчальне наближення синонімів; запит зі списку вилучити. Надрукувати таблиці й кількість пар. Порожні поля й неправильний формат: stderr, код 2; успіх 0.
Варіант 15. Метрополітен
1. Початковий рівень. Створити консольну програму, яка зчитує впорядкований список унікальних станцій через кому та дві станції. За індексами обчислити кількість перегонів між ними; відхилити невідомі станції та повтори у списку.
2. Базовий рівень. Створити консольну програму, яка зчитує дві лінії метро як списки станцій через кому. Відхилити повтори всередині лінії й порожні назви. Вивести пересадкові станції через перетин множин, нумерацію станцій кожної лінії та загальне число різних станцій.
3. Високий рівень. Створити консольний планувальник з аргументами лінія:станція,станція, from:станція, to:станція, введенням без аргументів і --help. Знайти прямі шляхи та шляхи з однією пересадкою через спільну станцію. Вартість дорівнює сумі модулів різниць індексів; пересадка безкоштовна. Вивести варіанти за вартістю та мінімум. Повтори станцій усередині лінії, повторні назви ліній і невідомі кінці: stderr, код 2; успіх 0.
Варіант 16. Шкільна бібліотека
1. Початковий рівень. Створити консольну програму, яка зчитує назви виданих книжок через кому та друкує їх частоти через Counter і три найпопулярніші назви. За рівних частот сортувати за назвою.
2. Базовий рівень. Створити консольну програму, яка зчитує поточний день і видачі читач:книга:день_повернення до порожнього рядка. Дні невід’ємні цілі. Згрупувати книжки за читачем і вивести боржників, для яких строк менший за поточний день; рівність не є простроченням. Порожні поля відхилити.
3. Високий рівень. Створити консольний облік з аргументами today:день та читач:код_примірника:назва:строк, клавіатурним введенням і --help. Відхилити повторний код примірника, порожні поля й від’ємні дні. Побудувати словник видач, групи боржників і Counter назв; вивести прострочення в днях, кількість видач за читачем і підсумки. Строк сьогодні не прострочений. Помилки: stderr, код 2; успіх 0.
Варіант 17. Соцмережа
1. Початковий рівень. Створити консольну програму, яка зчитує друзів двох користувачів через кому і друкує спільних друзів та друзів лише першого за допомогою множин.
2. Базовий рівень. Створити консольну програму, яка зчитує дружні пари ім’я1:ім’я2 до порожнього рядка та ім’я для запиту. Побудувати симетричний словник множин, відхилити дружбу із собою й порожні імена, повтори ігнорувати. Вивести друзів і число спільних друзів з кожним іншим користувачем.
3. Високий рівень. Створити консольну програму з аргументами дружніх пар A:B, user:ім’я, клавіатурним введенням і --help. Побудувати симетричний словник множин. Рекомендувати друзів друзів, вилучивши самого користувача і вже наявних друзів; ранжувати за кількістю спільних друзів, потім іменем. Вивести таблицю рекомендацій і підсумки мережі. Невідомий користувач, дружба із собою та неправильні пари: stderr, код 2; успіх 0.
Варіант 18. Магазин одягу
1. Початковий рівень. Створити консольну програму, яка зчитує назва:розмір:ціна_коп до порожнього рядка, створює записи namedtuple і друкує назви та ціни. Допустимі розміри S, M, L, XL, ціна невід’ємна ціла.
2. Базовий рівень. Створити консольну програму, яка зчитує назва:розмір:колір:ціна_коп до порожнього рядка і бажані розмір та максимальну ціну. Зберігати NamedTuple, відфільтрувати товари й сортувати за ціною, назвою, кольором. Відхилити порожні поля, невідомий розмір і від’ємну ціну.
3. Високий рівень. Створити консольний каталог з аргументами назва:розмір:колір:ціна_коп, size:розмір, max:ціна_коп, введенням і --help. Зберігати NamedTuple; однакові трійки назва–розмір–колір відхилити. Вивести відфільтровані товари за ціною та назвою, доступні кольори множиною й кількість позицій за розмірами. Розміри S, M, L, XL, ціни невід’ємні цілі. Помилки: stderr, код 2; успіх 0.
Варіант 19. Автопарк
1. Початковий рівень. Створити консольну програму, яка зчитує пробіги автомобілів через пробіл і поріг обслуговування. Включенням відібрати пробіги не менші за поріг та вивести їх кількість; усі значення невід’ємні цілі кілометри.
2. Базовий рівень. Створити консольну програму, яка зчитує номер:марка:пробіг до порожнього рядка та поріг. Відхилити повторні номери, порожні поля й від’ємні пробіги. Згрупувати автомобілі за маркою через defaultdict, вивести середній пробіг і номери авто, які досягли порога.
3. Високий рівень. Створити консольну програму з аргументами номер:марка:пробіг:останнє_ТО та interval:кілометри, клавіатурним введенням і --help. Інтервал додатний, останнє ТО не перевищує пробіг. Обчислити залишок до ТО; прострочені мають від’ємний залишок. Вивести рейтинг за залишком, номером і групові підсумки за марками. Повторний номер і неправильні пробіги: stderr, код 2; успіх 0. Перевірити точну межу ТО.
Варіант 20. Матриці
1. Початковий рівень. Створити консольну програму, яка зчитує два рядки по три цілі числа, зберігає матрицю 2 на 3 та друкує суми рядків і стовпців. Неправильну кількість елементів відхилити.
2. Базовий рівень. Створити консольну програму, яка зчитує дві матриці як рядки чисел через пробіли, розділені крапкою з комою. Перевірити непорожність, прямокутність і однакові розміри. Вивести суму матриць та транспонування першої; не змінювати вихідні списки, показати контрольний результат.
3. Високий рівень. Створити консольну програму з аргументами A:1,2;3,4, B:5,6;7,8, op:add, op:mul, op:transpose або op:det, клавіатурним введенням і --help. Операція одна на запуск; для транспонування й визначника потрібна лише A, визначник лише 3 на 3. Перевірити прямокутність і сумісність розмірів, обчислити списками, надрукувати результат і розміри. Помилки: stderr, код 2; успіх 0.
Варіант 21. Спортивна секція
1. Початковий рівень. Створити консольну програму, яка зчитує віки учасників 6–18 років через пробіл та групує defaultdict(list) за категоріями 6–10, 11–14 і 15–18; надрукувати склад і чисельність кожної групи.
2. Базовий рівень. Створити консольну програму, яка зчитує список учасників і список присутніх на тренуванні. Множинами знайти відсутніх, відхилити невідомі імена; повтори присутності не збільшують кількість. Надрукувати відвідуваність у відсотках; для порожньої секції вивести 0 відсотків.
3. Високий рівень. Створити консольну програму з аргументами roster:ім’я,ім’я та session:номер:ім’я,ім’я, клавіатурним введенням і --help. Порожній список після номера означає заняття без присутніх. Зберігати словник множин, порахувати Counter відвідувань і пропуски кожного учасника, вивести рейтинг і підсумки. Невідомі учасники, повторні номери занять та неправильний формат: stderr, код 2; успіх 0.
Варіант 22. Погода місяця
1. Початковий рівень. Створити консольну програму, яка зчитує від 1 до 31 цілої температури через пробіл, друкує мінімум, максимум, середнє й номери днів нижче нуля.
2. Базовий рівень. Створити консольну програму, яка зчитує від 1 до 31 цілої температури та розмір вікна від 1 до довжини списку. За зрізами обчислити всі ковзні середні, надрукувати початковий і кінцевий день кожного вікна та значення з двома знаками; відхилити неправильне вікно.
3. Високий рівень. Створити консольну програму з аргументами цілих температур і window:розмір, клавіатурним введенням та --help. Для 1–31 дня підтримувати ковзну суму через deque, друкувати середні повних вікон і середні послідовних блоків по 7 днів, включаючи неповний останній блок. Вивести найтепліше вікно; за нічиєї перше. Неправильні числа й вікно: stderr, код 2; успіх 0.
Варіант 23. Ігровий інвентар
1. Початковий рівень. Створити консольну програму, яка зчитує назви предметів через пробіл і через Counter друкує кількості та загальне число предметів.
2. Базовий рівень. Створити консольну програму, яка зчитує назва:вага:цінність до порожнього рядка та додатну місткість рюкзака. Вага додатна ціла, цінність невід’ємна ціла; повторні назви відхилити. Вивести предмети за спаданням цінності й назвою, загальну вагу та перевищення місткості.
3. Високий рівень. Створити консольну програму з аргументами назва:вага:цінність, capacity:місткість, клавіатурним введенням і --help. Упорядкувати предмети за спаданням відношення цінності до ваги, потім назвою; послідовно брати лише ті, що вміщуються. Вивести вибрані й пропущені предмети, вагу та цінність; пояснити, що жадібний вибір не гарантує оптимуму. Повтори й неправильні межі: stderr, код 2; успіх 0. Кожний предмет можна взяти один раз.
Варіант 24. Кур’єрська служба
1. Початковий рівень. Створити консольну програму, яка зчитує коди посилок через пробіл, створює deque та виводить порядок доставки від першої до останньої. Повторні коди відхилити.
2. Базовий рівень. Створити консольну програму, яка зчитує код:район:вага до порожнього рядка. Згрупувати посилки за районами через defaultdict, зберігши порядок надходження. Відхилити повторні коди й недодатну вагу; вивести черги районів, кількість і загальну вагу за кожним районом.
3. Високий рівень. Створити консольну програму з аргументами add:код:район:вага та deliver:район, клавіатурним введенням і --help. Зберігати dict[str, deque] черг доставки, коди унікальні протягом запуску. deliver забирає першу посилку району. Вивести журнал, решту й суму доставленої ваги. Порожня черга, повторний код, невідомий район та недодатна вага: stderr, код 2; успіх 0.
Варіант 25. Сесія студентів
1. Початковий рівень. Створити консольну програму, яка зчитує цілі оцінки одного студента 0–100 через пробіл і друкує середній бал та кількість оцінок нижче 50. Для порожнього списку показати відсутність оцінок.
2. Базовий рівень. Створити консольну програму, яка зчитує студент:предмет:бал до порожнього рядка. Побудувати вкладений словник, відхилити повторну пару студент–предмет і бал поза 0–100. Вивести рейтинг середніх за спаданням та іменем, а також предмети з балами нижче 50.
3. Високий рівень. Створити консольну програму з аргументами subjects:предмет,предмет і студент:предмет:бал, клавіатурним введенням та --help. За вкладеним словником знайти для кожного студента відсутні предмети й оцінки нижче 50. Рейтинг будувати лише для повних результатів, за середнім і іменем; вивести підсумки боргів. Предмети у списку унікальні; невідомі предмети, повторні оцінки й бали поза 0–100: stderr, код 2; успіх 0.
Варіант 26. Авіарейси
1. Початковий рівень. Створити консольну програму, яка зчитує невід’ємні затримки рейсів у хвилинах через пробіл, друкує число затриманих рейсів і максимальну затримку; для порожніх даних максимум позначити як відсутній.
2. Базовий рівень. Створити консольну програму, яка зчитує рейс:аеропорт:затримка до порожнього рядка. Відхилити повторний номер рейсу та від’ємну затримку. Через defaultdict згрупувати рейси за аеропортами, надрукувати середні затримки і список рейсів за спаданням затримки.
3. Високий рівень. Створити консольну програму з аргументами рейс:аеропорт:затримка, find:аеропорт, клавіатурним введенням і --help. Побудувати словник рейсів і індекс аеропортів зі списками кодів. Вивести знайдені рейси за затримкою та кодом, а для всіх аеропортів кількість, середнє й максимум; порожній пошук допустимий. Повторні коди, порожні поля й від’ємні хвилини: stderr, код 2; успіх 0.
Варіант 27. Продуктові кошики
1. Початковий рівень. Створити консольну програму, яка зчитує два кошики як списки назв через пробіл, об’єднує їх через додавання Counter та друкує кількості товарів і загальну кількість одиниць.
2. Базовий рівень. Створити консольну програму, яка зчитує ціни товар:копійки до порожнього рядка й кошик як назви через пробіл. Ціни невід’ємні цілі, назви в прайсі унікальні. Порахувати Counter, вивести чек кількість–ціна–сума та підсумок; невідомий товар відхилити.
3. Високий рівень. Створити консольну програму з аргументами price:товар:копійки, basket:товар,товар і discount:відсоток, введенням і --help. Об’єднати всі кошики через Counter, побудувати чек із сумами в цілих копійках. Знижка 0–100, підсумок обчислити як (total * (100 - percent) + 50) // 100 для округлення до копійки. Вивести початкову суму, знижку й до сплати. Невідомі товари, повторні ціни й неправильні числа: stderr, код 2; успіх 0.
Варіант 28. Родинне дерево
1. Початковий рівень. Створити консольну програму, яка зчитує пари дитина:батько до порожнього рядка й ім’я дитини для пошуку. Зберігати словник одного з батьків; відхилити повторну дитину та збіг імен у парі. Надрукувати знайдене ім’я або повідомлення про відсутність.
2. Базовий рівень. Створити консольну програму, яка зчитує пари дитина:батько до порожнього рядка та ім’я для пошуку. У моделі кожна дитина має не більш як одного записаного з батьків. Словником і множиною відвіданих побудувати ланцюг предків; повторна дитина та цикл є помилками. Вивести предків із відстанню в поколіннях.
3. Високий рівень. Створити консольну програму з аргументами дитина:батько, from:ім’я, to:ім’я, клавіатурним введенням і --help. У моделі один записаний з батьків на дитину. Перевірити відсутність циклів у всьому словнику, знайти найближчого спільного предка двох осіб, включаючи самих осіб, та суму відстаней до нього. Вивести обидва ланцюги й результат або відсутність зв’язку. Повтори, цикли та невідомі особи: stderr, код 2; успіх 0.
Варіант 29. Шаховий турнір
1. Початковий рівень. Створити консольну програму, яка зчитує унікальні імена гравців через пробіл і вкладеними циклами друкує всі різні неупорядковані пари для кругового турніру та їх кількість.
2. Базовий рівень. Створити консольну програму, яка зчитує матчі A:B:результат до порожнього рядка; результат 1, 0.5 або 0 є очками A, B отримує доповнення до 1. Відхилити гру із собою та повторну неупорядковану пару через frozenset. Вивести очки за спаданням та іменем.
3. Високий рівень. Створити консольну програму кругового турніру з аргументами players:A,B,C та матчами A:B:результат, введенням і --help. Результати 1, 0.5, 0; зберігати подвоєні очки цілими. Обчислити коефіцієнт Бухгольца як суму поточних очок суперників із зіграних матчів. Вивести рейтинг за очками, Бухгольцом, іменем та незіграні пари. Повторні пари, невідомі гравці й неправильні результати: stderr, код 2; успіх 0.
Варіант 30. Волонтерський центр
1. Початковий рівень. Створити консольну програму, яка зчитує навички волонтера і потреби зміни через кому. Надрукувати покриті та непокриті потреби через множини.
2. Базовий рівень. Створити консольну програму, яка зчитує ім’я:навичка,навичка до порожнього рядка та непорожній список потреб. Зберігати словник множин, відхилити повторні імена й порожні навички. Для кожного волонтера вивести покриті потреби та спільне покриття всієї команди.
3. Високий рівень. Створити консольну програму з аргументами needs:навички і ім’я:навички, клавіатурним введенням та --help. Жадібно обирати волонтера, що покриває найбільше ще непокритих потреб, за нічиєї першого за іменем. Зупинитися, коли все покрито або прогресу немає. Вивести команду, кроки покриття та незакриті потреби; зазначити, що мінімальний розмір команди не гарантований. Повторні імена, порожні потреби й неправильні записи: stderr, код 2; успіх 0.
Порядок виконання та захисту роботи
- Запишіть формат вхідних записів, обраний рівень і правила для порожнього набору, повторів та невідомих ключів.
- Оберіть колекції та поясніть операцію, заради якої потрібна кожна з них. Оголосіть анотації вкладених структур.
- Відокремте введення і форматування від функцій обробки. Перевіряйте запис до зміни стану, щоб помилка не залишала частково виконану операцію.
- Виконайте звичайний тест, порожній набір, один елемент, повторений ключ, відсутній ключ і граничний випадок задачі. Додайте перевірку нічиєї або незалежності копії, де доречно.
- Обчисліть один результат вручну. Покажіть інваріант: суму кількостей, число оброблених записів або збереження розмірів.
- Запустіть у PyCharm та терміналі. Для високого рівня перевірте також
--help, неправильний аргумент і код завершення. Збережіть код, README та фактичні результати тестів у локальному Git-репозиторії; не додавайте.venvі__pycache__. - На захисті поясніть змінюваність, порядок, копіювання та вартість основних операцій. Покажіть стан колекції у налагоджувачі.