Українська
Завдання
Відповідно до номера свого варіанта виконайте завдання обраного рівня складності.
Варіанти
Варіант 1. Паралельне завантаження
1. Початковий рівень. Створити консольну Kotlin-програму «Паралельне завантаження»: імітація завантаження файлів із прогресом. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Паралельне завантаження»: імітація завантаження файлів із прогресом. Прочитати для двох серверів-джерел списки файлів (назва й розмір у МБ) і кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Паралельне завантаження»: імітація завантаження файлів із прогресом. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 2. Температурні датчики
1. Початковий рівень. Створити консольну Kotlin-програму «Температурні датчики»: Flow показань і ковзне середнє. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Температурні датчики»: Flow показань і ковзне середнє. Прочитати для двох датчиків початкову температуру й крок її зміни та кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Температурні датчики»: Flow показань і ковзне середнє. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 3. Кухня ресторану
1. Початковий рівень. Створити консольну Kotlin-програму «Кухня ресторану»: кухарі-корутини обробляють чергу замовлень. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Кухня ресторану»: кухарі-корутини обробляють чергу замовлень. Прочитати для двох кухарів списки замовлень (страва й час приготування) і кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Кухня ресторану»: кухарі-корутини обробляють чергу замовлень. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 4. Табло аеропорту
1. Початковий рівень. Створити консольну Kotlin-програму «Табло аеропорту»: оновлення статусів рейсів через Flow. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Табло аеропорту»: оновлення статусів рейсів через Flow. Прочитати для двох джерел оновлень списки рейсів (номер і статус) і кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Табло аеропорту»: оновлення статусів рейсів через Flow. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 5. Краулер-симулятор
1. Початковий рівень. Створити консольну Kotlin-програму «Краулер-симулятор»: обмеження паралельності через Semaphore. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Краулер-симулятор»: обмеження паралельності через Semaphore. Прочитати для двох краулерів списки умовних адрес сторінок і кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Краулер-симулятор»: обмеження паралельності через Semaphore. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 6. Таймер Pomodoro
1. Початковий рівень. Створити консольну Kotlin-програму «Таймер Pomodoro»: відлік із паузою та скасуванням. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Таймер Pomodoro»: відлік із паузою та скасуванням. Прочитати для двох таймерів тривалості робочого інтервалу й перерви та кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Таймер Pomodoro»: відлік із паузою та скасуванням. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 7. Пошук простих чисел
1. Початковий рівень. Створити консольну Kotlin-програму «Пошук простих чисел»: паралельний пошук у діапазонах. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Пошук простих чисел»: паралельний пошук у діапазонах. Прочитати два діапазони чисел для пошуку простих і кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Пошук простих чисел»: паралельний пошук у діапазонах. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 8. Автомийка
1. Початковий рівень. Створити консольну Kotlin-програму «Автомийка»: обслуговування авто кількома боксами. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Автомийка»: обслуговування авто кількома боксами. Прочитати для двох боксів списки авто (номер і тривалість миття) і кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Автомийка»: обслуговування авто кількома боксами. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 9. Чат-кімната
1. Початковий рівень. Створити консольну Kotlin-програму «Чат-кімната»: SharedFlow повідомлень для підписників. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Чат-кімната»: SharedFlow повідомлень для підписників. Прочитати для двох учасників чату списки повідомлень і кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Чат-кімната»: SharedFlow повідомлень для підписників. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 10. Агрегатор погоди
1. Початковий рівень. Створити консольну Kotlin-програму «Агрегатор погоди»: async-запити до джерел із тайм-аутами. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Агрегатор погоди»: async-запити до джерел із тайм-аутами. Прочитати для двох метеоджерел умовні температури й затримки відповіді та кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Агрегатор погоди»: async-запити до джерел із тайм-аутами. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 11. Трансляція матчу
1. Початковий рівень. Створити консольну Kotlin-програму «Трансляція матчу»: потік подій, фільтрація, combine рахунку. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Трансляція матчу»: потік подій, фільтрація, combine рахунку. Прочитати для двох команд списки подій матчу (хвилина й тип події) і кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Трансляція матчу»: потік подій, фільтрація, combine рахунку. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 12. Стиснення файлів
1. Початковий рівень. Створити консольну Kotlin-програму «Стиснення файлів»: паралельна обробка на Dispatchers.IO. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Стиснення файлів»: паралельна обробка на Dispatchers.IO. Прочитати для двох обробників списки умовних файлів (назва й розмір) і кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Стиснення файлів»: паралельна обробка на Dispatchers.IO. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 13. Мережа банкоматів
1. Початковий рівень. Створити консольну Kotlin-програму «Мережа банкоматів»: спільний рахунок і Mutex. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Мережа банкоматів»: спільний рахунок і Mutex. Прочитати початковий баланс спільного рахунку, для двох банкоматів списки сум зняття й поповнення та кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Мережа банкоматів»: спільний рахунок і Mutex. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 14. Перехрестя
1. Початковий рівень. Створити консольну Kotlin-програму «Перехрестя»: координація світлофорів корутинами. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Перехрестя»: координація світлофорів корутинами. Прочитати для двох світлофорів тривалості фаз і кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Перехрестя»: координація світлофорів корутинами. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 15. Трекер кур’єра
1. Початковий рівень. Створити консольну Kotlin-програму «Трекер кур’єра»: StateFlow позиції та часу прибуття. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Трекер кур’єра»: StateFlow позиції та часу прибуття. Прочитати для двох кур’єрів маршрути як списки точок і кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Трекер кур’єра»: StateFlow позиції та часу прибуття. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 16. Лічильник слів
1. Початковий рівень. Створити консольну Kotlin-програму «Лічильник слів»: паралельна обробка текстових файлів. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Лічильник слів»: паралельна обробка текстових файлів. Прочитати два набори текстових рядків як умовні файли і кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Лічильник слів»: паралельна обробка текстових файлів. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 17. Гонка равликів
1. Початковий рівень. Створити консольну Kotlin-програму «Гонка равликів»: симуляція з випадковими затримками. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Гонка равликів»: симуляція з випадковими затримками. Прочитати для двох равликів імена й базові швидкості, seed випадкових затримок і кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Гонка равликів»: симуляція з випадковими затримками. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 18. Продаж квитків
1. Початковий рівень. Створити консольну Kotlin-програму «Продаж квитків»: конкурентні бронювання та захист стану. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Продаж квитків»: конкурентні бронювання та захист стану. Прочитати кількість місць, для двох кас списки запитів на бронювання та кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Продаж квитків»: конкурентні бронювання та захист стану. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 19. Моніторинг серверів
1. Початковий рівень. Створити консольну Kotlin-програму «Моніторинг серверів»: періодичні перевірки у supervisorScope. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Моніторинг серверів»: періодичні перевірки у supervisorScope. Прочитати для двох груп списки умовних серверів із часом відповіді та кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Моніторинг серверів»: періодичні перевірки у supervisorScope. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 20. Фітнес-браслет
1. Початковий рівень. Створити консольну Kotlin-програму «Фітнес-браслет»: потік пульсу, conflate, попередження. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Фітнес-браслет»: потік пульсу, conflate, попередження. Прочитати для двох браслетів послідовності значень пульсу й поріг попередження та кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Фітнес-браслет»: потік пульсу, conflate, попередження. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 21. Автодоповнення
1. Початковий рівень. Створити консольну Kotlin-програму «Автодоповнення»: debounce і скасування застарілих запитів. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Автодоповнення»: debounce і скасування застарілих запитів. Прочитати словник слів для підказок, для двох користувачів послідовності введених префіксів і кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Автодоповнення»: debounce і скасування застарілих запитів. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 22. Виробнича лінія
1. Початковий рівень. Створити консольну Kotlin-програму «Виробнича лінія»: конвеєр етапів через Channel. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Виробнича лінія»: конвеєр етапів через Channel. Прочитати для двох ліній списки виробів із тривалістю етапів і кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Виробнича лінія»: конвеєр етапів через Channel. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 23. Онлайн-аукціон
1. Початковий рівень. Створити консольну Kotlin-програму «Онлайн-аукціон»: ставки учасників і StateFlow лідера. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Онлайн-аукціон»: ставки учасників і StateFlow лідера. Прочитати початкову ціну лота, для двох учасників списки ставок і кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Онлайн-аукціон»: ставки учасників і StateFlow лідера. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 24. Мережа метеостанцій
1. Початковий рівень. Створити консольну Kotlin-програму «Мережа метеостанцій»: combine потоків кількох станцій. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Мережа метеостанцій»: combine потоків кількох станцій. Прочитати для двох метеостанцій послідовності показань (температура й вологість) і кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Мережа метеостанцій»: combine потоків кількох станцій. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 25. Надійне завантаження
1. Початковий рівень. Створити консольну Kotlin-програму «Надійне завантаження»: retry з експоненційною затримкою. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Надійне завантаження»: retry з експоненційною затримкою. Прочитати для двох джерел списки умовних файлів із кількістю невдалих спроб до успіху та кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Надійне завантаження»: retry з експоненційною затримкою. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 26. Відвідувачі музею
1. Початковий рівень. Створити консольну Kotlin-програму «Відвідувачі музею»: входи й виходи, StateFlow заповненості. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Відвідувачі музею»: входи й виходи, StateFlow заповненості. Прочитати місткість музею, для двох входів послідовності входів і виходів відвідувачів та кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Відвідувачі музею»: входи й виходи, StateFlow заповненості. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 27. Розумна теплиця
1. Початковий рівень. Створити консольну Kotlin-програму «Розумна теплиця»: датчики, правила поливу, Flow. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Розумна теплиця»: датчики, правила поливу, Flow. Прочитати для двох датчиків показання вологості ґрунту, поріг поливу й кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Розумна теплиця»: датчики, правила поливу, Flow. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 28. Число π Монте-Карло
1. Початковий рівень. Створити консольну Kotlin-програму «Число π Монте-Карло»: паралельні async, порівняння часу. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Число π Монте-Карло»: паралельні async, порівняння часу. Прочитати для двох обчислювачів кількість випадкових точок і seed та кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Число π Монте-Карло»: паралельні async, порівняння часу. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 29. Електронна черга ЦНАП
1. Початковий рівень. Створити консольну Kotlin-програму «Електронна черга ЦНАП»: талони й вікна-оператори. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Електронна черга ЦНАП»: талони й вікна-оператори. Прочитати для двох вікон списки талонів (номер і тривалість обслуговування) і кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Електронна черга ЦНАП»: талони й вікна-оператори. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Варіант 30. Нагадування
1. Початковий рівень. Створити консольну Kotlin-програму «Нагадування»: планувальник подій зі скасуванням. Користувач вводить кількість подій від 1 до 100 і затримку від 1 до 1000 мс. Сформувати підписані події з послідовними номерами у suspend-функції, вивести результат кожної та кількість завершених; відхилити неправильні числа.
2. Базовий рівень. Створити консольну Kotlin-програму «Нагадування»: планувальник подій зі скасуванням. Прочитати для двох джерел списки нагадувань (текст і затримка) і кількість кроків моделювання. Запустити два виробники у структурованій області, збирати результати у Flow та вивести окремі підсумки джерел. Передбачити тайм-аут, скасування дітей і перевірку порожнього набору; жоден результат не має губитися через гонитву.
3. Високий рівень. Створити самостійну Kotlin-програму «Нагадування»: планувальник подій зі скасуванням. Приймати --sources=name:steps,..., --workers, --timeout-ms та --help, без аргументів запитувати дані з клавіатури. Обмежити одночасну роботу, захистити спільний стан, скасувати всі дочірні задачі після тайм-ауту. Вивести вирівняну таблицю джерел, завершених і скасованих кроків та підсумки; помилки до stderr, коди 0/2/1 для успіху, введення й збою. Додати тести runTest для успіху, скасування та помилки одного джерела, зафіксувати політику супервізії.
Порядок виконання та захисту роботи
- Пояснити, де задача очікує, а де виконує обчислення.
- Визначити власника корутин, межу скасування й політику помилок.
- Реалізувати предметні функції окремо від читання та виведення.
- Перевірити успіх, неправильні дані, тайм-аут і скасування.
- Для спільного стану перевірити інваріант після конкурентних дій.
- Продемонструвати тести та пояснити реальний і віртуальний час.