Українська
Завдання
Відповідно до номера свого варіанта виконайте завдання обраного рівня складності.
Використайте Kotlin/JVM та JDK 27. Кожен контейнер повинен мати сформульований інваріант. Для структур на вузлах не підмінюйте реалізацію готовою колекцією.
Варіанти
Варіант 1. Черга обслуговування
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести імена клієнтів до порожнього рядка; Queue<T> на вузлах повинна додавати в кінець і забирати з початку. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести імена клієнтів до порожнього рядка; Queue<T> на вузлах повинна додавати в кінець і забирати з початку. Додати peek і size; порожнє вилучення повертає окремий результат. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести імена клієнтів до порожнього рядка; Queue<T> на вузлах повинна додавати в кінець і забирати з початку. Додати peek і size; порожнє вилучення повертає окремий результат; розділити Source<out T> і Sink<in T>; перевірити порядок для Int і String. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 2. Результат розбору
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести рядки оцінок; Either<String,T> має відокремити нецілий текст від оцінки 0..100. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести рядки оцінок; Either<String,T> має відокремити нецілий текст від оцінки 0..100. Реалізувати перетворення успіху map без зміни помилки. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести рядки оцінок; Either<String,T> має відокремити нецілий текст від оцінки 0..100. Реалізувати перетворення успіху map без зміни помилки; додати flatMap для послідовних перевірок і довести, що помилка зупиняє ланцюг. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 3. Кортежі
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести ім’я та цілий бал; Duo<A,B> повертає обміняну пару. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести ім’я та цілий бал; Duo<A,B> повертає обміняну пару. Додати TripleValue<A,B,C> і циклічний поворот трійки. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести ім’я та цілий бал; Duo<A,B> повертає обміняну пару. Додати TripleValue<A,B,C> і циклічний поворот трійки; обґрунтувати коваріантність усіх параметрів і перевірити три повороти. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 4. Діапазони значень
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести дві цілі межі та число; Range<T:Comparable<T>> перевіряє включення обох меж. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести дві цілі межі та число; Range<T:Comparable<T>> перевіряє включення обох меж. Перевірити тим самим класом ISO-дати; зворотні межі відхиляти. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести дві цілі межі та число; Range<T:Comparable<T>> перевіряє включення обох меж. Перевірити тим самим класом ISO-дати; зворотні межі відхиляти; додати перетин двох діапазонів із sealed-результатом порожнього перетину. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 5. Складські коробки
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести назви вантажів; Box<out T> зберігає один незмінний елемент Cargo. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести назви вантажів; Box<out T> зберігає один незмінний елемент Cargo. Додати Cargo та FragileCargo і передати коробку крихкого вантажу як коробку вантажу. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести назви вантажів; Box<out T> зберігає один незмінний елемент Cargo. Додати Cargo та FragileCargo і передати коробку крихкого вантажу як коробку вантажу; реалізувати Source<out T> коробок на вузлах без небезпечних приведень. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 6. Сортування заявок
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести три заявки з id та пріоритетом 0..9; узагальнена функція обирає мінімум через Comparator<T>. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести три заявки з id та пріоритетом 0..9; узагальнена функція обирає мінімум через Comparator<T>. За рівності пріоритетів обирати менший id; показати інший компаратор. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести три заявки з id та пріоритетом 0..9; узагальнена функція обирає мінімум через Comparator<T>. За рівності пріоритетів обирати менший id; показати інший компаратор; використати Comparator<Request> для UrgentRequest і пояснити контраваріантність. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 7. Фізичні одиниці
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести дві довжини; Quantity<U> зберігає скінченний Double і додає лише однакові одиниці. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести дві довжини; Quantity<U> зберігає скінченний Double і додає лише однакові одиниці. Додати типи Meter і Second та явне перетворення метрів у кілометри. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести дві довжини; Quantity<U> зберігає скінченний Double і додає лише однакові одиниці. Додати типи Meter і Second та явне перетворення метрів у кілометри; подати негативний приклад компіляції для додавання довжини до часу; перевірити переповнення. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 8. Бінарне дерево пошуку
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести цілі числа; BST<T:Comparable<T>> на вузлах додає унікальні значення і шукає число. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести цілі числа; BST<T:Comparable<T>> на вузлах додає унікальні значення і шукає число. Реалізувати симетричний обхід і розмір; повтор не змінює дерево. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести цілі числа; BST<T:Comparable<T>> на вузлах додає унікальні значення і шукає число. Реалізувати симетричний обхід і розмір; повтор не змінює дерево; додати видалення вузла з нулем, одним і двома нащадками. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 9. Кешоване значення
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести рядок; Cached<T> обчислює довжину лише при першому get. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести рядок; Cached<T> обчислює довжину лише при першому get. Додати invalidate та лічильник обчислень; показати два незалежні кеші. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести рядок; Cached<T> обчислює довжину лише при першому get. Додати invalidate та лічильник обчислень; показати два незалежні кеші; підтримати nullable-результат окремою ознакою стану і перевірити кешування null. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 10. Необов’язкове значення
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести ціле або порожній рядок; sealed Option<out T> має Some та None. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести ціле або порожній рядок; sealed Option<out T> має Some та None. Додати getOrElse і map для подвоєння числа. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести ціле або порожній рядок; sealed Option<out T> має Some та None. Додати getOrElse і map для подвоєння числа; реалізувати flatMap та перевірити, що None не викликає перетворювач. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 11. Черга з пріоритетом
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести числа; узагальнена мін-купа на вузлах повертає найменше. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести числа; узагальнена мін-купа на вузлах повертає найменше. Підтримати вставлення і вилучення з відновленням повного дерева; дублікати дозволені. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести числа; узагальнена мін-купа на вузлах повертає найменше. Підтримати вставлення і вилучення з відновленням повного дерева; дублікати дозволені; перевірити інваріант купи після кожної операції та використати Comparable-заявки. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 12. Реєстр об’єктів
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: створити вузловий реєстр Any з рядками й числами; reified firstOf<T> повертає перший збіг або null. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: створити вузловий реєстр Any з рядками й числами; reified firstOf<T> повертає перший збіг або null. Додати countOf<T> і перевірити Int, String та відсутній тип. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: створити вузловий реєстр Any з рядками й числами; reified firstOf<T> повертає перший збіг або null. Додати countOf<T> і перевірити Int, String та відсутній тип; показати обмеження вкладених параметрів типів на прикладі List<String> без небезпечного cast. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 13. Типізоване введення
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести тип int/double/bool і текст; reified parse<T> підтримує ці три скалярні типи. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести тип int/double/bool і текст; reified parse<T> підтримує ці три скалярні типи. Неправильний текст і нескінченні числа повертають sealed-помилку. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести тип int/double/bool і текст; reified parse<T> підтримує ці три скалярні типи. Неправильний текст і нескінченні числа повертають sealed-помилку; порівняти reified API з Parser<T>, додати власний Parser для ISO-дати. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 14. Інвентар гравця
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести назву та масу предмета; Slot<T:Item> зберігає один предмет або порожнечу. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести назву та масу предмета; Slot<T:Item> зберігає один предмет або порожнечу. Додати Weapon і Potion; вивести предмет і перевірити невід’ємну скінченну масу. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести назву та масу предмета; Slot<T:Item> зберігає один предмет або порожнечу. Додати Weapon і Potion; вивести предмет і перевірити невід’ємну скінченну масу; розділити читання out та запис in, перевірити незалежність слотів. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 15. Контейнерний термінал
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести код і масу вантажу; Container<out T> показує Cargo без зміни. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести код і масу вантажу; Container<out T> показує Cargo без зміни. Додати RefrigeratedCargo з температурою і коваріантне джерело контейнерів. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести код і масу вантажу; Container<out T> показує Cargo без зміни. Додати RefrigeratedCargo з температурою і коваріантне джерело контейнерів; реалізувати перевірку місткості термінала без стирання предметного типу. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 16. Історія дій
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести команди додавання символів; History<T> на вузлах зберігає попередні значення. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести команди додавання символів; History<T> на вузлах зберігає попередні значення. Додати undo і порожню історію без зміни поточного тексту. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести команди додавання символів; History<T> на вузлах зберігає попередні значення. Додати undo і порожню історію без зміни поточного тексту; додати redo; нова дія після undo очищає гілку повторення. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 17. Показання сенсорів
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести три показання; Reading<T:Number> зберігає значення і порядковий номер. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести три показання; Reading<T:Number> зберігає значення і порядковий номер. Обчислити min/max/mean через toDouble для Int і Double; відхилити NaN. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести три показання; Reading<T:Number> зберігає значення і порядковий номер. Обчислити min/max/mean через toDouble для Int і Double; відхилити NaN; пояснити втрату точності Long при toDouble та перевірити великі значення. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 18. Порівняння товарів
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести два товари з назвою і ціною в копійках; функція з where Named і Comparable<T> обирає дешевший. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести два товари з назвою і ціною в копійках; функція з where Named і Comparable<T> обирає дешевший. При однаковій ціні обирати лексикографічно меншу назву. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести два товари з назвою і ціною в копійках; функція з where Named і Comparable<T> обирає дешевший. При однаковій ціні обирати лексикографічно меншу назву; показати інший клас із цими ж інтерфейсами без зміни функції. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 19. П’єдестал змагань
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести три унікальні імена спортсменів; Podium<out T:Athlete> має три місця. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести три унікальні імена спортсменів; Podium<out T:Athlete> має три місця. Додати Runner та коваріантне подання Podium<Runner> як Podium<Athlete>. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести три унікальні імена спортсменів; Podium<out T:Athlete> має три місця. Додати Runner та коваріантне подання Podium<Runner> як Podium<Athlete>; перевірити заборону повторних учасників і збереження порядку місць. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 20. Зв’язаний список
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести рядки; LinkedList<T> на вузлах додає в кінець і видає елементи по черзі. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести рядки; LinkedList<T> на вузлах додає в кінець і видає елементи по черзі. Реалізувати Iterator<T> з незалежним станом двох обходів. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести рядки; LinkedList<T> на вузлах додає в кінець і видає елементи по черзі. Реалізувати Iterator<T> з незалежним станом двох обходів; визначити й перевірити політику зміни структури під час обходу. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 21. Валідатори
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести ім’я; Validator<in T> повертає повідомлення або null; перевірити непорожнє ім’я. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести ім’я; Validator<in T> повертає повідомлення або null; перевірити непорожнє ім’я. Реалізувати Validator<Person> і застосувати до Student. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести ім’я; Validator<in T> повертає повідомлення або null; перевірити непорожнє ім’я. Реалізувати Validator<Person> і застосувати до Student; об’єднати два валідатори з першим або всіма повідомленнями за явним режимом. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 22. Джерела даних
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести три температури; Source<out T> повертає наступне значення або sealed-кінцівку. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести три температури; Source<out T> повертає наступне значення або sealed-кінцівку. Реалізувати джерело WeatherReading та його подання як джерела Observation. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести три температури; Source<out T> повертає наступне значення або sealed-кінцівку. Реалізувати джерело WeatherReading та його подання як джерела Observation; передати джерело споживачу спостережень і перевірити вичерпання без дублювання. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 23. Дерево категорій
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести корінь і двох нащадків; Tree<T> зберігає вузли та друкує обхід у глибину. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести корінь і двох нащадків; Tree<T> зберігає вузли та друкує обхід у глибину. Додати пошук за рівністю і глибину кожного вузла. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести корінь і двох нащадків; Tree<T> зберігає вузли та друкує обхід у глибину. Додати пошук за рівністю і глибину кожного вузла; не допускати циклів і повторного приєднання того самого вузла. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 24. Мультивалютний гаманець
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести дві суми в копійках; Money<C:Currency> додає одну валюту. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести дві суми в копійках; Money<C:Currency> додає одну валюту. Додати UAH і EUR; конвертацію виконувати лише явно за додатним курсом. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести дві суми в копійках; Money<C:Currency> додає одну валюту. Додати UAH і EUR; конвертацію виконувати лише явно за додатним курсом; задати правило округлення BigDecimal і негативний приклад змішування валют. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 25. Таблиця лідерів
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести імена та бали; Leaderboard<T:Comparable<T>> на вузлах тримає впорядковані значення. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести імена та бали; Leaderboard<T:Comparable<T>> на вузлах тримає впорядковані значення. Додати top(k), визначити порядок нічиєї та поведінку k=0. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести імена та бали; Leaderboard<T:Comparable<T>> на вузлах тримає впорядковані значення. Додати top(k), визначити порядок нічиєї та поведінку k=0; перевірити оновлення результату без дублювання учасника. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 26. Фабрика об’єктів
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести тип circle/rectangle; reified create<T> створює лише відомі моделі з заданими розмірами. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести тип circle/rectangle; reified create<T> створює лише відомі моделі з заданими розмірами. Невідомий тип повертає описану помилку; розміри скінченні додатні. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести тип circle/rectangle; reified create<T> створює лише відомі моделі з заданими розмірами. Невідомий тип повертає описану помилку; розміри скінченні додатні; порівняти з Factory<out T>, що отримує параметри явно без рефлексії. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 27. Черга друку
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести назву документа і сторінки; PrintQueue<T:Document> на вузлах обслуговує FIFO. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести назву документа і сторінки; PrintQueue<T:Document> на вузлах обслуговує FIFO. Додати пріоритет 0..9 зі стабільністю порядку однакового пріоритету. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести назву документа і сторінки; PrintQueue<T:Document> на вузлах обслуговує FIFO. Додати пріоритет 0..9 зі стабільністю порядку однакового пріоритету; реалізувати Sink<in T> і Source<out T> як різні інтерфейси черги. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 28. Налаштування
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести порт і назву; Key<T> зв’язує ключ із валідатором і типізованим значенням. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести порт і назву; Key<T> зв’язує ключ із валідатором і типізованим значенням. Підтримати Int і String без приведень у клієнтському коді. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести порт і назву; Key<T> зв’язує ключ із валідатором і типізованим значенням. Підтримати Int і String без приведень у клієнтському коді; захистити збіг однакових назв ключів різного типу і перевірити nullable-контракт. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 29. Двосторонній зв’язок
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести температуру; Bidirectional<A,B> має forward та backward для Celsius і Fahrenheit. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести температуру; Bidirectional<A,B> має forward та backward для Celsius і Fahrenheit. Перевірити обидва напрями і скінченність результату. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести температуру; Bidirectional<A,B> має forward та backward для Celsius і Fahrenheit. Перевірити обидва напрями і скінченність результату; перевірити round-trip з похибкою 1e-9 для заданого діапазону -100..100. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Варіант 30. Обробники подій
1. Початковий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести код події; Handler<in E> обробляє Event і підтип ClickEvent. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
2. Базовий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести код події; Handler<in E> обробляє Event і підтип ClickEvent. Передати Handler<Event> у місце Handler<ClickEvent>. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки.
3. Високий рівень. Створити консольну програму Kotlin/JVM на JDK 27: ввести код події; Handler<in E> обробляє Event і підтип ClickEvent. Передати Handler<Event> у місце Handler<ClickEvent>; реалізувати ланцюжок двох обробників зі стабільним порядком і політикою помилки. Вивести результат з підписами; перевірити звичайний, граничний і неправильний випадки. Додати аргументи CLI у форматі ключ=значення та --help; без аргументів читати ті самі поля з клавіатури. Виводити підписаний табличний звіт із підсумком; помилки надсилати у stderr. Коди завершення: 0 – успіх або довідка, 2 – неправильний ввід, 1 – операційний збій.
Порядок виконання та захисту роботи
- Запишіть допустимі аргументи типів і операції контейнера.
- Реалізуйте повну консольну програму з перевіреним форматом входу.
- Перевірте порожній стан, один елемент, кілька елементів і помилку.
- Використайте щонайменше два різні аргументи типу.
- Збережіть окремий негативний приклад компіляції з поясненням.
- Подайте таблицю входів і фактичних результатів, код та README.
- На захисті поясніть напрям одного присвоєння з
inабоout.