Українська
Завдання
Відповідно до номера свого варіанта виконайте завдання обраного рівня складності.
Кожна умова визначає власні входи й виходи та може виконуватися окремо. Python 3.14, стандартна бібліотека та консольний інтерфейс є достатніми. Анотуйте параметри й результати власних функцій, додайте docstring із межами та одиницями. Списки, кортежі й словники можна використовувати на базовому рівні, показаному в теорії. Власні класи й декоратори не потрібні. functools.cache дозволено використовувати як готовий засіб. Для цілих перевіряйте текст до перетворення; для дійсних задайте контракт числового запису з крапкою та перевіряйте скінченність і область значень. У високому рівні потрібні меню, кілька функцій, пакетний запуск і порівняння результатів. Інтерфейс argparse адаптуйте зі зразка роботи 1: іменовані параметри задають скалярні дані, повторюваний --item приймає записи чи команди з полями через двокрапку. Наприклад, --item "tea:40" --item "bread:60" описує дві позиції замовлення. Формат свого запису, одиниці та приклади наведіть у --help. Якщо аргументів немає, використайте консольні запити. Збирайте всі значення, перевіряйте їх і лише тоді викликайте функцію обчислення: той самий контракт працює для обох інтерфейсів. Для числових скалярів argparse підтримує type=int або type=float; складений запис розділіть через split(":") та перевірте кількість і формат полів до перетворення. parser.error("повідомлення") друкує діагностику в stderr і завершує програму з кодом 2. Успішний запуск і --help повинні завершитися з кодом 0. Файли поки не обов’язкові. Довідка: https://docs.python.org/3.14/library/argparse.html. Усі тарифи, ставки, фізичні коефіцієнти й моделі в задачах навчальні.
Варіанти
Варіант 1. Кулінарні рецепти
1. Початковий рівень. Створити консольну програму, яка вводить масу борошна для 4 порцій і бажане число порцій 1..20; функцією scale повертає потрібну масу. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить маси трьох інгредієнтів і число порцій; функцією з **kwargs та лише іменованим factor обчислює масштабовані маси й друкує таблицю. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка дозволяє через меню обрати один із трьох рецептів, задавати порції та запас 0..20 відсотків; розділяє масштабування й форматування, друкує маси, суму й порівняння з початковим рецептом. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 2. Музичні ноти
1. Початковий рівень. Створити консольну програму, яка вводить номер MIDI 0..127; анотованою функцією обчислює 440 * 2 ** ((n - 69) / 12) і виводить частоту. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить до 12 номерів MIDI і транспозицію від -12 до 12; функція з *args повертає частоти, відхиляючи ноти поза 0..127; виводить таблицю. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка вводить початкову ноту MIDI та число октав 1..3; рекурсивно будує хроматичну послідовність півтонів, перевіряє межу 127, виводить таблицю частот і число рекурсивних викликів. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 3. Молярна маса
1. Початковий рівень. Створити консольну програму, яка вводить числа атомів H та O від 0 до 20; функцією обчислює умовну масу за H=1, O=16 і виводить результат. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить числа атомів H, C, O, N від 0 до 20; функція з **kwargs використовує маси 1, 12, 16, 14 і лише іменовану точність 0..3; виводить внески та суму. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка через меню приймає до 10 складів із кількостями H,C,O,N, перевіряє ненульовий склад, окремими функціями обчислює масу та масові частки; друкує таблицю кожного складу і перевіряє суму часток. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 4. Кіносеанси
1. Початковий рівень. Створити консольну програму, яка вводить ціну квитка та кількість 1..10; функцією зі знижкою за замовчуванням 0 повертає вартість. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить ціну, кількість 1..10 і навчальну знижку 0..50 відсотків; лише іменований параметр discount керує розрахунком; виводить повну суму, знижку й оплату. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка створює замикання-лічильник проданих квитків для двох залів; меню приймає зал і кількість, відхиляє перевищення місткості 30; друкує продажі, залишки та виручку за ціни 100. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 5. Вага на планетах
1. Початковий рівень. Створити консольну програму, яка вводить масу 1..500 кг; функцією обчислює силу тяжіння на Землі за g=9.81 і виводить ньютони. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить масу та обирає Землю, Місяць або Марс із g=9.81, 1.62, 3.71; функція з параметром g за замовчуванням повертає силу; друкує таблицю. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка вводить масу й швидкість стрибка 0..10 м/с; передає функції розрахунку сили m*g та висоти v*v/(2*g) функції формування звіту; друкує результати для трьох небесних тіл і відношення висот до земної. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 6. Трикутник Серпінського
1. Початковий рівень. Створити консольну програму, яка вводить глибину 0..4; рекурсивною функцією обчислює число малих трикутників 3 ** n і виводить його. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить глибину 0..4; рекурсивно будує символьний трикутник: база один символ *, наступний рівень має попередній трикутник над двома його копіями; друкує рядки. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка через меню приймає глибину 0..5 та символ; функції окремо будують і друкують трикутник Серпінського, підраховують непорожні символи та виклики; виводить рисунок і перевірку числа символів за 3 ** n. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 7. Комбінаторика
1. Початковий рівень. Створити консольну програму, яка вводить n від 0 до 15; рекурсивною анотованою функцією обчислює факторіал і виводить його. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить 0 <= k <= n <= 20; функціями обчислює розміщення n!/(n-k)! і сполучення n!/(k!(n-k)!); виводить цілі результати. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка вводить n від 0 до 20; рекурсією з cache обчислює ряд трикутника Паскаля через C(n,k)=C(n-1,k-1)+C(n-1,k); порівнює з формулою факторіалів, друкує ряд та суму 2 ** n. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 8. Ханойські вежі
1. Початковий рівень. Створити консольну програму, яка вводить n від 0 до 10; рекурсивною функцією рахує кількість ходів T(0)=0, T(n)=2*T(n-1)+1 і виводить її. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить n від 1 до 8 та назви трьох різних стрижнів; рекурсивною функцією друкує перенесення дисків і загальну кількість ходів. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка вводить n від 1 до 8; функції генерують ходи й окремо перевіряють їх на трьох списках дисків, забороняючи більший над меншим; друкує ходи, число, глибину та ознаку правильного кінцевого стану. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 9. Бінарний пошук
1. Початковий рівень. Створити консольну програму, яка вводить ціль у фіксованому списку [2,5,8,11,14]; рекурсивна функція повертає індекс або None; виводить результат. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить до 20 цілих у неспадному порядку та ціль; перевіряє порядок, виконує рекурсивний пошук і повертає індекс та число порівнянь. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка через меню приймає відсортований список до 50 цілих і кілька цілей; окремі функції реалізують рекурсивний та ітеративний пошук першого входження; друкує індекси, кількість кроків і перевірку збігу. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 10. Заробітна плата
1. Початковий рівень. Створити консольну програму, яка вводить години 0..200 і погодинну ставку; функцією повертає добуток і друкує нарахування. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить години 0..200, ставку й навчальне утримання 0..40 відсотків; функція з лише іменованим tax повертає пару нарахування й виплати; виводить звіт. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка через меню приймає до 10 працівників із годинами та ставками; функції обчислюють нарахування, навчальну премію 10 відсотків після 160 годин і утримання 20 відсотків; друкує вирівняну таблицю та підсумки. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 11. Перетворення точок
1. Початковий рівень. Створити консольну програму, яка вводить координати точки та коефіцієнт масштабу; функція повертає пару нових координат. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить точку, зсув dx, dy і масштаб; окремі типізовані функції повертають координати після масштабу та зсуву; виводить обидва порядки перетворень. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка вводить до 10 точок і кут у градусах; функція apply приймає функцію повороту або масштабу, застосовує до точок; друкує вихідні та нові координати, перевіряє збереження відстані від початку при повороті. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 12. Метод бісекції
1. Початковий рівень. Створити консольну програму, яка вводить число a від 1 до 100; функцією бісекції на [0,a] знаходить корінь x*x-a з точністю 0.001 і виводить його. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить межі та точність від 0.000001 до 0.01; функція приймає функцію x*x-2, перевіряє зміну знака й повертає корінь і кількість кроків. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка через меню обирає x*x-2 або x*x*x-x-2, приймає межі й точність; універсальна функція бісекції отримує функцію як аргумент, обмежує число кроків 100; друкує корінь, нев’язку й звіт про збіжність. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 13. Рейтинг Ело
1. Початковий рівень. Створити консольну програму, яка вводить два рейтинги 0..3000 і результат 0, 0.5, 1; функцією обчислює Rnew=R+32*(S-1/(1+10**((Ropp-R)/400))). Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить рейтинги, результат і коефіцієнт K від 1 до 64; функція з K за замовчуванням 32 повертає нові рейтинги обох гравців; друкує очікування й зміни. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка через меню приймає початкові рейтинги двох гравців та до 20 результатів; окремі функції розраховують очікування, оновлення і звіт, використовуючи старі рейтинги для обох змін; друкує історію і перевіряє сталість суми рейтингів. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 14. Фотоекспозиція
1. Початковий рівень. Створити консольну програму, яка вводить діафрагму N від 1 до 32 і витримку t від 0.0001 до 30; функція обчислює EV=log2(N*N/t). Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить до 10 пар N, t; функція з *args і лише іменованою точністю 0..3 обчислює EV; перевіряє додатність і друкує таблицю. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка вводить початкові N, t і до 10 нових діафрагм; функції обчислюють еквівалентні витримки t2=t*(N2/N)**2 і EV; друкує таблицю, відхиляє витримки поза 0.0001..30 і перевіряє сталість EV. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 15. Цифровий корінь
1. Початковий рівень. Створити консольну програму, яка вводить ціле від 0 до 10 ** 12; рекурсивно обчислює суму цифр і виводить результат. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить ціле від 0 до 10 ** 12; повторює рекурсивну суму цифр до однієї цифри, повертає корінь і число проходів. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка через меню приймає межі 1..10000 завширшки не більше 1000; функції знаходять цифровий корінь і перевіряють подільність числа на суму цифр, друкує числа Харшад із коренями та кількість. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 16. Степінь за модулем
1. Початковий рівень. Створити консольну програму, яка вводить основу 0..1000, показник 0..100 та модуль 2..1000; рекурсивно обчислює степінь за модулем і виводить його. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить основу, показник 0..10000 та модуль 2..10000; швидка рекурсія повертає результат і число викликів; порівнює з pow(a,n,m). Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка через меню приймає непарне n від 3 до 10000 та основи 2..n-1; функції перевіряють gcd і рівність a**(n-1) mod n=1, друкує таблицю свідків; пояснює, що проходження тестів Ферма не доводить простоту. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 17. Алгоритм Луна
1. Початковий рівень. Створити консольну програму, яка вводить рядок із 2..19 цифр; функцією перевіряє контрольну суму Луна, подвоюючи кожну другу цифру справа, крім контрольної, і віднімаючи 9 понад 9; друкує True або False. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить основу із 1..18 цифр; функція перебирає контрольну цифру 0..9 і повертає доповнений номер, інша функція перевіряє його; друкує обидва результати. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка через меню перевіряє або доповнює синтетичні числові ідентифікатори; функції Луна, форматування і перевірки вводу незалежні; друкує маскований номер, суму та результат, не визначає реальну платіжну систему й не приймає персональні дані. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 18. Прогноз населення
1. Початковий рівень. Створити консольну програму, яка вводить N0 від 1 до 1000000, річну частку r від -0.1 до 0.1 і число років 0..20; функцією рахує N0*(1+r)**t. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить N0, місткість K>=N0, r від 0 до 0.1 та роки 0..20; функціями обчислює експоненційну й дискретну логістичну модель Nnext=N+r*N*(1-N/K); друкує таблицю. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка через меню обирає модель, приймає N0, K, r та горизонт до 50 років; передає функцію річного кроку функції прогнозу, друкує річні значення, абсолютні прирости і підсумок; усі дані є навчальною моделлю. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 19. Числа Фібоначчі
1. Початковий рівень. Створити консольну програму, яка вводить n від 0 до 20; рекурсивна функція з базами 0, 1 повертає F(n) і друкує його. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить n від 0 до 30; окремі функції з cache та циклом обчислюють F(n), виводить значення і збіг. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка через меню приймає n від 0 до 25; порівнює просту рекурсію, cache й цикл, замиканням рахує виклики; перед кожним дослідом очищає кеш, друкує результати й лічильники. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 20. Акустика
1. Початковий рівень. Створити консольну програму, яка вводить рівень L від 0 до 100 дБ; функція переводить його у відносну інтенсивність 10 ** (L/10). Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить до 10 рівнів 0..100 дБ; функція з *args повертає 10*log10(sum(10**(L/10))); друкує сумарний рівень. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка через меню додає й вилучає до 10 навчальних джерел, функції перетворюють рівні та обчислюють суму; друкує внески, загальний рівень і зміну після вилучення, окремо обробляє відсутність джерел. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 21. Вартість доставки
1. Початковий рівень. Створити консольну програму, яка вводить масу від 0.1 до 30 кг; функція зі ставкою за замовчуванням 12 повертає 30+12*mass. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить масу, зону 1..3 та терміновість; функція має лише іменовані zone і urgent, тариф (30+12*mass)*zone, терміновість додає 50 відсотків; друкує складові. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка через меню приймає до 10 відправлень, масу, зону, терміновість і оголошену вартість; функції додають страхування 1 відсоток вартості, друкує вирівняний реєстр, суму мас і оплат. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 22. Шифр Цезаря
1. Початковий рівень. Створити консольну програму, яка вводить латинський текст і зсув 0..25; анотована функція шифрує літери зі збереженням регістру, решту лишає без змін. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить латинський текст і довільний цілий зсув; функції шифрування та розшифрування нормалізують його за модулем 26, виводить результат і відновлений текст. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка через меню обирає шифрування, відновлення або перебір 26 зсувів; функції окремо обробляють символ, текст і звіт; друкує всі кандидати перебору та перевіряє кругове перетворення. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 23. Кольорові моделі
1. Початковий рівень. Створити консольну програму, яка вводить три цілі канали RGB 0..255; функція повертає HEX-рядок із шести цифр. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить RGB або шестизначний HEX; окремі функції виконують обидва перетворення, перевіряють формат і друкують результат та зворотну перевірку. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка через меню приймає RGB і перетворює в HSV за власними функціями: V=max/255, S=0 для max=0, інакше (max-min)/max; визначає H за найбільшим каналом; друкує HSV і тестує чорний, білий та первинні кольори. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 24. Перестановки
1. Початковий рівень. Створити консольну програму, яка вводить до 5 різних латинських літер; рекурсивна функція друкує всі перестановки. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить до 7 різних латинських літер і k від 0 до довжини; рекурсія будує розміщення довжини k, повертає список і виводить кількість. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка через меню приймає до 7 латинських літер із можливими повторами; функція рекурсивно будує лише унікальні перестановки, друкує їх та кількість, порівнює з n!, поділеним на факторіали частот. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 25. Енергоспоживання будинку
1. Початковий рівень. Створити консольну програму, яка вводить потужність 0..5000 Вт і час 0..24 год; функцією рахує кВт·год та виводить результат. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить до 10 пар потужність, час; функція з *args та лише іменованим тарифом за замовчуванням 4 повертає енергію й навчальну вартість. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка через меню веде до 10 приладів із денним і нічним часом, сума часів до 24; функції застосовують навчальні тарифи 4 та 2, друкує таблицю енергії, оплат і підсумки. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 26. Ігрові кубики
1. Початковий рівень. Створити консольну програму, яка вводить число кубиків 1..5; рекурсивна функція рахує кількість усіх результатів шестигранних кубиків і виводить її. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить число кубиків 1..5 і цільову суму; рекурсивна функція рахує способи отримання суми, виводить число й точну ймовірність ways/6**n. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка вводить число кубиків 1..5; рекурсивно рахує розподіл сум, незалежним вкладеним перебором або ітеративним накопиченням перевіряє його; друкує таблицю та перевіряє суму кількостей 6**n. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 27. Туристичний маршрут
1. Початковий рівень. Створити консольну програму, яка вводить відстань 0..50 км і підйом 0..3000 м; функція обчислює навчальний час d/5+h/600 у годинах. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить до 10 ділянок із відстанню та підйомом; функція з лише іменованими швидкостями 5 і 600 за замовчуванням повертає час; виводить таблицю й суму. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка через меню приймає ділянки та паузу після кожної у хвилинах 0..60; функції підсумовують рух і відпочинок, друкує накопичений час та попереджає про перевищення навчального ліміту 8 годин. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 28. Суми рядів
1. Початковий рівень. Створити консольну програму, яка вводить n від 1 до 1000; функція підсумовує 1/k**2 для k від 1 до n і друкує суму. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить n від 1 до 1000 та обирає член 1/k або 1/k**2; універсальна функція приймає функцію члена ряду й повертає суму. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка через меню обирає геометричний ряд q**k при abs(q)<1 або ряд 1/k**2, задає n до 10000; функції обчислюють суми n і 2*n членів, друкує різницю; для геометричного порівнює з (1-q**n)/(1-q). Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 29. Паліндроми в системах числення
1. Початковий рівень. Створити консольну програму, яка вводить ціле 0..100000 та основу 2..16; рекурсивна функція повертає запис цифрами 0..9, A..F і друкує його. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить число й основу 2..16; окремі рекурсивні функції утворюють запис та перевіряють паліндром, друкує обидва результати. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка через меню приймає діапазон 0..10000 завширшки до 1000 і дві основи 2..16; функції знаходять числа-паліндроми в обох системах, друкує таблицю записів і кількість. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Варіант 30. Капіталізація вкладу
1. Початковий рівень. Створити консольну програму, яка вводить суму 0..1000000, навчальну річну ставку 0..20 відсотків і роки 0..20; рекурсивна функція повертає капітал із річним нарахуванням. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
2. Базовий рівень. Створити консольну програму, яка вводить суму, ставку й роки; функції рекурсії та циклу обчислюють річну капіталізацію, друкує таблицю й перевіряє збіг із допустимою похибкою 0.01. Анотувати параметри й результати власних функцій та задокументувати допустимі дані.
3. Високий рівень. Створити консольну програму, яка через меню створює два незалежні замикання-накопичувачі, приймає поповнення й команду річного нарахування за навчальною ставкою 5 відсотків; друкує історію, суми внесків і прирости кожного рахунку. Анотувати параметри й результати власних функцій та задокументувати допустимі дані. Додати пакетний запуск: скалярні дані передавати іменованими аргументами, рядки набору або команди меню – повторюваним --item із полями через двокрапку. Назви параметрів, порядок полів і приклад складеного значення описати в --help. Без аргументів запитувати дані з клавіатури. Помилки формату й області виводити в stderr з кодом 2; успіх і довідка мають код 0. Підсумковий звіт оформити вирівняною таблицею та додати щонайменше п’ять контрольних запусків із граничними й помилковими даними.
Порядок виконання та захисту роботи
- Запишіть варіант, рівень, формат і межі введення. Виділіть функції обчислення, перевірки й подання результату.
- Для кожної власної функції визначте параметри, тип результату, передумови та можливі побічні ефекти. Додайте анотації й docstring.
- Реалізуйте програму в окремому каталозі локального Git-репозиторію. Уникайте спільних змінюваних аргументів за замовчуванням.
- Перевірте звичайний, граничний і недопустимий випадки та порожній результат, якщо він можливий. Для рекурсії додайте базу й один крок; для замикання створіть два незалежні екземпляри.
- Зіставте один результат із ручним розрахунком. Для дійсних чисел укажіть допустиму похибку; для двох реалізацій порівняйте результати на одному наборі вхідних даних.
- Запустіть програму в PyCharm і терміналі, збережіть код, README з інструкцією та таблицю «вхід – очікування – фактичний результат». Не додавайте
.venvі__pycache__; GitHub необов’язковий. - На захисті поясніть підпис функції, правило LEGB і завершення рекурсії. Покажіть, що зміниться після переприсвоєння параметра або зміни переданого списку.