Українська
Завдання
Відповідно до номера свого варіанта виконайте завдання обраного рівня складності.
Подайте UML класів; для станів також покажіть дозволені переходи. Використовуйте entries та вичерпний when, якщо обробляєте весь enum або sealed-тип. Усі навчальні тарифи й сумісності задаються умовою. Для високого рівня підтримайте --help, іменовані аргументи, повторюваний --item з описом формату, клавіатуру без аргументів, stderr і код 2 для помилок, код 0 для успіху. Звіт має вирівняні рядки та підсумки. Не викликайте зовнішні платіжні, медичні, поштові чи інші сервіси для локальних моделей.
Варіанти
Варіант 1. Замовлення піци
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести назву піци, розмір SMALL/MEDIUM/LARGE і кількість 1..20; enum Size задає 10000/15000/20000 копійок, data PizzaOrder зберігає дані; вивести суму. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести назву піци, розмір SMALL/MEDIUM/LARGE і кількість 1..20; enum Size задає 10000/15000/20000 копійок, data PizzaOrder зберігає дані; вивести суму. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести назву піци, розмір SMALL/MEDIUM/LARGE і кількість 1..20; enum Size задає 10000/15000/20000 копійок, data PizzaOrder зберігає дані; вивести суму. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: sealed стани Created, Paid(amount), Ready та перевірені переходи. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 2. Перехрестя
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести RED/YELLOW/GREEN і кількість кроків 0..20; enum Signal переходить RED→GREEN→YELLOW→RED; вивести послідовність. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести RED/YELLOW/GREEN і кількість кроків 0..20; enum Signal переходить RED→GREEN→YELLOW→RED; вивести послідовність. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести RED/YELLOW/GREEN і кількість кроків 0..20; enum Signal переходить RED→GREEN→YELLOW→RED; вивести послідовність. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: data Intersection з ідентифікатором та sealed події Tick/Disable/Enable. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 3. Колода карт
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести кількість гравців 1..4; enum Suit з чотирма мастями й Rank із 13 рангами, data Card; роздати по 5 карт із впорядкованої колоди без випадковості. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести кількість гравців 1..4; enum Suit з чотирма мастями й Rank із 13 рангами, data Card; роздати по 5 карт із впорядкованої колоди без випадковості. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести кількість гравців 1..4; enum Suit з чотирма мастями й Rank із 13 рангами, data Card; роздати по 5 карт із впорядкованої колоди без випадковості. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: value PlayerId та звіт залишку, жодних повторень карт. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 4. Трекінг посилки
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести код події created, accepted або delivered та, відповідно, номер, пункт або одержувача; sealed ParcelEvent і вичерпний опис. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести код події created, accepted або delivered та, відповідно, номер, пункт або одержувача; sealed ParcelEvent і вичерпний опис. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести код події created, accepted або delivered та, відповідно, номер, пункт або одержувача; sealed ParcelEvent і вичерпний опис. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: перевірена послідовність created→accepted→delivered. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 5. Перевірка форми
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести ім’я й вік 0..120; sealed ValidationOutcome: Valid із data Profile або Invalid із текстом; ім’я непорожнє, вік щонайменше 16. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести ім’я й вік 0..120; sealed ValidationOutcome: Valid із data Profile або Invalid із текстом; ім’я непорожнє, вік щонайменше 16. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести ім’я й вік 0..120; sealed ValidationOutcome: Valid із data Profile або Invalid із текстом; ім’я непорожнє, вік щонайменше 16. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: накопичення всіх повідомлень про неправильні поля. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 6. Сонячна система
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести MERCURY/EARTH/JUPITER і масу 0..10000 кг; enum Planet з g=3,70/9,81/24,79, вивести силу m×g. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести MERCURY/EARTH/JUPITER і масу 0..10000 кг; enum Planet з g=3,70/9,81/24,79, вивести силу m×g. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести MERCURY/EARTH/JUPITER і масу 0..10000 кг; enum Planet з g=3,70/9,81/24,79, вивести силу m×g. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: вивести всі entries і навчальний період sqrt(a³) років для a=0,39/1/5,20 а.о. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 7. Картки пацієнтів
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести вигадане ім’я, рік народження 1900..2026 і номер; data PatientCard та фабрика з перевірками, вивести замаскований номер. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести вигадане ім’я, рік народження 1900..2026 і номер; data PatientCard та фабрика з перевірками, вивести замаскований номер. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести вигадане ім’я, рік народження 1900..2026 і номер; data PatientCard та фабрика з перевірками, вивести замаскований номер. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: copy для зміни контактної мітки, жодних справжніх медичних даних. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 8. Кавовий автомат
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести стан Idle, Paid або Brewing і команду pay, brew або finish; sealed MachineState із сумою для Paid; допустимі переходи Idle→Paid→Brewing→Idle. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести стан Idle, Paid або Brewing і команду pay, brew або finish; sealed MachineState із сумою для Paid; допустимі переходи Idle→Paid→Brewing→Idle. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести стан Idle, Paid або Brewing і команду pay, brew або finish; sealed MachineState із сумою для Paid; допустимі переходи Idle→Paid→Brewing→Idle. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: подія cancel з поверненням навчальної суми лише зі стану Paid. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 9. Робочі зміни
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести день MON..SUN, початок і кінець 0..24; enum Day та data Shift, кінець більший за початок; вивести тривалість. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести день MON..SUN, початок і кінець 0..24; enum Day та data Shift, кінець більший за початок; вивести тривалість. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести день MON..SUN, початок і кінець 0..24; enum Day та data Shift, кінець більший за початок; вивести тривалість. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: перевірка перетину змін одного дня та тижневий підсумок. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 10. Текстовий редактор
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести початковий текст і команду Append(text) або Delete(count); sealed EditCommand, видалення не більше довжини; вивести новий текст. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести початковий текст і команду Append(text) або Delete(count); sealed EditCommand, видалення не більше довжини; вивести новий текст. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести початковий текст і команду Append(text) або Delete(count); sealed EditCommand, видалення не більше довжини; вивести новий текст. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: Undo з історією попередніх незмінних станів до 20 команд. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 11. Валюти
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести UAH/USD/EUR та суму 0..1000000 копійок; enum Currency і value Amount, data Money поєднує суму й валюту; вивести формат. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести UAH/USD/EUR та суму 0..1000000 копійок; enum Currency і value Amount, data Money поєднує суму й валюту; вивести формат. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести UAH/USD/EUR та суму 0..1000000 копійок; enum Currency і value Amount, data Money поєднує суму й валюту; вивести формат. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: конвертація за явно навчальними курсами UAH=1, USD=40, EUR=44 з округленням до копійки донизу. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 12. Шкала ECTS
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести бал 0..100; enum Grade з нижніми межами A90/B82/C74/D64/E60/FX35/F0; вивести оцінку й межі. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести бал 0..100; enum Grade з нижніми межами A90/B82/C74/D64/E60/FX35/F0; вивести оцінку й межі. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести бал 0..100; enum Grade з нижніми межами A90/B82/C74/D64/E60/FX35/F0; вивести оцінку й межі. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: таблиця студентів як data-класи та частоти всіх entries. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 13. Налаштування застосунку
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести тему LIGHT/DARK і розмір шрифту 8..32; object AppConfig з перевіркою, enum Theme, вивести конфігурацію. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести тему LIGHT/DARK і розмір шрифту 8..32; object AppConfig з перевіркою, enum Theme, вивести конфігурацію. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести тему LIGHT/DARK і розмір шрифту 8..32; object AppConfig з перевіркою, enum Theme, вивести конфігурацію. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: data ConfigSnapshot і повернення попередньої конфігурації. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 14. Обробка платежу
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести залишок і додатну суму в копійках; sealed PaymentOutcome: Approved(remaining), Declined(missing), Failed(reason); локально обчислити результат. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести залишок і додатну суму в копійках; sealed PaymentOutcome: Approved(remaining), Declined(missing), Failed(reason); локально обчислити результат. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести залишок і додатну суму в копійках; sealed PaymentOutcome: Approved(remaining), Declined(missing), Failed(reason); локально обчислити результат. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: журнал data PaymentRecord та підсумок без реальних платежів. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 15. Дорожні знаки
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести WARNING/PROHIBITION/INFORMATION та номер знака; enum Category з умовними балами 0/10/0, data Sign; вивести опис; це не правила дорожнього руху. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести WARNING/PROHIBITION/INFORMATION та номер знака; enum Category з умовними балами 0/10/0, data Sign; вивести опис; це не правила дорожнього руху. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести WARNING/PROHIBITION/INFORMATION та номер знака; enum Category з умовними балами 0/10/0, data Sign; вивести опис; це не правила дорожнього руху. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: sealed результати Found/Unknown для пошуку навчального каталогу. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 16. Стихії гри
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести FIRE/WATER/GRASS атакувального й захисного типів; enum Element, базова сила 10; WATER проти FIRE, FIRE проти GRASS, GRASS проти WATER дають ×2, інші ×1. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести FIRE/WATER/GRASS атакувального й захисного типів; enum Element, базова сила 10; WATER проти FIRE, FIRE проти GRASS, GRASS проти WATER дають ×2, інші ×1. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести FIRE/WATER/GRASS атакувального й захисного типів; enum Element, базова сила 10; WATER проти FIRE, FIRE проти GRASS, GRASS проти WATER дають ×2, інші ×1. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: data Fighter та sealed CombatResult після одного детермінованого раунду. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 17. Автопарк
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести марку й рік 1990..2026; data Car з value CarId, companion фабрика з однопотоковим лічильником; вивести запис. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести марку й рік 1990..2026; data Car з value CarId, companion фабрика з однопотоковим лічильником; вивести запис. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести марку й рік 1990..2026; data Car з value CarId, companion фабрика з однопотоковим лічильником; вивести запис. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: copy зі зміненою міткою стану та звіт унікальних ID одного процесу. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 18. Погодні умови
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести sunny, rainy або snowy та температуру −50..50; sealed Weather має окремі data-класи з температурою; порада: cap, umbrella або coat. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести sunny, rainy або snowy та температуру −50..50; sealed Weather має окремі data-класи з температурою; порада: cap, umbrella або coat. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести sunny, rainy або snowy та температуру −50..50; sealed Weather має окремі data-класи з температурою; порада: cap, umbrella або coat. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: data Forecast для дня MON..SUN та вичерпний звіт. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 19. Ролі доступу
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести GUEST/USER/ADMIN і дію read/write/manage; enum Role, GUEST дозволяє read, USER – read/write, ADMIN – усе; вивести рішення. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести GUEST/USER/ADMIN і дію read/write/manage; enum Role, GUEST дозволяє read, USER – read/write, ADMIN – усе; вивести рішення. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести GUEST/USER/ADMIN і дію read/write/manage; enum Role, GUEST дозволяє read, USER – read/write, ADMIN – усе; вивести рішення. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: data User з value UserId та sealed Allowed/Denied(reason). Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 20. Токени виразу
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести два числа −1000..1000 і знак + або −; sealed Token: Number(value), Plus, Minus; вивести значення виразу з трьох токенів. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести два числа −1000..1000 і знак + або −; sealed Token: Number(value), Plus, Minus; вивести значення виразу з трьох токенів. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести два числа −1000..1000 і знак + або −; sealed Token: Number(value), Plus, Minus; вивести значення виразу з трьох токенів. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: послідовність до 20 чисел без пріоритетів, обчислення зліва направо. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 21. Кінотеатр
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести SMALL/LARGE, час 0..23 і кількість місць; enum Hall має 30/100 місць, data Session перевіряє межі; вивести залишок. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести SMALL/LARGE, час 0..23 і кількість місць; enum Hall має 30/100 місць, data Session перевіряє межі; вивести залишок. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести SMALL/LARGE, час 0..23 і кількість місць; enum Hall має 30/100 місць, data Session перевіряє межі; вивести залишок. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: sealed BookingResult з успіхом і відмовою через нестачу місць. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 22. Одиниці вимірювання
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести METER/CENTIMETER/KILOMETER і невід’ємне значення до 10000; enum Unit задає коефіцієнти 1/0,01/1000; вивести метри. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести METER/CENTIMETER/KILOMETER і невід’ємне значення до 10000; enum Unit задає коефіцієнти 1/0,01/1000; вивести метри. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести METER/CENTIMETER/KILOMETER і невід’ємне значення до 10000; enum Unit задає коефіцієнти 1/0,01/1000; вивести метри. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: value Meters і таблиця перетворень у всі entries. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 23. HTTP-відповіді
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести код 200/404/500 та текст; sealed HttpOutcome: Success(body), NotFound, ServerError(message); вивести опис без мережевого запиту. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести код 200/404/500 та текст; sealed HttpOutcome: Success(body), NotFound, ServerError(message); вивести опис без мережевого запиту. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести код 200/404/500 та текст; sealed HttpOutcome: Success(body), NotFound, ServerError(message); вивести опис без мережевого запиту. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: data RequestRecord з локальним ID та підсумок кількості результатів. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 24. Трекер звичок
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести назву звички, DAILY/WEEKLY і кількість виконань 0..100; enum Frequency та data Habit, вивести запис і copy зі збільшеним лічильником. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести назву звички, DAILY/WEEKLY і кількість виконань 0..100; enum Frequency та data Habit, вивести запис і copy зі збільшеним лічильником. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести назву звички, DAILY/WEEKLY і кількість виконань 0..100; enum Frequency та data Habit, вивести запис і copy зі збільшеним лічильником. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: sealed CheckOutcome і заборона повторного запису того самого дня. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 25. Ліфт
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести поверх 1..10 і подію Call(target), Open або Close; sealed ElevatorEvent та data Cabin з enum Door; рух лише при закритих дверях. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести поверх 1..10 і подію Call(target), Open або Close; sealed ElevatorEvent та data Cabin з enum Door; рух лише при закритих дверях. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести поверх 1..10 і подію Call(target), Open або Close; sealed ElevatorEvent та data Cabin з enum Door; рух лише при закритих дверях. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: послідовність до 20 подій, відмова без зміни старого стану. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 26. Ідентифікатори
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести два додатні числа; value UserId і OrderId, data Order з цими полями; фабрики перевіряють додатність, вивести типізований запис. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести два додатні числа; value UserId і OrderId, data Order з цими полями; фабрики перевіряють додатність, вивести типізований запис. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести два додатні числа; value UserId і OrderId, data Order з цими полями; фабрики перевіряють додатність, вивести типізований запис. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: фабрика з рядка та sealed ParseOutcome для неправильного номера. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 27. Шкільний розклад
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести день MON..FRI, номер уроку 1..8 і предмет MATH/LANGUAGE/IT; enum типи й data Slot, вивести опис. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести день MON..FRI, номер уроку 1..8 і предмет MATH/LANGUAGE/IT; enum типи й data Slot, вивести опис. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести день MON..FRI, номер уроку 1..8 і предмет MATH/LANGUAGE/IT; enum типи й data Slot, вивести опис. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: виявлення конфліктів однакових дня та номера уроку. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 28. Торговий автомат
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести монети ONE/TWO/FIVE та товар ціною 700 копійок; enum Coin задає 100/200/500, sealed стан Idle/Credit(cents)/Dispensed(change). Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести монети ONE/TWO/FIVE та товар ціною 700 копійок; enum Coin задає 100/200/500, sealed стан Idle/Credit(cents)/Dispensed(change). Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести монети ONE/TWO/FIVE та товар ціною 700 копійок; enum Coin задає 100/200/500, sealed стан Idle/Credit(cents)/Dispensed(change). Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: послідовність монет, cancel і повернення внесеної суми. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 29. Геометричні фігури
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести circle або rectangle та додатні розміри до 1000; sealed Figure з data Circle/Rectangle, вичерпний when повертає площу. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести circle або rectangle та додатні розміри до 1000; sealed Figure з data Circle/Rectangle, вичерпний when повертає площу. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести circle або rectangle та додатні розміри до 1000; sealed Figure з data Circle/Rectangle, вичерпний when повертає площу. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: додати Triangle з трьома перевіреними сторонами й формулою Герона. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Варіант 30. Групи крові
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести навчальні ABO-групи O/A/B/AB донора й отримувача; enum Group: O сумісна з усіма, A з A/AB, B з B/AB, AB лише з AB; вивести логічний результат; модель не враховує Rh і не є медичною рекомендацією. Подати UML типів; для станів показати допустимі переходи.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести навчальні ABO-групи O/A/B/AB донора й отримувача; enum Group: O сумісна з усіма, A з A/AB, B з B/AB, AB лише з AB; вивести логічний результат; модель не враховує Rh і не є медичною рекомендацією. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Подати UML типів; для станів показати допустимі переходи.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести навчальні ABO-групи O/A/B/AB донора й отримувача; enum Group: O сумісна з усіма, A з A/AB, B з B/AB, AB лише з AB; вивести логічний результат; модель не враховує Rh і не є медичною рекомендацією. Обробити до 20 записів, перевірити поля, невідомі імена та межі; використати вичерпний when для закритих варіантів і вивести таблицю. Розширення: data PairRequest та таблиця всіх 16 навчальних пар. Додати --help, іменовані параметри, повторюваний --item з описом полів та клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Вивести підсумки й подати п’ять перевірок. Подати UML типів; для станів показати допустимі переходи.
Порядок виконання та захисту роботи
- Визначте, де потрібні значення, константи й альтернативні стани.
- Намалюйте UML, а для sealed-моделі – переходи й дані станів.
- Реалізуйте перевірку кожного конструктора або фабрики.
- Перевірте equals, copy та деструктуризацію для data-класів.
- Пройдіть усі enum-константи й усі sealed-варіанти.
- Перевірте неправильний перехід, невідоме ім’я та межі чисел.
- Подайте код, UML, README та щонайменше п’ять перевірок.
- На захисті додайте новий варіант sealed-типу та покажіть, які місця компілятор просить доповнити.