Українська
Завдання
Відповідно до номера свого варіанта виконайте завдання обраного рівня складності.
Варіанти
Варіант 1. SMS-повідомлення
1. Початковий рівень. Створити консольну програму, яка зчитує SMS і виводить усі номери формату +380 та дев’ять цифр ASCII, обмежені початком, кінцем або пробілом.
2. Базовий рівень. Створити консольну програму, яка зчитує кілька SMS до порожнього рядка, витягає номери +380 з дев’ятьма цифрами та суми виду 12,50 грн; виводить кількість номерів і суму в копійках, ігноруючи записи з від’ємною сумою.
3. Високий рівень. Створити консольну програму, яка приймає SMS як окремі текстові аргументи; для кожного витягає номери +380 з дев’ятьма цифрами й невід’ємні суми з двома копійками та позначкою грн; групує записи за номером, друкує таблицю кількостей і сум та перелік нерозібраних повідомлень. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 2. Субтитри SRT
1. Початковий рівень. Створити консольну програму, яка зчитує мітку HH:MM:SS,mmm, перевіряє діапазони годин 00–99, хвилин і секунд 00–59, мілісекунд 000–999 та виводить час у мілісекундах.
2. Базовий рівень. Створити консольну програму, яка зчитує початкову й кінцеву мітки HH:MM:SS,mmm та цілий зсув у мілісекундах; перевіряє діапазони, порядок і невід’ємність результату та виводить зсунуту пару.
3. Високий рівень. Створити консольну програму, яка приймає блоки SRT як текстові аргументи й зсув через --shift; блок складається з номера, двох міток HH:MM:SS,mmm, розділених -->, і тексту; перевіряє послідовність номерів, час 00:00:00,000–99:59:59,999 та відсутність перекриття; виводить зсунуті блоки й таблицю тривалостей. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 3. Навчальна політика пароля
1. Початковий рівень. Створити консольну програму, яка зчитує навчальний рядок і виводить його довжину та наявність великих ASCII-літер, малих ASCII-літер і цифр.
2. Базовий рівень. Створити консольну програму, яка зчитує навчальний рядок, перевіряє довжину 8–32, лише ASCII-літери, цифри й !@#$%, наявність кожного класу та виводить усі порушення без повторного друку самого рядка.
3. Високий рівень. Створити консольну програму, яка приймає лише штучні тестові рядки; перевіряє довжину 8–32, дозволені ASCII-літери, цифри й !@#$% та наявність усіх чотирьох класів; друкує таблицю номерів тестів і порушень, порівнює єдиний regex з окремими перевірками; не оцінює реальну стійкість і не записує рядки у звіт. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 4. Навчальні номерні знаки
1. Початковий рівень. Створити консольну програму, яка зчитує знак формату дві великі ASCII-літери, чотири цифри, дві великі ASCII-літери та виводить відповідність формату.
2. Базовий рівень. Створити консольну програму, яка зчитує номерні знаки до порожнього рядка, вилучає звичайні пробіли, переводить латинські літери у верхній регістр, перевіряє формат дві літери, чотири цифри, дві літери та виводить унікальні нормалізовані значення.
3. Високий рівень. Створити консольну програму, яка приймає навчальні знаки формату AA1234BB і словник кодів через повторювану опцію --region КОД:НАЗВА; валідує код як дві ASCII-літери, виявляє дублікати, друкує таблицю знаків за переданими регіонами та окрему групу невідомих кодів; не виводить регіон за зовнішнім довідником. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 5. Журнал доступу
1. Початковий рівень. Створити консольну програму, яка зчитує запис HH:MM:SS GET /шлях 200 і виводить час, метод, шлях та код через іменовані групи; відхиляє зайві поля.
2. Базовий рівень. Створити консольну програму, яка зчитує записи журналу до порожнього рядка; допускає методи GET, POST, час 00:00:00–23:59:59 і код 100–599; виводить частоти кодів та номери неправильних рядків.
3. Високий рівень. Створити консольну програму, яка приймає записи HH:MM:SS МЕТОД /шлях КОД як аргументи, підтримує --status для фільтра коду 100–599; перевіряє час, метод GET або POST і шлях без пробілів, друкує частоти шляхів, кодів і кількість відхилених записів. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 6. Шифр Віженера
1. Початковий рівень. Створити консольну програму, яка зчитує український текст і цілий зсув, циклічно зміщує літери алфавіту абвгґдеєжзиіїйклмнопрстуфхцчшщьюя, зберігає регістр і пунктуацію та виводить результат.
2. Базовий рівень. Створити консольну програму, яка зчитує український текст і непорожній ключ із українських літер; шифрує за Віженером у 33-літерному алфавіті, просуваючи ключ лише на літерах, і виводить шифротекст та результат зворотного перетворення.
3. Високий рівень. Створити консольну програму, яка приймає текст, ключ з українських літер і режим --mode encode або decode; застосовує NFC, зберігає регістр і пунктуацію, просуває ключ лише на літерах; виводить перетворений текст та частотну таблицю; описує алгоритм як навчальний, непридатний для захисту секретів. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 7. Таблична транслітерація
1. Початковий рівень. Створити консольну програму, яка зчитує слово й замінює українські ж, ч, ш, щ на zh, ch, sh, shch, відповідно, решту символів зберігає та виводить текст.
2. Базовий рівень. Створити консольну програму, яка зчитує рядок і таблицю пар символ=рядок до порожнього рядка; відхиляє повторний ключ і ключ не з однієї кодової точки; виводить транслітерацію без послідовного повторного перетворення вже отриманих фрагментів.
3. Високий рівень. Створити консольну програму, яка приймає текст і повторювані правила --map символ=рядок, а також окремі правила --first для першої літери слова; словом вважає послідовність українських літер; перевіряє дублікати, виводить результат і статистику замін; правила визначає користувач, без заяв про відповідність державному стандарту. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 8. Електронні адреси
1. Початковий рівень. Створити консольну програму, яка зчитує навчальну адресу з ASCII-літер, цифр, крапок і підкреслень перед одним @, доменом з ASCII-літер і крапкою перед суфіксом з 2–10 літер; виводить локальну частину й домен або помилку.
2. Базовий рівень. Створити консольну програму, яка зчитує список навчальних адрес, розділених крапкою з комою; локальна частина складається з ASCII-літер, цифр, крапок і підкреслень, домен має два непорожні літерні сегменти; відхиляє порожні частини, нормалізує лише регістр домену та друкує групи.
3. Високий рівень. Створити консольну програму, яка приймає навчальні адреси зі спрощеним контрактом: локальна частина з ASCII-літер, цифр, крапок і підкреслень, один @, домен із двох літерних сегментів; нормалізує регістр домену, зберігає регістр локальної частини; через --domain фільтрує записи й друкує таблицю частот, не стверджуючи існування скриньок. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 9. Шаблони листів
1. Початковий рівень. Створити консольну програму, яка зчитує ім’я та виводить привітання f-рядком із кількістю кодових точок у введенні.
2. Базовий рівень. Створити консольну програму, яка зчитує ім’я і назву курсу, створює t-рядок для довіреного HTML-абзацу, екранує лише текстові підстановки через html.escape та виводить результат; відхиляє conversion і format_spec.
3. Високий рівень. Створити консольну програму, яка приймає записи ім’я:курс і формує для кожного HTML-абзац обробником t-рядків; дозволяє підстановки лише в текстових вузлах, забороняє специфікації формату й перетворення, виводить абзаци та таблицю кількостей; перевіряє амперсанди, лапки, кутові дужки, порожні поля й сусідні підстановки. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 10. Касовий чек
1. Початковий рівень. Створити консольну програму, яка зчитує назву товару, цілу кількість і цілу ціну в копійках та виводить вирівняний рядок чеку і суму з двома десятковими знаками.
2. Базовий рівень. Створити консольну програму, яка зчитує записи назва;кількість;ціна_коп до порожнього рядка, відхиляє від’ємні значення й довгі назви понад 20 символів; друкує таблицю позицій і загальну суму без обчислень через float.
3. Високий рівень. Створити консольну програму, яка приймає записи назва;кількість;ціна_коп, опцію --discount з цілим відсотком 0–100; перевіряє дані, рахує знижку на загальну суму з округленням півкопійки вгору, друкує чек, суму до й після знижки; для сум 0–999 гривень додає текст за власною явно описаною таблицею числівників. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 11. Навчальна розмітка
1. Початковий рівень. Створити консольну програму, яка зчитує рядок із необов’язковим префіксом # і виводить екранований HTML: h1 для заголовка або p для звичайного тексту.
2. Базовий рівень. Створити консольну програму, яка зчитує рядки до порожнього; перетворює лише заголовки # , ## та абзаци, екранує весь користувацький текст і виводить HTML; не інтерпретує довільні теги.
3. Високий рівень. Створити консольну програму, яка приймає текст зі спрощеною розміткою: заголовки # , ## , пункти - й непорожні абзаци; формує збалансовані списки та екранує весь текст, забороняє вкладені списки; друкує HTML і таблицю кількостей елементів; позначає формат як навчальний піднабір, а не повний Markdown. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 12. Статистика читабельності
1. Початковий рівень. Створити консольну програму, яка зчитує текст і виводить кількість непорожніх слів після split та середню довжину слова без крайових .,!?.
2. Базовий рівень. Створити консольну програму, яка зчитує текст, ділить речення за .?!, слова за пробілами, рахує непорожні частини та середню кількість слів у реченні; виводить нульові значення для порожнього тексту.
3. Високий рівень. Створити консольну програму, яка приймає текст та --long з порогом довжини слова; речення розділяє за .?!, слова визначає як послідовності українських літер; друкує таблицю довжин, частку довгих слів і середню довжину речень; не називає ці навчальні показники стандартизованим індексом читабельності. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 13. Анаграми й паліндроми
1. Початковий рівень. Створити консольну програму, яка зчитує рядок, застосовує NFC і casefold, залишає лише літери та виводить, чи є непорожній результат паліндромом.
2. Базовий рівень. Створити консольну програму, яка зчитує слова до порожнього рядка, нормалізує NFC і регістр, відхиляє неалфавітні символи, групує анаграми за відсортованими літерами та друкує лише групи з двома різними словами.
3. Високий рівень. Створити консольну програму, яка приймає слова й режим --mode anagram або palindrome; застосовує NFC та casefold, перевіряє літерний склад, зберігає початкові написи; друкує групи анаграм або список паліндромів, частоти й кількість відхилених записів. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 14. Дати в тексті
1. Початковий рівень. Створити консольну програму, яка зчитує дату DD.MM.YYYY, перевіряє шаблон та календар через datetime.date і виводить ISO-дату або причину помилки.
2. Базовий рівень. Створити консольну програму, яка зчитує текст, знаходить дати DD.MM.YYYY і YYYY-MM-DD, перевіряє календар та виводить лише дійсні дати у спільному ISO-форматі з позиціями.
3. Високий рівень. Створити консольну програму, яка приймає текст і --format iso або ua; через функцію re.sub перетворює дійсні дати форматів DD.MM.YYYY та YYYY-MM-DD, недійсні зберігає; друкує текст і таблицю успішних та відхилених перетворень з позиціями у початковому тексті. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 15. Телефонні номери
1. Початковий рівень. Створити консольну програму, яка зчитує номер +380 з дев’ятьма цифрами ASCII та виводить результат перевірки fullmatch без дозволу кінцевого переносу.
2. Базовий рівень. Створити консольну програму, яка зчитує номери до порожнього рядка; дозволяє лише +380XXXXXXXXX або 0XXXXXXXXX, перетворює їх у міжнародний формат, виводить унікальні значення й повідомляє про помилки.
3. Високий рівень. Створити консольну програму, яка приймає номери форматів +380XXXXXXXXX або 0XXXXXXXXX, нормалізує їх, групує за двома цифрами після +380; підтримує --prefix і друкує частоти та дублікати; не визначає поточного оператора за префіксом. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 16. Навчальна перевірка IBAN
1. Початковий рівень. Створити консольну програму, яка зчитує рядок, видаляє звичайні пробіли та перевіряє форму UA і 27 цифр ASCII; виводить нормалізований запис або помилку без перевірки рахунку.
2. Базовий рівень. Створити консольну програму, яка зчитує навчальний IBAN: UA і 27 цифр; переносить перші чотири символи в кінець, замінює літери числами A=10…Z=35, обчислює залишок за модулем 97 та виводить, чи дорівнює він 1; не підтверджує існування рахунку.
3. Високий рівень. Створити консольну програму, яка приймає лише штучні IBAN формату UA і 27 цифр, підтримує вилучення пробілів; перевіряє форму та алгоритм mod97 з переносом перших чотирьох символів і A=10…Z=35, друкує таблицю причин відхилення й маскованих номерів; не використовує реальні банківські реквізити. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 17. Азбука Морзе
1. Початковий рівень. Створити консольну програму, яка зчитує текст з літер A, B, C, E, T; використовує коди .-, -..., -.-., ., - та виводить коди через пробіл, відхиляючи інші символи.
2. Базовий рівень. Створити консольну програму, яка зчитує режим encode або decode і текст; підтримує A=.-, B=-..., C=-.-., E=., T=-, межу слів /; виводить перетворення або помилку невідомого символу чи коду.
3. Високий рівень. Створити консольну програму, яка приймає текст, --mode та повторювані правила --map літера:код; коди містять тільки крапки й дефіси, літери є одиничними ASCII-літерами, правила взаємно однозначні; друкує результат із пробілами між кодами й / між словами та таблицю частот. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 18. SQL-шаблони значень
1. Початковий рівень. Створити консольну програму, яка зчитує ім’я та мінімальний бал, створює t-рядок довіреного запиту з двома підстановками й виводить сталі частини та значення окремо без виконання SQL.
2. Базовий рівень. Створити консольну програму, яка зчитує ім’я й цілий бал 0–100; обробляє довірений t-рядок запиту, повертаючи SQL із маркерами ? та список значень; забороняє conversion і format_spec та друкує обидві структури без з’єднання значень із SQL.
3. Високий рівень. Створити консольну програму, яка приймає записи ім’я:бал і для кожного генерує пару SQL із ? та список параметрів для одного довіреного SELECT; перевіряє бал 0–100, забороняє підстановки ідентифікаторів і форматування, друкує пари та підсумок; тестує апострофи, порожні імена, сусідні підстановки, не виконує запити. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 19. Маскування слів
1. Початковий рівень. Створити консольну програму, яка зчитує текст і одне непорожнє заборонене слово, замінює буквальні входження слова з урахуванням регістру на зірочки тієї самої довжини й виводить текст.
2. Базовий рівень. Створити консольну програму, яка зчитує текст і список слів, розділених комами; екранує слова через re.escape, замінює через функцію re.sub цілі слова без урахування регістру на зірочки та виводить число замін; словом вважає послідовність \w.
3. Високий рівень. Створити консольну програму, яка приймає текст і повторювані --word, перевіряє непорожні слова з літер, будує екрановані альтернативи та виконує заміни цілих слів без урахування регістру; друкує перетворений текст і частоти замін; явно описує межу \b та обмеження слів з апострофом. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 20. Хештеги та згадки
1. Початковий рівень. Створити консольну програму, яка зчитує текст і виводить знайдені хештеги: # та 1–30 ASCII-літер, цифр або підкреслень, відокремлені пробілом чи краєм тексту.
2. Базовий рівень. Створити консольну програму, яка зчитує текст, витягає токени з # або @ і 1–30 ASCII-літерами, цифрами чи підкресленнями, нормалізує регістр і виводить частоти окремо для двох категорій.
3. Високий рівень. Створити консольну програму, яка приймає тексти повідомлень і опцію --top з додатним числом; витягає токени #/@ з 1–30 ASCII-літер, цифр чи підкреслень між пробілами або краями, підраховує частоти без урахування регістру й друкує дві таблиці з однаковими частотами в алфавітному порядку. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 21. Масштабування рецепта
1. Початковий рівень. Створити консольну програму, яка зчитує рядок назва:кількість:одиниця з невід’ємною кількістю та одиницею г або мл, виводить структуровані поля.
2. Базовий рівень. Створити консольну програму, яка зчитує інгредієнти назва:кількість:одиниця, початкову й потрібну кількість порцій; перевіряє додатні порції та невід’ємні кількості, масштабує і виводить таблицю з двома знаками після крапки.
3. Високий рівень. Створити консольну програму, яка приймає інгредієнти назва:кількість:одиниця, опції --from і --to для додатних кількостей порцій; допускає одиниці г, мл, шт, сумує лише однакові назви й одиниці; друкує масштабовану таблицю та підсумки окремо за одиницями. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 22. Закінчення віршованих рядків
1. Початковий рівень. Створити консольну програму, яка зчитує рядок вірша, видаляє крайову пунктуацію .,!?;: з останнього слова та виводить його останні дві літери після casefold.
2. Базовий рівень. Створити консольну програму, яка зчитує чотири рядки вірша, нормалізує NFC, виділяє останні слова й групує їх за двома останніми літерами; виводить навчальну схему AABB або іншу послідовність кодів, не заявляючи фонетичної перевірки рими.
3. Високий рівень. Створити консольну програму, яка приймає рядки вірша й опцію --suffix від 1 до 5; виділяє останнє слово з українських літер, нормалізує NFC та регістр, групує за заданим суфіксом; друкує таблицю рядків, закінчень і номерів груп, відхиляючи рядки без слів. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 23. Нумерація розділів
1. Початковий рівень. Створити консольну програму, яка зчитує заголовок число. назва, перевіряє додатний номер і непорожню назву та виводить дві частини.
2. Базовий рівень. Створити консольну програму, яка зчитує заголовки номер. назва до порожнього рядка, перевіряє послідовність номерів від 1 і виводить номери рядків із пропусками чи повторами.
3. Високий рівень. Створити консольну програму, яка приймає заголовки номер. назва і початок нумерації через --start; перевіряє додатні номери, друкує перенумеровані заголовки зі збереженими назвами та таблицю старих і нових номерів; відхиляє некоректну форму, але дозволяє повтори старих номерів. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 24. Навчальна виписка витрат
1. Початковий рівень. Створити консольну програму, яка зчитує рядок дата;категорія;сума_коп і виводить три поля, перевіряючи ISO-дату та невід’ємне ціле число копійок.
2. Базовий рівень. Створити консольну програму, яка зчитує витрати YYYY-MM-DD;категорія;сума_коп, перевіряє календар і додатні суми, групує за категорією та виводить таблицю й підсумок у гривнях з копійками.
3. Високий рівень. Створити консольну програму, яка приймає штучні записи YYYY-MM-DD;категорія;сума_коп, опції --from і --to для діапазону дат; перевіряє календар, порядок меж і невід’ємні суми; друкує витрати за категоріями, частки та загальний підсумок без двійкової грошової арифметики. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 25. Навчальна INI-конфігурація
1. Початковий рівень. Створити консольну програму, яка зчитує рядок ключ=значення, розділяє лише за першим =, очищає краї та виводить поля; відхиляє порожній ключ.
2. Базовий рівень. Створити консольну програму, яка зчитує рядки до порожнього, допускає ASCII-ключі [A-Za-z_][A-Za-z0-9_]*, ігнорує коментарі з ; на початку, відхиляє дублікати та друкує словник ключів і значень.
3. Високий рівень. Створити консольну програму, яка приймає текст із секціями [назва], ASCII-ключами [A-Za-z_][A-Za-z0-9_]* і рядками ключ=значення; коментар починається з ; лише на початку рядка; забороняє повтори секцій і ключів у секції, виводить таблицю полів та звіт помилок із номерами рядків; явно позначає формат як піднабір INI. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 26. Вирівнювання присвоєнь
1. Початковий рівень. Створити консольну програму, яка зчитує навчальний рядок ім’я = ціле_число з ASCII-ідентифікатором і виводить його з одним пробілом навколо =.
2. Базовий рівень. Створити консольну програму, яка зчитує лише прості присвоєння ASCII-ідентифікаторам цілих чисел без коментарів, перевіряє кожний рядок і вирівнює знаки = за найдовшим ім’ям.
3. Високий рівень. Створити консольну програму, яка приймає текст із простими присвоєннями [A-Za-z_][A-Za-z0-9_]* цілих чисел, без рядкових літералів і коментарів; підтримує --width як мінімальну ширину імені, відхиляє іншу граматику та друкує вирівняний текст і таблицю змінених рядків; не позиціонує програму як форматер довільного Python. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 27. Бібліографічний шаблон
1. Початковий рівень. Створити консольну програму, яка зчитує поля автор;назва;рік, перевіряє три непорожні поля та рік 1900–2100 і виводить Автор. Назва. Рік..
2. Базовий рівень. Створити консольну програму, яка зчитує описи автор;назва;рік, перевіряє рік 1900–2100 та непорожні поля, сортує за автором і назвою після casefold, виводить нумерований список.
3. Високий рівень. Створити консольну програму, яка приймає записи автор;назва;рік, підтримує --sort author або year, знаходить дублікати після NFC та casefold, друкує нумерований список і таблицю повторів; використовує заданий навчальний шаблон без заяв про повну відповідність бібліографічному стандарту. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 28. Навчальні URL
1. Початковий рівень. Створити консольну програму, яка зчитує URL виду https://домен/шлях, де домен містить ASCII-літери, цифри, дефіси й крапки, а шлях не містить пробілів; виводить домен і шлях.
2. Базовий рівень. Створити консольну програму, яка зчитує URL лише https з ASCII-доменом без порту, пароля й фрагмента та необов’язковим запитом ключ=значення&...; виводить домен, шлях і пари, відхиляє повторні ключі; percent-encoding не підтримує.
3. Високий рівень. Створити консольну програму, яка приймає навчальні https URL з ASCII-доменом без порту й фрагмента, шляхом без пробілів і запитом з пар ключ=значення; відхиляє percent-encoding і дублікати ключів, підтримує --host, друкує групи шляхів та параметри; не виконує мережеві запити. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 29. Хімічні формули без дужок
1. Початковий рівень. Створити консольну програму, яка зчитує формулу з символів H, O, C та необов’язкових додатних індексів, regex виділяє елементи й виводить кількість атомів кожного; перевіряє повне покриття рядка.
2. Базовий рівень. Створити консольну програму, яка зчитує формулу без дужок з елементів H, O, C, N, Na, Cl; індекс є додатним цілим, пропущений означає 1; перевіряє повний розбір, сумує повторні елементи й виводить склад.
3. Високий рівень. Створити консольну програму, яка приймає формули без дужок з H, O, C, N, Na, Cl та індексами 1–999; відхиляє непокриті regex символи і нульові індекси; друкує таблицю кількостей атомів і навчальні маси за H=1, O=16, C=12, N=14, Na=23, Cl=35.5; дозволяє --element для фільтра. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Варіант 30. Навчальні паролі-фрази
1. Початковий рівень. Створити консольну програму, яка зчитує щонайменше два різні слова, розділені пробілами, та виводить їх через дефіс і загальну довжину отриманої фрази.
2. Базовий рівень. Створити консольну програму, яка зчитує словник різних непорожніх слів і число k від 1 до 8; через secrets.choice обирає k слів незалежно з поверненням, виводить навчальну фразу та log2(N**k) для N слів, пояснюючи припущення рівноймовірності.
3. Високий рівень. Створити консольну програму, яка приймає словник слів, --count від 1 до 8 і кількість фраз --samples від 1 до 20; вилучає дублікати, забороняє дефіси всередині слів, генерує вибір через secrets.choice з поверненням і друкує фрази та теоретичне k·log2(N); не оцінює людські паролі й не використовує фрази як справжні секрети. Додати --help, клавіатурне введення за відсутності аргументів, повідомлення помилок у stderr, код 0 для успіху та 2 для некоректного введення. Перевірити нормальний, порожній і граничний випадки.
Порядок виконання та захисту роботи
- Створіть окремий проєкт Python 3.14 у PyCharm. Запишіть номер варіанта, формат введення, очікуване виведення й допустимі межі.
- Відокремте функції опрацювання від введення та друку. Додайте анотації параметрів і результатів, короткі рядки документації.
- Реалізуйте початковий рівень. Для regex наведіть пояснення класів, груп і квантифікаторів; для звичайних методів – причину вибору.
- Для обраного рівня перевірте правильне, порожнє, граничне й помилкове введення. Окремо перевірте перенос наприкінці, українські літери, апострофи та декомпонований Unicode, якщо це стосується задачі.
- Для високого рівня перевірте
--help, аргументи,stderrі коди завершення. Виведіть підсумки у вирівняній таблиці без втрати даних. - Додайте до звіту постановку, код, фактичні результати запусків і висновок. Зробіть коміт у локальному Git-репозиторії проєкту.
- На захисті поясніть алгоритм, межі регулярного виразу й причину кожної перевірки; змініть одне правило та продемонструйте новий тест.