Українська
Завдання
Відповідно до номера свого варіанта виконайте завдання обраного рівня складності.
Варіанти
Варіант 1. Номери телефонів
1. Початковий рівень. Створити консольну програму, яка в заданому в програмі тексті методом Regex.Matches знаходить українські номери телефонів у форматах +380XXXXXXXXX, 0XX XXX XX XX і 0XX-XXX-XX-XX та виводить кожен номер у форматі +380XXXXXXXXX.
2. Базовий рівень. Створити консольну програму, яка запитує в користувача шлях до файлу контактів (рядки ім’я; телефон), перевіряє кожен телефон шаблоном з іменованими групами коду оператора та номера абонента, нормалізує правильні номери методом Replace до формату +38 (0XX) XXX-XX-XX і виводить таблицю контактів та окремо номери рядків із помилками.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок, який приймає шлях до файлу контактів (рядки ім’я; телефон) і опції --output файл, --format e164|national та --help, нормалізує телефони й записує результат у вихідний файл, а звіт помилок (номер рядка, значення, причина: мало цифр, невідомий код країни, недопустимі символи) виводить у потік помилок. Коди завершення: 0 – успіх, 1 – є помилкові рядки, 2 – помилка аргументів. Шаблони оголосити атрибутом [GeneratedRegex] і покрити тестами xUnit.
Варіант 2. Автомобільні номери
1. Початковий рівень. Створити консольну програму, яка перевіряє заданий у програмі масив рядків на відповідність формату українського номерного знака «дві літери, чотири цифри, дві літери» (АА1234ВВ), де літерами можуть бути лише А В Е І К М Н О Р С Т Х, та виводить результат перевірки кожного рядка.
2. Базовий рівень. Створити консольну програму, яка запитує номерні знаки до введення порожнього рядка, допускає пробіли та латинські літери-двійники (AA 1234 BB), приводить номер до кириличних великих літер без пробілів, виділяє іменованими групами код регіону, цифри й серію та виводить таблицю номерів, відсортовану за кодом регіону.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок, який читає журнал в’їзду на парковку (рядки дд.мм.рррр гг:хх; номер, опція --log) і довідник кодів регіонів (код; область, опція --regions), групує автомобілі за областями та виводить таблицю «область – автомобілів – частка, %» з підсумком. Опція --region КОД залишає в звіті одну область; нерозпізнані записи виводяться в потік помилок; коди завершення 0, 1 (є нерозпізнані записи), 2 (помилка аргументів); --help виводить довідку.
Варіант 3. Журнал вебсервера
1. Початковий рівень. Створити консольну програму, яка в заданих у програмі п’яти рядках журналу вебсервера у форматі Common Log Format знаходить IP-адресу клієнта та код відповіді й виводить їх парами.
2. Базовий рівень. Створити консольну програму, яка запитує шлях до файлу журналу вебсервера, розбирає кожен рядок шаблоном з іменованими групами (IP-адреса, дата, метод, шлях, код, розмір), виводить таблицю кількості запитів для кожного коду відповіді, загальний обсяг переданих даних і кількість нерозпізнаних рядків.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок logstat, який аналізує файл журналу вебсервера у форматі Common Log Format з опціями --from і --to (межі періоду дд.мм.рррр гг:хх), --top N і --status 4xx|5xx|код. Застосунок перевіряє IP-адреси (чотири числа 0–255), виводить таблиці N найактивніших IP-адрес і шляхів з кількістю запитів і часткою, а нерозпізнані рядки – в потік помилок. Шаблон має тайм-аут; помилки аргументів повертають код 2; --help виводить довідку.
Варіант 4. Список покупок із рецептів
1. Початковий рівень. Створити консольну програму, яка в заданому в програмі тексті рецепта знаходить рядки інгредієнтів у форматі назва – кількість одиниця (наприклад, борошно – 250 г, яйця – 2 шт.) та виводить таблицю «назва – кількість – одиниця».
2. Базовий рівень. Створити консольну програму, яка читає рецепт із файлу, запитує в користувача кількість порцій рецепта та потрібну кількість порцій, розпізнає кількості з десятковою комою та дроби 1/2 і перераховує їх методом Replace з MatchEvaluator, округлюючи до одного знака після коми, та виводить новий рецепт.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок, який приймає кілька файлів рецептів з кількістю порцій (борщ.txt:6 салат.txt:2), розбирає рядки інгредієнтів назва – кількість одиниця регулярними виразами, зводить однакові продукти (без урахування регістру) в один список покупок, переводить кг/г і л/мл до спільної одиниці та виводить таблицю з підсумком. Опція --output записує список у файл; нерозпізнані рядки виводяться в потік помилок; коди завершення 0, 1, 2; --help; тести xUnit для шаблону інгредієнта.
Варіант 5. Субтитри SRT
1. Початковий рівень. Створити консольну програму, яка в заданому в програмі фрагменті файлу субтитрів SRT знаходить рядки часу 00:01:02,500 --> 00:01:05,000 та виводить час початку, кінця і тривалість кожного субтитра в мілісекундах.
2. Базовий рівень. Створити консольну програму, яка читає файл SRT, запитує зсув у мілісекундах (може бути від’ємним), зсуває всі часові мітки методом Replace з MatchEvaluator (час не може стати від’ємним), записує новий файл і виводить кількість змінених субтитрів.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок srtshift з опціями --shift мс, --from номер (зсув починаючи із заданого субтитра), --fps 25:23.976 (перерахунок часу для іншої частоти кадрів) і --check. Режим перевірки виводить таблицю проблем: порушена нумерація, кінець раніше за початок, перекриття субтитрів. Помилки аргументів і формату виводяться в потік помилок; коди завершення 0, 1, 2; --help; тести xUnit для розбору та форматування часу.
Варіант 6. Банківська виписка
1. Початковий рівень. Створити консольну програму, яка в заданих у програмі рядках виписки 17.09.2026 Кав’ярня -125,40 грн знаходить дату, опис і суму та виводить загальну суму витрат і надходжень, обчислену в типі decimal.
2. Базовий рівень. Створити консольну програму, яка читає виписку з файлу, розпізнає суми зі знаком і пробілами між розрядами (-1 250,40), визначає категорію операції за ключовими словами (шаблони з IgnoreCase, наприклад аптека|ліки → «Здоров’я») і виводить таблицю сум за категоріями з підсумком.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок, який приймає файл банківської виписки (рядки дд.мм.рррр опис сума грн), файл правил категорій (шаблон; категорія) та опції --month мм.рррр і --csv файл. Недійсний шаблон у правилах повідомляється з номером рядка. Застосунок виводить звіт за категоріями з часткою витрат, записує CSV з крапкою як десятковим роздільником, а нерозпізнані рядки виписки – в потік помилок; коди завершення 0, 1, 2; --help.
Варіант 7. Хештеги та згадки
1. Початковий рівень. Створити консольну програму, яка в заданому в програмі тексті допису знаходить усі хештеги (# і літери будь-якої мови, цифри або _) і згадки (@ та ім’я користувача) та виводить їх двома окремими списками.
2. Базовий рівень. Створити консольну програму, яка читає файл дописів (один допис у рядку), будує частотний словник хештегів без урахування регістру та виводить 10 найпопулярніших із кількістю. Символи # і @ усередині URL-адрес і адрес e-mail не враховуються (перегляд назад).
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок, який читає файл дописів у форматі дд.мм.рррр; автор; текст і приймає опції --top N, --min-count K, --since дд.мм.рррр та --mentions. Застосунок виводить таблицю хештегів (або згадок) з кількістю та часткою і пару хештегів, які найчастіше трапляються разом. Рядки неправильного формату виводяться в потік помилок; коди завершення 0, 1, 2; --help; тести xUnit для шаблону хештегу.
Варіант 8. Шкільний розклад
1. Початковий рівень. Створити консольну програму, яка в заданих у програмі рядках розкладу Пн 08:30-09:15 Математика 7-А каб. 21 знаходить день, час початку й кінця, предмет, клас і кабінет та виводить їх таблицею.
2. Базовий рівень. Створити консольну програму, яка читає розклад із файлу, перевіряє формат кожного рядка шаблоном і правильність часу (TimeOnly.TryParse, кінець пізніше за початок), запитує клас і виводить його розклад, упорядкований за днями та часом, а також список рядків із помилками.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок, який читає файл шкільного розкладу (рядки Пн 08:30-09:15 Математика 7-А каб. 21) і шукає накладки: один кабінет або один клас у той самий час. Опції --class, --room і --day обмежують звіт. Застосунок виводить таблицю накладок і таблицю завантаженості кабінетів у годинах за тиждень; помилкові рядки виводяться в потік помилок; коди завершення 0 (накладок немає), 1 (є накладки), 2 (помилка аргументів); --help.
Варіант 9. Хімічні формули
1. Початковий рівень. Створити консольну програму, яка для заданих у програмі формул (H2O, CO2, NaCl, C6H12O6) знаходить елементи та кількість атомів шаблоном (?<el>[A-Z][a-z]?)(?<n>\d*) і виводить склад кожної формули.
2. Базовий рівень. Створити консольну програму, яка запитує хімічну формулу, перевіряє допустимі символи шаблоном з якорями, підраховує атоми кожного елемента з урахуванням дужок одного рівня (Ca(OH)2) і обчислює молярну масу за таблицею атомних мас, заданою в програмі.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок, який приймає формули з кристалізаційною водою (CuSO4·5H2O) і вкладеними дужками (K4[Fe(CN)6]), читає атомні маси з файлу (--masses) і з опцією --percent виводить масові частки елементів. Невідомий елемент або незбалансовані дужки повідомляються в потік помилок з позицією; коди завершення 0, 1, 2; --help; тести xUnit для розбору формул.
Варіант 10. Бібліографічний список
1. Початковий рівень. Створити консольну програму, яка в заданих у програмі записах списку літератури знаходить рік видання (чотири цифри від 1900 до поточного року) та кількість сторінок (320 с. або 320 p.) і виводить їх для кожного джерела.
2. Базовий рівень. Створити консольну програму, яка читає список джерел із файлу, перевіряє кожен запис шаблонами на наявність автора (Прізвище І. Б.), назви, міста, року та кількості сторінок і для кожного запису виводить перелік відсутніх елементів.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок, який читає файл списку літератури, оформленого за ДСТУ 8302, сортує джерела за прізвищем першого автора, знаходить дублікати (однакові автор і назва без урахування регістру та зайвих пробілів) і з опцією --style apa перетворює записи на оформлення APA методом Replace з групами. Звіт помилок виводиться в потік помилок; опція --output записує список у файл; коди завершення 0, 1, 2; --help.
Варіант 11. IBAN
1. Початковий рівень. Створити консольну програму, яка перевіряє заданий у програмі масив рядків на відповідність формату українського IBAN: UA, дві контрольні цифри, шість цифр коду банку і 19 цифр рахунку (29 символів), з необов’язковими пробілами між групами по чотири символи, та виводить результат для кожного рядка.
2. Базовий рівень. Створити консольну програму, яка запитує IBAN, видаляє пробіли, перевіряє формат шаблоном і контрольну суму за алгоритмом mod 97 (ISO 13616) та виводить код банку й номер рахунку з іменованих груп і маскований запис UA21 **** **** 1234.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок, який знаходить усі IBAN у текстовому файлі платіжних доручень, перевіряє їхні контрольні суми, маскує правильні номери у вихідному файлі (--output) і позначає неправильні. Опція --bank код фільтрує звіт «IBAN – код банку – стан» з підсумками. Помилки виводяться в потік помилок; коди завершення 0, 1, 2; --help; тести xUnit для перевірки IBAN.
Варіант 12. Координати GPS
1. Початковий рівень. Створити консольну програму, яка в заданому в програмі тексті знаходить пари десяткових координат 48.2082, 16.3738 і виводить широту та довготу кожної пари.
2. Базовий рівень. Створити консольну програму, яка запитує координати у форматі градусів, мінут і секунд 48°12'29.5"N 16°22'25.7"E, розбирає їх шаблоном з іменованими групами, перевіряє діапазони (мінути та секунди менші за 60, широта до 90°, довгота до 180°) і виводить десяткові координати із шістьма знаками після коми.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок, який читає файл маршруту з точками в різних форматах (десятковому, DMS і N48 12.492 E16 22.428), перетворює їх на десяткові координати, обчислює відстань між сусідніми точками за формулою гаверсинусів і загальну довжину маршруту. Опція --units km|mi; таблиця точок і відстаней; нерозпізнані рядки в потік помилок; коди завершення 0, 1, 2; --help; тести xUnit для розбору форматів.
Варіант 13. Файли INI
1. Початковий рівень. Створити консольну програму, яка в заданому в програмі тексті INI-файлу знаходить назви секцій [назва] і пари ключ=значення та виводить ключі з відступом під назвою своєї секції.
2. Базовий рівень. Створити консольну програму, яка читає INI-файл, пропускає коментарі (рядки, що починаються з ; або #) і порожні рядки, будує словник секція.ключ → значення, повідомляє про рядки неправильного формату та дублікати ключів у межах секції, запитує ключ і виводить його значення.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок ini, який працює з INI-файлом, заданим в аргументі, і має команди get секція.ключ, set секція.ключ=значення, list і опцію --check. Команда set змінює лише потрібний рядок файлу (Replace з Multiline), зберігаючи коментарі й порядок рядків; значення можуть містити підстановки ${секція.ключ}, циклічні посилання виявляються. Помилки виводяться в потік помилок; коди завершення 0, 1, 2; --help; тести xUnit.
Варіант 14. Шахові партії PGN
1. Початковий рівень. Створити консольну програму, яка в заданому в програмі рядку ходів шахової партії 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 знаходить номери ходів, ходи білих і чорних та виводить їх таблицею.
2. Базовий рівень. Створити консольну програму, яка читає файл PGN, збирає теги заголовка [Event "…"] у словник, розбирає ходи в алгебраїчній нотації (фігура, взяття x, поле, перетворення =Q, рокіровка O-O, шах +, мат #) і виводить кількість ходів, взять і шахів кожного гравця.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок, який обробляє файл PGN з кількома партіями, видаляє коментарі {…} і варіанти в дужках, приймає опції --player ім’я і --result 1-0|0-1|1/2-1/2 та виводить таблицю «партія – білі – чорні – результат – ходів – взять» і статистику перших ходів. Неправильні ходи повідомляються в потік помилок; коди завершення 0, 1, 2; --help; тести xUnit.
Варіант 15. Метеозведення
1. Початковий рівень. Створити консольну програму, яка в заданому в програмі тексті зведення погоди знаходить температури (+12 °C, -3°C) і швидкості вітру (5 м/с) та виводить мінімальну й максимальну температуру.
2. Базовий рівень. Створити консольну програму, яка читає файл зведень (рядок на день: дата, температура вдень і вночі, вітер із напрямком пн-зх 7 м/с, необов’язкові опади 2,5 мм), розбирає рядки шаблоном з необов’язковими групами та виводить таблицю із середньою температурою й сумою опадів.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок, який розбирає авіаційні зведення METAR (UKBB 171230Z 24005MPS 9999 SCT030 18/09 Q1016): аеродром, час, вітер, видимість, хмарність, температуру, точку роси й тиск. Опції --file і --station; таблиця зведень; нерозпізнані групи виводяться в потік помилок; коди завершення 0, 1, 2; --help; тести xUnit для кожної групи METAR.
Варіант 16. Кулінарні одиниці
1. Початковий рівень. Створити консольну програму, яка в заданому в програмі тексті рецепта знаходить кількості зі скороченнями «ст. л.» і «ч. л.» (2 ст. л., 1,5 ч. л.) та виводить кожну кількість з одиницею.
2. Базовий рівень. Створити консольну програму, яка читає рецепт із файлу й замінює методом Replace з MatchEvaluator кількості в столових і чайних ложках та склянках на грами для продукту, названого після одиниці (таблиця «продукт – грамів в одиниці» задана в програмі): «2 ст. л. цукру» → «50 г цукру»; невідомі продукти залишає без змін і виводить їх список.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок, який у тексті рецепта з файлу замінює кількості в столових і чайних ложках та склянках на грами або навпаки (--direction grams|spoons) за таблицею «продукт – грамів в одиниці» з файлу (--table), розпізнає дроби 1/2, діапазони 2–3 і слово «пів» та записує результат у файл (--output). Звіт замін виводиться таблицею, невідомі продукти – в потік помилок; коди завершення 0, 1, 2; --help; тести xUnit.
Варіант 17. Посилання Markdown
1. Початковий рівень. Створити консольну програму, яка в заданому в програмі тексті Markdown знаходить посилання [текст](адреса) і виводить текст та адресу кожного посилання.
2. Базовий рівень. Створити консольну програму, яка читає файл Markdown, знаходить посилання та зображення , перевіряє адреси методом Uri.TryCreate (схема http або https) і виводить таблицю посилань, а окремо – недійсні адреси та дублікати.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок, який перевіряє всі файли .md у папці (--dir): зовнішні адреси, відносні посилання на файли та посилання на заголовки. Посилання всередині блоків коду не враховуються. Опція --fix замінює http:// на https://. Звіт «файл – рядок – посилання – проблема»; помилки в потік помилок; коди завершення 0, 1, 2; --help; тести xUnit.
Варіант 18. Розклад рейсів
1. Початковий рівень. Створити консольну програму, яка в заданих у програмі рядках розкладу PS101 KBP-AMS 07:35 знаходить код авіакомпанії, номер рейсу, аеропорти вильоту й прибуття та час і виводить їх таблицею.
2. Базовий рівень. Створити консольну програму, яка читає розклад із файлу, перевіряє код рейсу ІАТА (двосимвольний код перевізника, 1–4 цифри, необов’язкова літера), коди аеропортів (три великі латинські літери) і час, сортує рейси за часом вильоту та виводить таблицю.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок, який читає розклад рейсів із часовими поясами (07:35+02:00) і довідник аеропортів, приймає опції --airport КОД, --airline КОД, --from гг:хх і --to гг:хх, обчислює тривалість польотів і знаходить рейси з однаковим номером в один день. Помилки формату виводяться в потік помилок; коди завершення 0, 1, 2; --help; тести xUnit.
Варіант 19. Шаблони листів
1. Початковий рівень. Створити консольну програму, яка в заданому в програмі шаблоні листа знаходить усі поля {{Name}} і виводить список унікальних назв полів.
2. Базовий рівень. Створити консольну програму, яка читає шаблон листа з файлу, запитує в користувача значення кожного поля, підставляє їх методом Replace з MatchEvaluator (поля без значення залишаються, про них виводиться попередження) і виводить готовий лист.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок, який генерує листи за шаблоном (--template) і CSV-файлом даних (--data, перший рядок – назви полів), підтримує формати {{Sum:N2}}, {{Date:dd.MM.yyyy}} і значення за замовчуванням {{City|Лондон}} та записує кожен лист в окремий файл у папці --out. Відсутні поля повідомляються в потік помилок; коди завершення 0, 1, 2; --help; тести xUnit.
Варіант 20. Температура в тексті
1. Початковий рівень. Створити консольну програму, яка в заданому в програмі тексті знаходить температури за Фаренгейтом (72°F, -4 °F, 98.6 F) і виводить їх значення за Цельсієм з одним знаком після коми.
2. Базовий рівень. Створити консольну програму, яка читає текст із файлу, замінює методом Replace з MatchEvaluator усі температури за Фаренгейтом на температури за Цельсієм, зберігаючи пробіл між числом і позначкою, як в оригіналі; значення, нижчі за абсолютний нуль, не змінює та виводить їх список.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок, який конвертує температури в тексті файлу між шкалами (--to C|F|K) із заданою точністю (--precision N), розпізнає діапазони 50–60°F і кому або крапку як роздільник та записує результат у файл (--output). Застосунок виводить таблицю замін; помилки – у потік помилок; коди завершення 0, 1, 2; --help; тести xUnit.
Варіант 21. Медичні призначення
1. Початковий рівень. Створити консольну програму, яка в заданих у програмі рядках призначень Парацетамол 500 мг 3 рази на день знаходить назву препарату, дозу, одиницю і кратність прийому та виводить їх таблицею.
2. Базовий рівень. Створити консольну програму, яка читає файл призначень, перевіряє одиниці (лише мг, г, мкг, мл, МО, табл.), розпізнає кратність у формах «3 рази на день», «кожні 8 год» і 1-0-1, обчислює добову дозу та виводить таблицю і список рядків із недопустимими одиницями.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок, який читає файл призначень (рядки пацієнт; Парацетамол 500 мг 3 рази на день) і довідник максимальних добових доз (--limits), переводить дози між г, мг і мкг, попереджає про перевищення добової дози та з опцією --patient будує звіт для одного пацієнта. Нерозпізнані рядки виводяться в потік помилок; коди завершення 0, 1 (є перевищення), 2; --help; тести xUnit.
Варіант 22. Номери ISBN
1. Початковий рівень. Створити консольну програму, яка в заданому в програмі тексті знаходить номери ISBN-13 з дефісами або без них (978-966-10-1234-5) і виводить їх без дефісів.
2. Базовий рівень. Створити консольну програму, яка запитує ISBN, визначає шаблоном, це ISBN-10 чи ISBN-13 (дефіси й пробіли допускаються, остання цифра ISBN-10 може бути X), перевіряє контрольну цифру та виводить результат і номер без роздільників.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок, який обробляє файл каталогу книжок: знаходить ISBN у кожному записі, перевіряє контрольні цифри, перетворює правильні ISBN-10 на ISBN-13 з перерахунком контрольної цифри і з опцією --fix записує каталог із нормалізованими номерами. Недійсні номери виводяться в потік помилок; коди завершення 0, 1, 2; --help; тести xUnit.
Варіант 23. Час у тексті
1. Початковий рівень. Створити консольну програму, яка в заданому в програмі тексті знаходить значення часу гг:хх від 00:00 до 23:59 (межі годин і хвилин перевіряє сам шаблон) і виводить їх.
2. Базовий рівень. Створити консольну програму, яка читає робочий журнал із файлу з інтервалами 09:15–12:40 або 13:30-17:05, перевіряє, що кінець пізніше за початок, і виводить тривалість кожного інтервалу та загальну тривалість у годинах і хвилинах.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок, який читає файл робочого журналу, розпізнає інтервали часу в різних формах (з 9:00 до 12:30, 9.00–12.30, 2 год 15 хв), групує їх за датами й проєктами ([проєкт] у рядку) і з опціями --week та --project виводить таблицю з підсумками, а також повідомляє про накладання інтервалів. Помилки виводяться в потік помилок; коди завершення 0, 1, 2; --help; тести xUnit.
Варіант 24. Спортивні результати
1. Початковий рівень. Створити консольну програму, яка в заданих у програмі рядках результатів Сокіл – Промінь 2:1 знаходить назви команд і рахунок та виводить переможця кожного матчу або «нічия».
2. Базовий рівень. Створити консольну програму, яка читає файл результатів, перевіряє формат рядків (назви з пробілами й дефісами, рахунок N:M), будує турнірну таблицю (ігри, перемоги, нічиї, поразки, м’ячі, очки 3/1/0) і виводить її, відсортовану за очками.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок, який будує турнірну таблицю з файлу результатів матчів (рядки Сокіл – Промінь 2:1) із турами (Тур 3), технічними поразками +:- і перенесеними матчами, приймає опції --round N і --team назва, сортує команди за очками, різницею та кількістю забитих м’ячів і записує таблицю у CSV (--csv). Помилкові рядки виводяться в потік помилок; коди завершення 0, 1, 2; --help; тести xUnit.
Варіант 25. Аналіз коду C#
1. Початковий рівень. Створити консольну програму, яка в заданому в програмі фрагменті коду C# знаходить оголошення класів (class Назва) і виводить їхні імена.
2. Базовий рівень. Створити консольну програму, яка читає файл .cs, вилучає однорядкові та багаторядкові коментарі й рядкові літерали, підраховує класи, інтерфейси й методи (за шаблоном модифікаторів, типу, імені та дужок) і виводить звіт разом із кількістю рядків коментарів.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок, який обходить папку проєкту (--dir, --exclude obj,bin) і для кожного файлу .cs виводить таблицю «файл – класи – методи – рядків коду – коментарів, %», а також перевіряє імена: класи й методи в стилі PascalCase, приватні поля в стилі _camelCase. Порушення виводяться переліком; коди завершення 0, 1 (є порушення), 2; --help; тести xUnit.
Варіант 26. Адреси доставки
1. Початковий рівень. Створити консольну програму, яка в заданих у програмі рядках адрес м. Прага, вул. Садова, 12, кв. 5 знаходить місто, вулицю, будинок і квартиру та виводить їх окремими полями.
2. Базовий рівень. Створити консольну програму, яка читає адреси з файлу, розпізнає скорочення (вул., просп., пров., бул., пл.), будинки з літерою або дробом (12-А, 5/2) і необов’язкову квартиру, приводить записи до єдиного вигляду та виводить таблицю адрес і нерозпізнані рядки.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок, який читає файл замовлень з адресами та поштовими індексами (п’ять цифр), групує замовлення за містами й вулицями, приймає опції --city і --sort street|house та виводить маршрутний лист із кількістю замовлень. Нерозпізнані адреси виводяться в потік помилок; коди завершення 0, 1, 2; --help; тести xUnit для шаблону адреси.
Варіант 27. Показники лічильників
1. Початковий рівень. Створити консольну програму, яка в заданому в програмі тексті повідомлення Показник лічильника: 12345 кВт·год на 01.09.2026 знаходить показник, одиницю й дату та виводить їх.
2. Базовий рівень. Створити консольну програму, яка читає файл показників (рядки з датою та значенням у різних форматах), упорядковує їх за датою, перевіряє, що показники не зменшуються, запитує тариф і виводить споживання та вартість за кожен місяць.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок, який читає файл показників кількох лічильників (рядки з датою, типом ел, газ або вода і значенням; для двозонного обліку електроенергії день 1234 ніч 567), приймає опції --tariffs файл і --year рррр, виводить помісячну таблицю споживання й вартості з підсумками та позначає аномалії (споживання втричі більше за середнє). Помилки виводяться в потік помилок; коди завершення 0, 1, 2; --help; тести xUnit.
Варіант 28. Аудит паролів
1. Початковий рівень. Створити консольну програму, яка перевіряє заданий у програмі масив паролів одним шаблоном із переглядами вперед («щонайменше 8 символів, є цифра і літера») та виводить результат для кожного пароля.
2. Базовий рівень. Створити консольну програму, яка читає файл логін;пароль, перевіряє кожен пароль п’ятьма окремими шаблонами (довжина, велика літера, мала літера, цифра, спеціальний символ) і виводить таблицю користувачів із порушеними правилами та кількість надійних паролів.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок, який перевіряє файл облікових записів (рядки логін;пароль) за політикою з файлу (--policy, рядок – шаблон і повідомлення), додатково шукає логін у паролі (з Regex.Escape), послідовності 123, qwerty і слова зі словника слабких паролів (--dictionary). Звіт записується у CSV без самих паролів; недійсні шаблони політики повідомляються в потік помилок; коди завершення 0, 1, 2; --help; тести xUnit.
Варіант 29. URL-адреси
1. Початковий рівень. Створити консольну програму, яка в заданому в програмі тексті знаходить URL-адреси, що починаються з http:// або https://, і виводить схему, домен і шлях кожної адреси.
2. Базовий рівень. Створити консольну програму, яка запитує URL-адресу, розбирає іменованими групами схему, домен, порт, шлях, параметри запиту та фрагмент, виводить параметри таблицею «назва – значення» з декодуванням (Uri.UnescapeDataString) і порівнює результат із властивостями класу Uri.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок, який читає файл переходів за посиланнями (рядок – дата й URL-адреса), нормалізує адреси (домен у нижньому регістрі, без www. і завершального /), з опцією --strip-tracking видаляє параметри utm_*, групує переходи за доменами та знаходить дублікати. Таблиця доменів із кількістю переходів; нерозпізнані рядки в потік помилок; коди завершення 0, 1, 2; --help; тести xUnit.
Варіант 30. Журнал збирання .NET
1. Початковий рівень. Створити консольну програму, яка в заданих у програмі рядках виводу dotnet build вигляду Program.cs(12,5): error CS1002: ; expected знаходить файл, рядок, стовпець, тип повідомлення, код і текст та виводить їх таблицею.
2. Базовий рівень. Створити консольну програму, яка читає збережений у файлі вивід dotnet build, вилучає повторені повідомлення (MSBuild повторює їх у підсумку), підраховує помилки та попередження за кодами й за файлами та виводить дві таблиці, відсортовані за кількістю.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок buildreport, який запускає dotnet build для проєкту (--project) або читає збережений вивід (--log), приймає опції --severity error|warning і --code CS8618 та записує звіт у вигляді таблиці Markdown (--markdown файл) з кількістю повідомлень за кодами й файлами. Коди завершення: 0 – без помилок, 1 – є помилки збирання, 2 – помилка аргументів; --help; тести xUnit для шаблону повідомлення.
Порядок виконання та захисту роботи
- Опрацювати теоретичні відомості та приклади розв’язання завдань.
- Для кожного формату даних свого варіанта записати регулярний вираз і скласти таблицю з 5–10 правильних і неправильних рядків, які він має приймати або відхиляти.
- Створити рішення для свого варіанта; шаблони, відомі під час компіляції, оголосити атрибутом
[GeneratedRegex], а для даних із файлів і командного рядка задати тайм-аут. - Реалізувати програму відповідно до обраного рівня складності; значення, які регулярний вираз не може перевірити (дати, числа, контрольні суми), перевіряти методами
TryParseабо окремими функціями. - Для базового та високого рівнів покрити шаблони тестами xUnit v3
[Theory]із даними з таблиці кроку 2; перевірити програму на граничних даних (порожній і дуже довгий рядок, кінці рядків Windows). - Продемонструвати роботу програми та тестів викладачеві, пояснити кожен шаблон і відповісти на контрольні питання.