Українська
Контрольні завдання
Практичні завдання за темами курсу для перевірки знань. Кожне завдання — окрема програма.
Тема 1. Мова Kotlin і перша програма
- Створити Kotlin/JVM програму: з клавіатури прочитати відстань d 1–10000 км і пальне l 0.1–1000 л; вивести витрату 100*l/d у л/100 км. Дробові результати друкувати з двома знаками, цілі без дробової частини. Зафіксувати правильний формат вводу в README, перевірити два випадки, зробити три локальні Git-коміти.
- Створити Kotlin/JVM програму: з клавіатури прочитати суму s 0–100000 грн і навчальний курс r 1–100 грн/ум.од.; вивести s/r умовних одиниць. Дробові результати друкувати з двома знаками, цілі без дробової частини. Зафіксувати правильний формат вводу в README, перевірити два випадки, зробити три локальні Git-коміти.
- Створити Kotlin/JVM програму: з клавіатури прочитати масу m 1–300 кг та зріст h 0.5–2.5 м; вивести навчальний індекс m/(h*h), без медичної інтерпретації. Дробові результати друкувати з двома знаками, цілі без дробової частини. Зафіксувати правильний формат вводу в README, перевірити два випадки, зробити три локальні Git-коміти.
- Створити Kotlin/JVM програму: з клавіатури прочитати довжину l і ширину w 1–100 м, витрату фарби c 0.1–2 л/м²; вивести фарбу l*w*c літрів для підлоги. Дробові результати друкувати з двома знаками, цілі без дробової частини. Зафіксувати правильний формат вводу в README, перевірити два випадки, зробити три локальні Git-коміти.
- Створити Kotlin/JVM програму: з клавіатури прочитати температуру t від −100 до 100 °C; вивести температури 1.8*t+32 °F і t+273.15 K. Дробові результати друкувати з двома знаками, цілі без дробової частини. Зафіксувати правильний формат вводу в README, перевірити два випадки, зробити три локальні Git-коміти.
- Створити Kotlin/JVM програму: з клавіатури прочитати цілу кількість секунд s 0–1000000; вивести повні години, залишкові хвилини й секунди. Дробові результати друкувати з двома знаками, цілі без дробової частини. Зафіксувати правильний формат вводу в README, перевірити два випадки, зробити три локальні Git-коміти.
- Створити Kotlin/JVM програму: з клавіатури прочитати навчальні p 1–100000 грн і r 0–20 відсотків за рік; вивести p*(1+r/100) через один рік без комісій. Дробові результати друкувати з двома знаками, цілі без дробової частини. Зафіксувати правильний формат вводу в README, перевірити два випадки, зробити три локальні Git-коміти.
- Створити Kotlin/JVM програму: з клавіатури прочитати цілі значення кількості n 1–100 і ціни c 1–10000 коп.; вивести суму n*c копійок. Дробові результати друкувати з двома знаками, цілі без дробової частини. Зафіксувати правильний формат вводу в README, перевірити два випадки, зробити три локальні Git-коміти.
- Створити Kotlin/JVM програму: з клавіатури прочитати відстань d 0.1–100 км та час t 1–1000 хв; вивести темп t/d хв/км і швидкість 60*d/t км/год. Дробові результати друкувати з двома знаками, цілі без дробової частини. Зафіксувати правильний формат вводу в README, перевірити два випадки, зробити три локальні Git-коміти.
- Створити Kotlin/JVM програму: з клавіатури прочитати розміри a,b,c 0.1–100 м і подачу q 1–1000 л/хв; вивести об’єм 1000*a*b*c л і час наповнення в хвилинах. Дробові результати друкувати з двома знаками, цілі без дробової частини. Зафіксувати правильний формат вводу в README, перевірити два випадки, зробити три локальні Git-коміти.
Тема 2. Типи, null-безпека, керування
- Створити консольну програму Kotlin: читати роки a,b у 1–9999, a<=b; вивести високосні за григоріанським правилом 400 або 4 без 100. Використати nullable-перетворення без !!, перевірити межі та EOF; повторити запит після неправильного рядка. Надрукувати підсумок тільки для коректного набору.
- Створити консольну програму Kotlin: читати хвилини 0–10000; порівняти навчальні A=100+2*m та B=200+m, за рівності вивести обидва. Використати nullable-перетворення без !!, перевірити межі та EOF; повторити запит після неправильного рядка. Надрукувати підсумок тільки для коректного набору.
- Створити консольну програму Kotlin: читати координати двох різних клітин 1–8; перевірити хід тури без інших фігур. Використати nullable-перетворення без !!, перевірити межі та EOF; повторити запит після неправильного рядка. Надрукувати підсумок тільки для коректного набору.
- Створити консольну програму Kotlin: читати a,b у 0–10000, a<=b; вивести кількість простих у включному діапазоні. Використати nullable-перетворення без !!, перевірити межі та EOF; повторити запит після неправильного рядка. Надрукувати підсумок тільки для коректного набору.
- Створити консольну програму Kotlin: читати кратну 10 суму 10–100000; розкласти на необмежені купюри 100, 50, 20, 10 і надрукувати кількості. Використати nullable-перетворення без !!, перевірити межі та EOF; повторити запит після неправильного рядка. Надрукувати підсумок тільки для коректного набору.
- Створити консольну програму Kotlin: читати місяць 1–12 та день; перевірити дату невисокосного року за фактичною довжиною місяця. Використати nullable-перетворення без !!, перевірити межі та EOF; повторити запит після неправильного рядка. Надрукувати підсумок тільки для коректного набору.
- Створити консольну програму Kotlin: задати секрет 37; читати до 7 цілих спроб 1–100, друкувати більше/менше/вгадано та число спроб. Використати nullable-перетворення без !!, перевірити межі та EOF; повторити запит після неправильного рядка. Надрукувати підсумок тільки для коректного набору.
- Створити консольну програму Kotlin: читати n 1–10000; обчислити суму власних додатних дільників і класифікувати відносно n. Використати nullable-перетворення без !!, перевірити межі та EOF; повторити запит після неправильного рядка. Надрукувати підсумок тільки для коректного набору.
- Створити консольну програму Kotlin: читати n 1–1000 скінченних температур −50..60; підрахувати нижче 0, рівно 0, вище 0. Використати nullable-перетворення без !!, перевірити межі та EOF; повторити запит після неправильного рядка. Надрукувати підсумок тільки для коректного набору.
- Створити консольну програму Kotlin: читати ціле 1–10; вивести точний запис I, II, III, IV, V, VI, VII, VIII, IX, X через when. Використати nullable-перетворення без !!, перевірити межі та EOF; повторити запит після неправильного рядка. Надрукувати підсумок тільки для коректного набору.
Тема 3. Функції та рядки
- Створити консольну програму Kotlin/JVM, яка читає ціну товару в копійках і знижку 0..1 та друкує ціну зі знижкою. Функція ціни має знижку за замовчуванням 0 і форматує валюту; показати виклики з іменованими аргументами.
- Створити консольну програму Kotlin/JVM, яка читає цілі числа й друкує їхні min, max і середнє. Обчислення виконати vararg-функцією для Int; порожній набір обробити явно, наявний масив передати оператором розгортання.
- Створити консольну програму Kotlin/JVM, яка читає ціле n 0..20 і друкує n!, обчислений рекурсивною функцією. Пояснити базовий випадок; значення 21 відхилити.
- Створити консольну програму Kotlin/JVM, яка читає основу -10..10 і показник 0..18 та друкує степінь, обчислений tailrec-функцією. Порівняти її зі звичайною рекурсією.
- Створити консольну програму Kotlin/JVM, яка читає рядок і друкує, чи є він паліндромом. Реалізувати функцію-розширення String.isPalindrome з ігноруванням пробілів і регістру; визначити поведінку порожнього рядка.
- Створити консольну програму Kotlin/JVM, яка читає рядок і друкує кількість слів у ньому. Реалізувати властивість-розширення String.wordCount за переходами між пробільними й непробільними символами.
- Створити консольну програму Kotlin/JVM, яка читає ім’я, посаду й телефон та друкує візитну картку. Картку сформувати з багаторядкового шаблону з trimMargin, ширину полів передавати іменованим аргументом.
- Створити консольну програму Kotlin/JVM, яка читає номер телефону й друкує, чи відповідає він повному формату +380 і 9 цифр. Перевірку виконати через Regex; показати, чому find не підходить для валідації всього рядка.
- Створити консольну програму Kotlin/JVM, яка читає прізвище й ім’я одним рядком і друкує ініціали. Реалізувати String.toInitials; зайві пробіли нормалізувати, одного слова недостатньо.
- Створити консольну програму Kotlin/JVM, яка читає рядок тексту й друкує його в рамці. Функція рамки має типовий символ * і ширину 20; довгий рядок відхилити, порожній відобразити.
Тема 4. Винятки, Result, налагодження
- Створити консольну програму Kotlin: читати рядок a op b, a/b скінченні від −1000 до 1000, op лише +,-,*,/; вивести результат, ділення на 0 відхилити. Описати предметну помилку власним типом, зберегти cause під час обгортання; перевірити нормальний, граничний і неправильний ввід та незмінність стану після збою.
- Створити консольну програму Kotlin: читати рядок limit=число; дозволити лише ключ limit і ціле 1–100, вивести прийняте значення. Описати предметну помилку власним типом, зберегти cause під час обгортання; перевірити нормальний, граничний і неправильний ввід та незмінність стану після збою.
- Створити консольну програму Kotlin: читати from,to,amount цілими копійками 0–1000000; amount>0 і <=from, to+amount<=1000000; повернути обидва нові баланси лише після перевірки. Описати предметну помилку власним типом, зберегти cause під час обгортання; перевірити нормальний, граничний і неправильний ввід та незмінність стану після збою.
- Створити консольну програму Kotlin: читати число 0–1000000 й одиницю m, cm, km; перетворити в метри, невідому одиницю відхилити. Описати предметну помилку власним типом, зберегти cause під час обгортання; перевірити нормальний, граничний і неправильний ввід та незмінність стану після збою.
- Створити консольну програму Kotlin: задати 20 місць, зайнятими є 3 і 7; читати номер 1–20 і вивести підтвердження лише для вільного. Описати предметну помилку власним типом, зберегти cause під час обгортання; перевірити нормальний, граничний і неправильний ввід та незмінність стану після збою.
- Створити консольну програму Kotlin: читати ISO дату yyyy-MM-dd; через java.time.LocalDate перевірити календарну коректність і вивести день року. Описати предметну помилку власним типом, зберегти cause під час обгортання; перевірити нормальний, граничний і неправильний ввід та незмінність стану після збою.
- Написати консольну програму Kotlin, яка читає рядок із двома скінченними координатами через кому та друкує розібрану пару або причину помилки. Функція розбору повертає Result пари Double; обробити успіх і помилку через fold; перевірити порожній рядок, зайве поле та NaN.
- Написати консольну програму Kotlin, яка читає цілі числа із заданого в коді багаторядкового тексту через StringReader і use та друкує їхню суму. Показати нормальне завершення та збій перетворення, пояснити закриття ресурсу і зберегти початковий виняток як cause.
- Написати консольну програму Kotlin з функцією середнього лише додатних чисел; для масиву 10, −5, 20 вивести результат. Для порожнього набору функція повертає null. Показати локальні змінні й правильний знаменник у налагоджувачі; перевірити результат 15.0.
- Написати CLI конвертації Цельсія у кельвіни: один скінченний аргумент у межах −273.15–10000. Успіх друкує результат і повертає код 0; помилка формату або меж друкує пояснення у stderr і повертає код 2.
Тема 5. Класи та об’єкти
- Створити консольну програму Kotlin/JVM: ввести ім’я й рік навчання 1..6; створити Student з первинним конструктором та init-перевіркою, вивести властивості й причину відмови для неправильного року.
- Створити консольну програму Kotlin/JVM: ввести температуру; реалізувати перевірений сетер Celsius та обчислюваний Fahrenheit, відхилити NaN, нескінченність і значення нижче −273,15.
- Створити консольну програму Kotlin/JVM: ввести баланс і суму зняття; реалізувати Account із private set, вивести баланс після успіху або незмінний баланс після відмови.
- Створити консольну програму Kotlin/JVM: ввести довжини сторін прямокутника; реалізувати обчислювані area і perimeter та перевірити додатність розмірів.
- Створити консольну програму Kotlin/JVM: ввести гривні й копійки; реалізувати два конструктори Money з делегуванням this та вивести загальні копійки без Double.
- Створити консольну програму Kotlin/JVM: ввести ім’я та наставника; реалізувати Student із lateinit-властивістю та перевіркою isInitialized, вивести опис до й після призначення.
- Створити консольну програму Kotlin/JVM: створити клас Ticket у пакеті model і main у пакеті app; ввести номер, перевірити непорожність, імпортувати клас із псевдонімом і вивести номер.
- Створити консольну програму Kotlin/JVM: ввести назву плеєра й треку; реалізувати вкладений Track та inner Playback, показати доступ внутрішнього об’єкта до імені власника.
- Створити консольну програму Kotlin/JVM: ввести назву об’єкта; створити Trace з двома init-блоками й вторинним конструктором, вивести фактичний порядок ініціалізації.
- Створити консольну програму Kotlin/JVM: ввести номер і баланс рахунку; створити два незалежні об’єкти та друге посилання на перший, змінити перший і вивести результати == та ===.
Тема 6. Наслідування та поліморфізм
- Створити консольну програму Kotlin/JVM: ввести оклад і премію; створити open Employee та BonusEmployee з override і super, вивести поліморфну зарплату.
- Створити консольну програму Kotlin/JVM: ввести радіус або сторони прямокутника; створити abstract Shape та два підкласи, вивести площу через Shape.
- Створити консольну програму Kotlin/JVM: ввести заряд лампи та команду; реалізувати Switchable і Chargeable одним класом і вивести стан через обидва інтерфейси.
- Створити консольну програму Kotlin/JVM: створити Swimmer і Flyer зі стандартним move та Duck; вивести результат явного super-виклику обох реалізацій.
- Створити консольну програму Kotlin/JVM: ввести назву й кількість; реалізувати шаблонний метод Report.render з protected abstract body та два види звіту.
- Створити консольну програму Kotlin/JVM: ввести стабільний номер двох об’єктів; узгоджено перевизначити equals, hashCode і toString, вивести рівність і перевірку хешів.
- Створити консольну програму Kotlin/JVM: ввести вид note або number і значення; використати is та as? для Printable/Note, вивести текст або причину неможливості приведення.
- Створити консольну програму Kotlin/JVM: створити Base і Derived з повідомленнями init; ввести мітку й показати порядок побудови та override після завершення створення.
- Створити консольну програму Kotlin/JVM: ввести повідомлення; реалізувати Formatter та Printer через композицію, вивести результат без наслідування Printer від Formatter.
- Створити консольну програму Kotlin/JVM: ввести дві додатні відстані; реалізувати Transport для bus і taxi та один клієнтський цикл, вивести вартість і перевірити нульову відстань.
Тема 7. Класи даних, переліки, sealed
- Створити консольну програму Kotlin/JVM: ввести назву й рік книги; створити data Book, copy зі зміненим роком, деструктуризувати й вивести рівність значень.
- Створити консольну програму Kotlin/JVM: ввести ім’я й місто; продемонструвати поверхневе copy data Customer зі змінною Address та вивести спільність посилання.
- Створити консольну програму Kotlin/JVM: ввести день тижня; enum Day має weekend і next, вивести всі вихідні через entries та наступний день.
- Створити консольну програму Kotlin/JVM: ввести назву планети й масу; enum Planet містить g, вивести силу ваги та обробити невідоме ім’я valueOf.
- Створити консольну програму Kotlin/JVM: ввести стан Created/Paid/Shipped і його дані; sealed OrderStatus та вичерпний when формують опис.
- Створити консольну програму Kotlin/JVM: ввести суму й залишок; повернути sealed Success/Declined/Invalid і надрукувати відповідні дані результату.
- Створити консольну програму Kotlin/JVM: ввести дві назви квитків; object IdSource і companion-фабрика створюють перевірені квитки, вивести послідовні ID.
- Створити консольну програму Kotlin/JVM: ввести додатний ідентифікатор і ім’я; value UserId та User із приватним конструктором і companion create, вивести запис.
- Створити консольну програму Kotlin/JVM: ввести префікс; створити два анонімні об’єкти Message через фабрику, вивести тексти та результат ===.
- Створити консольну програму Kotlin/JVM: ввести ADD/MAX і два цілі числа −1000..1000; enum реалізує інтерфейс операції окремо для кожної константи, вивести результат.
Тема 8. Операції та делегування
- Створити консольну програму Kotlin/JVM: ввести два вектори; реалізувати plus, times, unaryMinus і get, вивести результати й відмову для неправильного індексу.
- Створити консольну програму Kotlin/JVM: ввести суми в копійках; реалізувати Money.plus, minus і compareTo, вивести результат та перевірити незмінність операндів.
- Створити консольну програму Kotlin/JVM: ввести коефіцієнти полінома й x; реалізувати invoke і get за степенем, вивести значення полінома та коефіцієнт.
- Створити консольну програму Kotlin/JVM: ввести дві ISO-дати; реалізувати rangeTo, contains та iterator, вивести всі дати включно й перевірити порожній діапазон.
- Створити консольну програму Kotlin/JVM: ввести число; створити незмінний Counter з plus та inc, вивести відмінність префіксного й постфіксного результатів.
- Створити консольну програму Kotlin/JVM: ввести три числа; lazy summary рахує їхню суму, двічі прочитати й вивести кількість ініціалізацій.
- Створити консольну програму Kotlin/JVM: ввести початкову й нову гучність; vetoable допускає 0..100, observable журналює тему, вивести прийнятий стан.
- Створити консольну програму Kotlin/JVM: ввести ім’я; власний ReadWriteProperty нормалізує пробіли та відхиляє порожній текст, вивести стан після відмови.
- Створити консольну програму Kotlin/JVM: ввести ключ title конфігурації; provideDelegate перевіряє ключ під час створення, вивести значення або повідомлення про відсутність.
- Створити консольну програму Kotlin/JVM: ввести рядки; Repository та CountingRepository by рахують успішні прямі save, вивести дані й кількість та пояснити внутрішні виклики делегата.
Тема 9. Узагальнене програмування
- Створити консольну програму Kotlin/JVM, яка читає рядки, а потім цілі числа, і друкує кожен набір у зворотному порядку через узагальнений Stack<T> на вузлах. Реалізувати push/pop з явною відмовою порожнього вилучення; продемонструвати Int і String.
- Створити консольну програму Kotlin/JVM, яка читає три значення, додає їх в узагальнену чергу Queue<T> на вузлах і друкує вилучені елементи та розмір. Перевірити FIFO та розмір після вичерпання.
- Створити консольну програму Kotlin/JVM, яка читає три цілі числа та три ISO-дати й друкує найбільше значення кожної трійки. Написати одну узагальнену функцію найбільшого з трьох Comparable-значень.
- Створити консольну програму Kotlin/JVM з ієрархією Animal/Cat, яка читає клички котів і друкує їх через джерело тварин. Реалізувати Source<out T> і показати безпечне присвоєння Source<Cat> змінній типу Source<Animal>.
- Створити консольну програму Kotlin/JVM з ієрархією Animal/Cat, яка читає клички котів і друкує їх через споживача. Реалізувати Sink<in T> та передати споживача Animal як споживача Cat. Пояснити напрям.
- Створити консольну програму Kotlin/JVM, яка читає назву типу int або bool і текст та друкує розібране значення або причину відмови. Реалізувати inline reified parser для Int/Boolean; відхилити неправильний текст і непідтримуваний тип.
- Створити консольну програму Kotlin/JVM, яка читає оцінку 0..100 як рядок і друкує прийняту оцінку або причину відмови. Реалізувати sealed Either<String,Int>; обробити успіх і дві причини відмови: нецілий текст і вихід за межі.
- Створити консольну програму Kotlin/JVM, яка читає дві цілі межі й число та друкує, чи належить число діапазону. Створити Range<T:Comparable<T>> із перевіркою меж і contains. Перевірити обидві межі та зворотний діапазон.
- Створити консольну програму Kotlin/JVM, яка читає ім’я та цілий бал і друкує пару до й після обміну. Створити Duo<out A,out B> зі swap. Довести подвійним обміном повернення початкового значення.
- Створити консольну програму Kotlin/JVM, яка читає імена й бали двох кандидатів і друкує ім’я кращого. Реалізувати функцію з where T:Named,T:Comparable<T>, яка повертає ім’я кращого кандидата з правилом нічиєї.
Тема 10. Масиви та колекції
- Створити консольну програму Kotlin/JVM, яка читає непорожній DoubleArray, відхиляє нескінченні числа та друкує min/max/mean.
- Створити консольну програму Kotlin/JVM, яка читає прямокутну матрицю цілих у Array<IntArray> і друкує транспоновану матрицю. Відхилити нерівні рядки та перевірити незалежність результату від вихідного масиву.
- Створити консольну програму Kotlin/JVM для списку покупок: користувач додає назви з дублями й видаляє перший збіг, програма друкує список після кожної дії. Назовні віддавати захисний знімок списку.
- Створити консольну програму Kotlin/JVM, яка читає два набори слів і друкує їхній перетин, об’єднання й обидві різниці у визначеному порядку.
- Створити консольну програму Kotlin/JVM, яка читає текст, рахує частоти слів через MutableMap і друкує їх за ключем; порожній текст дає порожній звіт.
- Створити консольну програму Kotlin/JVM, яка читає рядки й друкує для кожного різного рядка позиції його появи. Позиції згрупувати в Map<String,MutableList<Int>> через getOrPut.
- Створити консольну програму Kotlin/JVM для черги талонів: команди додають талон або викликають наступний. Реалізувати FIFO через ArrayDeque з явним повідомленням про порожню чергу.
- Створити консольну програму Kotlin/JVM – простий текстовий редактор із командами зміни тексту, undo і redo, що друкує поточний текст після кожної команди. Реалізувати undo/redo через два ArrayDeque та очистити redo після нової зміни.
- Створити консольну програму Kotlin/JVM, яка читає список цілих чисел і друкує його після видалення парних. Видаляти безпечно через MutableIterator.remove; перевірити порожній список.
- Створити консольну програму Kotlin/JVM, яка читає товари з назвою й ціною та друкує їх упорядкованими за ціною і назвою. Показати збереження початкового списку після sortedWith.
Тема 11. Лямбди та послідовності
- Створити консольну програму Kotlin/JVM – калькулятор, який читає команду й два числа та друкує результат. Створити Map<String,(Double,Double)->Double> для чотирьох арифметичних операцій; відхилити нульовий дільник і невідому команду.
- Створити консольну програму Kotlin/JVM, яка демонструє лічильники-замикання: фабрика повертає функцію, що збільшує й повертає значення свого лічильника. Вивести значення двох незалежних екземплярів і двох посилань на один, довівши їхню незалежність і спільність.
- Створити консольну програму Kotlin/JVM, яка читає замовлення з полями city/paid/cents, обчислює суми оплачених замовлень за містами й друкує їх відсортованими з правилом нічиєї.
- Створити консольну програму Kotlin/JVM, яка читає імена й бали студентів, розділяє їх за порогом 60 через partition і друкує обидві групи та найкращого студента з визначеним правилом нічиєї.
- Створити консольну програму Kotlin/JVM, яка читає працівників (id, ім’я, відділ) і друкує індекс, створений через associateBy, попередньо відхиливши повторні id.
- Створити консольну програму Kotlin/JVM, яка читає список цін типу Long і друкує їхню суму, згорнуту через fold; порожній набір має дати 0, переповнення відхилити.
- Створити консольну програму Kotlin/JVM, яка читає N і друкує перші N простих чисел до 1000000 з Sequence та кількість перевірених кандидатів.
- Створити консольну програму Kotlin/JVM, яка читає рядок і друкує довжину його нормалізованого варіанта. Написати композицію (A)->B та (B)->C і використати її для нормалізації рядка та обчислення довжини.
- Створити консольну програму Kotlin/JVM, яка читає назву налаштувань і друкує її або запасну назву для порожнього вводу. Показати apply/also/let на nullable-назві.
- Створити консольну програму Kotlin/JVM, яка читає заголовок і рядки звіту та друкує текстовий звіт, побудований DSL із лямбдою-приймачем. Перевірити порожній звіт.
Тема 12. Файли, серіалізація, тести
- Створити консольну програму Kotlin/JVM, яка читає UTF-8 файл, шлях до якого передано аргументом, через useLines і друкує кількість непорожніх рядків; ресурс має правильно закриватися при винятку.
- Створити консольну програму Kotlin/JVM, яка читає обмежений CSV-файл name;score з заголовком і друкує середній бал або повідомлення про відсутність даних. Поля в лапках і бали поза 0..100 відхилити.
- Створити консольну програму Kotlin/JVM, яка зберігає введений список контактів (id, ім’я, телефон) у JSON-файл через @Serializable, читає його назад і друкує. Перевірити round-trip та унікальність id.
- Створити консольну програму Kotlin/JVM, яка читає JSON-конфігурацію з файлу й друкує прийняті налаштування. Порт за замовчуванням 8080, невідомі ключі пропускати через ignoreUnknownKeys; перевірити межі порту 1..65535.
- Створити консольну програму Kotlin/JVM, яка зберігає в JSON і відновлює видання двох видів: друковане Printed і аудіо Audio. Реалізувати sealed-модель і JSON-дискримінатор kind; перевірити й вивести відновлення обох варіантів.
- Створити консольну програму Kotlin/JVM, яка зберігає в JSON і відновлює запис із датою LocalDate. Написати KSerializer<LocalDate> для ISO-рядка і перевірити правильну та неправильну дату.
- Створити консольну програму Kotlin/JVM, яка читає бал 0..100 і друкує, чи досягнуто порога 60. Написати параметризований kotlin.test тест порога для балів 0, 59, 60, 100 і тести неправильних меж.
- Створити консольну програму Kotlin/JVM для нотаток, яка зберігає їх у JSON-файл і завантажує назад. Створити репозиторій нотаток із save/load і @TempDir тестами round-trip та пошкодженого JSON.
- Створити консольну програму Kotlin/JVM, яка записує введений текст у файл, шлях до якого передано аргументом, через тимчасовий файл та ATOMIC_MOVE. Не приховувати відсутність підтримки атомарного переміщення й очистити тимчасовий файл.
- Створити консольну програму Kotlin/JVM, яка додає введені записи з id до JSON-файлу. Показати, що неправильний запис із повторним id не змінює попередній файл; перевірити це kotlin.test тестом.
Тема 13. Корутини та Flow
- Створити самостійну Kotlin-програму. Прочитати дві додатні затримки, запустити дві async-дії та вивести обидва результати після await; пояснити порядок.
- Створити самостійну Kotlin-програму. Прочитати межі двох діапазонів, обчислити суми на Dispatchers.Default і вивести загальну суму без спільного накопичувача.
- Створити самостійну Kotlin-програму. Прочитати тайм-аут і тривалість модельного запиту, вивести результат або повідомлення про час; підтвердити виконання finally.
- Створити самостійну Kotlin-програму. Запустити нескінченну обчислювальну задачу з ensureActive, скасувати її після команди користувача й вивести підтвердження завершення.
- Створити самостійну Kotlin-програму. Прочитати суми поповнень, виконати їх конкурентно під Mutex та вивести баланс; від’ємні суми відхилити без зміни стану.
- Створити самостійну Kotlin-програму. Прочитати список чисел, видати їх через Flow, відфільтрувати парні, обчислити квадрати й вивести список; порожній список дозволити.
- Створити самостійну Kotlin-програму. Змоделювати два незалежні джерела у supervisorScope, одне з помилкою; вивести результат або помилку кожного, не поглинаючи скасування.
- Створити самостійну Kotlin-програму. Прочитати послідовність змін кількості місць, зберігати невід’ємний поточний стан у StateFlow й вивести фінальне значення.
- Створити самостійну Kotlin-програму. Передати введені замовлення через обмежений Channel двом споживачам; вивести всі оброблені ідентифікатори рівно один раз.
- Створити самостійну Kotlin-програму. Реалізувати suspend-функцію відкладеного результату та два тести runTest: успішне отримання і тайм-аут; вивести звіт тестів.
Тема 14. Бази даних з Exposed
- Створити самостійну Kotlin-програму з Exposed. Створити таблицю товарів із назвою та ціною в копійках, ввести три товари й показати їх у порядку ціни.
- Створити самостійну Kotlin-програму з Exposed. Для SQLite-каталогу книг реалізувати додавання, зміну назви й видалення за id; вивести кількість змінених рядків.
- Створити самостійну Kotlin-програму з Exposed. Створити авторів і книги із зовнішнім ключем, ввести дані та показати назви книг разом з авторами через innerJoin.
- Створити самостійну Kotlin-програму з Exposed. Створити категорії і витрати, включно з порожньою категорією, та вивести кількість витрат через leftJoin і groupBy.
- Створити самостійну Kotlin-програму з Exposed. Зберегти два баланси, виконати переказ, імітувати виняток після списання й перевірити новою транзакцією повний відкат.
- Створити самостійну Kotlin-програму з Exposed. Створити репозиторій контактів, який повертає data-класи; перевірити збереження й пошук після повторного відкриття файлу.
- Створити самостійну Kotlin-програму з Exposed. Описати DAO-сутність видання з назвою, створити й перейменувати її в транзакції, вивести звичайний рядок за межами транзакції.
- Створити самостійну Kotlin-програму з Exposed. Реалізувати пошук точного імені параметризованим DSL-запитом і перевірити значення з апострофом та SQL-подібним текстом.
- Створити самостійну Kotlin-програму з Exposed. Реалізувати suspend-функцію читання каталогу через withContext(IO) і коротку JDBC-транзакцію; вивести список або предметну помилку.
- Створити самостійну Kotlin-програму з Exposed. Додати унікальний індекс до контактів та тест дубліката; підтвердити, що помилка не змінює наявний запис.
Тема 15. Compose Multiplatform
- Створити самостійну Kotlin/Compose-програму. Створити форму обчислення площі прямокутника, відхилити від’ємні й нескінченні числа, показати результат та скидання.
- Створити самостійну Kotlin/Compose-програму. Створити лічильник 0–100 з кнопками збільшення, зменшення й скидання, перевірити недоступність дій на межах.
- Створити самостійну Kotlin/Compose-програму. Створити список покупок з додаванням, прапорцем виконання й видаленням за сталим id, показати кількість невиконаних.
- Створити самостійну Kotlin/Compose-програму. Створити анкету з ім’ям, RadioButton і Checkbox, заблокувати підтвердження до коректного введення.
- Створити самостійну Kotlin/Compose-програму. Створити конвертер довжини з підняттям стану та двома дочірніми компонентами, показати помилку для порожнього числа.
- Створити самостійну Kotlin/Compose-програму. Створити адаптивну сітку карток товарів зі стабільними ключами, перевірити зміну ширини вікна.
- Створити самостійну Kotlin/Compose-програму. Створити список нотаток з AlertDialog додавання; Cancel зберігає список незмінним, порожня назва не допускається.
- Створити самостійну Kotlin/Compose-програму. Створити секундомір із паузою та скиданням, час визначати монотонним годинником, оновлення виконувати LaunchedEffect.
- Створити самостійну Kotlin/Compose-програму. Створити форму чайових зі Slider та Switch округлення, обчислення винести в чисту функцію та протестувати межі.
- Створити самостійну Kotlin/Compose-програму. Створити Scaffold із верхньою панеллю й кнопкою додавання картки, коректно застосувати innerPadding та обробити порожній список.
Тема 16. MVVM і навігація
- Створити самостійну Kotlin/Compose-програму. Реалізувати ViewModel лічильника зі StateFlow та екран із подіями increment/reset; перевірити межу 100 тестом.
- Створити самостійну Kotlin/Compose-програму. Реалізувати конвертер із валідацією у ViewModel, зберігати текст чернетки й показувати предметну помилку без винятку UI.
- Створити самостійну Kotlin/Compose-програму. Реалізувати список і деталі контактів із @Serializable маршрутом id, кнопкою Back та повідомленням для невідомого id.
- Створити самостійну Kotlin/Compose-програму. Реалізувати репозиторій нотаток Exposed/SQLite, повертати data-класи та викликати його з ViewModel поза Main.
- Створити самостійну Kotlin/Compose-програму. Реалізувати форму редагування книги: зберігати чернетку після помилки репозиторію й очищати лише після успіху.
- Створити самостійну Kotlin/Compose-програму. Реалізувати loading/data/error для завантаження каталогу та кнопку повторної спроби, не дозволяти два одночасні запити.
- Створити самостійну Kotlin/Compose-програму. Написати runTest для ViewModel із fake-репозиторієм: порожнє введення, успіх і помилка зі збереженою чернеткою.
- Створити самостійну Kotlin/Compose-програму. Реалізувати видалення запису з підтвердженням і перезавантаженням списку; Cancel не викликає репозиторій.
- Створити самостійну Kotlin/Compose-програму. Реалізувати повідомлення про успішне збереження через Snackbar із підтвердженням обробки та пояснити контракт доставки.
- Створити самостійну Kotlin/Compose-програму. Реалізувати контейнер ручного впровадження SQLite-репозиторію, перевірити однаковий шлях до бази після запуску з іншої робочої теки.