Українська
Завдання
Відповідно до номера свого варіанта виконайте завдання обраного рівня складності.
Конкретні тестові дані, якщо вони не задані, оберіть і наведіть у звіті. Навчальні приклади не призначені для роботи з реальними обліковими даними або сторонніми файлами.
Варіанти
Варіант 1. Результати марафону
1. Початковий рівень. Створити консольну програму: для записів учасників марафону з номером, віком і часом у секундах відсортувати учасників за часом; за нічиєї за номером. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: для записів учасників марафону з номером, віком і часом у секундах відібрати вікову групу [18,30) та показати трьох найшвидших через filter/take. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: для записів учасників марафону з номером, віком і часом у секундах сформувати трійку призерів кожної десятирічної вікової групи, не змінюючи початкового порядку вхідних записів. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 2. Ціни акцій
1. Початковий рівень. Створити консольну програму: знайти мінімальну й максимальну навчальну ціну через minmax_element. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: обчислити ковзне середнє вікна 3; для менш ніж трьох цін результат порожній. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: знайти найкращу пару купівля-раніший день, продаж-пізніший день; якщо прибутку немає, повідомити це, а не обрати від’ємний. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 3. Замовлення магазину
1. Початковий рівень. Створити консольну програму: відібрати оплачені замовлення через copy_if. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: обчислити суму оплачених замовлень кожного клієнта; ціни у цілих копійках. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: побудувати рейтинг клієнтів за сумою оплачених замовлень, за нічиєї за ID, зберегти скасовані записи незмінними. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 4. Фітнес-дані
1. Початковий рівень. Створити консольну програму: знайти рекорд кількості кроків через max_element. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: для вектора щоденних кількостей кроків через chunk(7) обчислити тижневі суми, останній неповний тиждень позначити. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: за щоденними кроками знайти найдовшу послідовність днів із не менш ніж 8000 кроків, порівняти її з тижневими сумами. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 5. Датчики з викидами
1. Початковий рівень. Створити консольну програму: видалити від’ємні вимірювання через erase_if. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: у векторі вимірювань датчика замінити внутрішні елементи медіаною вікна 3 з оригінальних даних; крайні не змінювати. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: з вектора вимірювань датчика вилучити значення за межами [median-3,median+3], медіану обчислити з початкового набору; показати до/після та кількість вилучених. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 6. Зарплатна відомість
1. Початковий рівень. Створити консольну програму: записи відомості з іменем, відділом і навчальною сумою виплати відсортувати за спаданням суми із проєкцією до поля суми. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: для записів відомості з іменем, відділом і навчальною сумою виплати обчислити для кожного відділу середню й медіанну суму. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: для навчальних сум зарплатної відомості обчислити квартилі як медіани нижньої та верхньої половин відсортованих даних, за непарного n центральний елемент виключити; для n<2 квартилі не визначати. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 7. Прострочені книги
1. Початковий рівень. Створити консольну програму: відібрати записи, чий цілий день повернення менший за поточний навчальний день. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: для записів видачі книг з читачем, назвою та цілим днем повернення відібрати прострочені відносно поточного дня, обчислити умовну плату 2 одиниці за день прострочення й відсортувати боржників за сумою. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: для записів видачі книг з читачем, назвою та цілим днем повернення згрупувати прострочені книги за читачем, нарахувати умовну суму 2 одиниці за день і показати перші 3 записи; майбутні строки не дають від’ємної плати. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 8. Сторінки каталогу
1. Початковий рівень. Створити консольну програму: з вектора назв каталогу показати перші 3 записи через take. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: розділити каталог через chunk(3) й пронумерувати сторінки enumerate. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: спочатку відфільтрувати ASCII-назви за підрядком, тоді сформувати сторінки додатної заданої місткості; перевірити порожній пошук і коротку останню сторінку. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 9. Журнал подій
1. Початковий рівень. Створити консольну програму: через count_if порахувати записи рівня ERROR. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: розділити задані рядки формату hour|level|text через split, відхилити неправильну кількість полів. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: з коректних рядків hour|level|text отримати погодинні кількості ERROR і впорядкований звіт; перевірити годину 0..23 та порожній текст. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 10. Прості числа конвеєром
1. Початковий рівень. Створити консольну програму: через iota/filter отримати прості числа від 2 до 30. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: через обмежений iota(2,1000), filter і take отримати перші 20 простих. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: отримати прості до 1000 і проміжки між сусідніми; знайти найбільший проміжок та всі пари, що його утворюють. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 11. Колода карт
1. Початковий рівень. Створити консольну програму: створити колоду 4 масті×13 рангів та перемішати shuffle з фіксованим seed. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: створити колоду 4 масті×13 рангів, перемішати shuffle з фіксованим seed, роздати по 5 карт двом гравцям без повторів та відсортувати руки за рангом, потім мастю. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: створити колоду 4 масті×13 рангів, перемішати з фіксованим seed, роздати 4 руки по 5, перевірити унікальність усіх карт і обчислити частоти рангів у кожній; випадковість навчальна, seed записати. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 12. Вибори
1. Початковий рівень. Створити консольну програму: порахувати навчальні голоси через count для кожного кандидата. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: для навчальних бюлетенів з ідентифікатором кандидата або позначкою недійсного голосу обчислити відсотки дійсних голосів кожного кандидата, порожній набір обробити без ділення. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: для навчальних бюлетенів з ідентифікатором кандидата визначити лідера з часткою понад 50 %; інакше відібрати двох для умовного другого туру, нічию розв’язати за ідентифікатором. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 13. Тривалість плейлиста
1. Початковий рівень. Створити консольну програму: для треків плейлиста з назвою, жанром і тривалістю в секундах обчислити загальні секунди через transform і fold_left. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: для треків плейлиста з назвою й тривалістю в секундах через partial_sort вибрати 3 найдовші треки, за нічиєї за назвою. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: для треків плейлиста з назвою, жанром і тривалістю відфільтрувати за жанром, відсортувати за тривалістю й взяти найбільший початковий префікс, що вкладається у 600 секунд; не називати це загальною задачею рюкзака. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 14. Поповнення складу
1. Початковий рівень. Створити консольну програму: відібрати товари з кількістю нижче порогу. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: перетворити дефіцитні товари на замовлення поріг-мінус-залишок через transform. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: для товарів з назвою, постачальником, залишком, порогом і ціною в копійках сформувати замовлення поріг-мінус-залишок, згрупувати їх за постачальником і порахувати суму; товари без дефіциту виключити, перевірити рівність порогу. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 15. Поїздки таксі
1. Початковий рівень. Створити консольну програму: порахувати середній навчальний чек через accumulate. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: для навчальних поїздок таксі з годиною початку й чеком у копійках відібрати поїздки години 8..10 та визначити середній чек без порожнього ділення. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: для навчальних поїздок таксі з районом, тривалістю й чеком у копійках згрупувати поїздки за районами, ранжувати за виручкою й вивести середню тривалість; жодних мережевих даних. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 16. Споживання енергії
1. Початковий рівень. Створити консольну програму: перемножити рівні масиви обсягів і тарифів через zip. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: для масивів місячних обсягів споживання й тарифів перевірити рівність довжин до zip та обчислити загальну навчальну плату. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: поєднати місяць, обсяг і тариф, вивести місячні підсумки; відхилити від’ємні значення і різні довжини замість тихого обрізання. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 17. Нормалізація балів
1. Початковий рівень. Створити консольну програму: знайти min/max навчальних оцінок. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: перетворити оцінки до [0,100] формулою 100*(x-min)/(max-min); при max=min дати всім 100. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: для записів учнів з іменем і балом нормалізувати бали до [0,100] формулою 100*(x-min)/(max-min) (при max=min усім 100) й стабільно відсортувати за спаданням нормованого балу; зберегти порядок нічиїх і не змінювати початкову копію. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 18. Відгуки про товари
1. Початковий рівень. Створити консольну програму: через filter відібрати оцінки 1..5 і порахувати середню. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: для відгуків з ID товару й оцінкою 1..5 згрупувати відгуки за товаром і відсортувати товари за середньою оцінкою, за нічиєї за ID. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: для відгуків з ID товару, оцінкою 1..5 й ASCII-текстом виключити відгуки зі словами заданого стоп-списку, потім побудувати рейтинг товарів за середньою оцінкою; пояснити правила слів і не вважати це універсальною модерацією. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 19. Найближчі точки
1. Початковий рівень. Створити консольну програму: відсортувати точки за квадратом відстані до початку координат. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: через partial_sort отримати k найближчих до заданої точки; k обмежити розміром. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: для кількох запитів знайти k найближчих без зміни початкових даних; за однакової відстані сортувати за x, потім за y, обмежити координати для уникнення переповнення. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 20. Хештеги в дописах
1. Початковий рівень. Створити консольну програму: виділити ASCII-слова, що починаються з #, через split/filter. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: нормалізувати ASCII-регістр хештегів і побудувати частотний рейтинг. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: порахувати спільну появу пар різних хештегів у дописі, кожну пару один раз на допис; сортувати частоту спадно, пару лексикографічно. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 21. Рецепти за калоріями
1. Початковий рівень. Створити консольну програму: відібрати навчальні рецепти з енергетичною цінністю до 500. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: для навчальних рецептів з назвою, калоріями та списком інгредієнтів через partial_sort знайти 3 найменші за калоріями рецепти без заданого інгредієнта. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: для навчальних рецептів з назвою, калоріями, часом приготування та інгредієнтами відфільтрувати рецепти за множиною заборонених інгредієнтів, ранжувати за калоріями та часом; перевірити, що всі заборонені виключені. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 22. Рейси
1. Початковий рівень. Створити консольну програму: відсортувати задані навчальні рейси за ціною, потім часом. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: знайти прямі рейси між двома містами після заданої хвилини доби. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: знайти пари рейсів з однією пересадкою не менше 30 хв у межах однієї доби; сортувати за повною ціною, потім часом прибуття. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 23. Оцінки класу
1. Початковий рівень. Створити консольну програму: через zip поєднати однакові за довжиною імена й оцінки. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: для масивів імен учнів та їхніх оцінок перевірити однакову довжину і через zip та filter відібрати учнів із балом не менше 90. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: сформувати рейтинг імен та трьох оцінок із середнім через transform; перевірити всі довжини, сортувати середнє за спаданням, а ім’я за зростанням. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 24. Послідовності ДНК
1. Початковий рівень. Створити консольну програму: через count_if обчислити частку G/C у рядку ASCII A,C,G,T. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: через search знайти всі входження заданого непорожнього мотиву, включаючи перекриття. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: відхилити невалідні символи й знайти вікно заданої довжини з найбільшим GC-вмістом; усі нічиї вивести за початковими позиціями. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 25. Шифр перестановкою
1. Початковий рівень. Створити консольну програму: перебрати next_permutation для індексів 0, 1, 2 і надрукувати шість порядків. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: переставити блоки ASCII-тексту по 3 символи за заданим ключем, останній короткий блок залишити. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: перебрати всі 6 ключів блока 3 для навчального тексту, показати відновлення з оберненим ключем; зазначити, що це не сучасне шифрування. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 26. Погодні рекорди
1. Початковий рівень. Створити консольну програму: у ряді денних температур знайти перші два сусідні однакові значення через adjacent_find. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: знайти найдовшу серію днів із температурою понад 20; за нічиєї обрати ранішу. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: у ряді денних температур побудувати всі максимальні теплі серії (понад 20 градусів), для кожної початок, довжину й середнє; перевірити порожній набір і відсутність теплих днів. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 27. Поліноми у векторах
1. Початковий рівень. Створити консольну програму: додати вектори коефіцієнтів однакової довжини через transform. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: обчислити поліном через inner_product коефіцієнтів і степенів x, явно задати порядок від сталої. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: додати поліноми різної довжини з нульовим доповненням, обчислити суму в x=2 і порівняти із сумою окремих значень. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 28. Спортивні сезони
1. Початковий рівень. Створити консольну програму: через merge об’єднати два відсортовані списки результатів. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: знайти спільних учасників двох сезонів через set_intersection після сортування й unique. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: для списків учасників двох спортивних сезонів побудувати спільних, нових і тих, хто вибув, через алгоритми множин; входи містять повтори, які спочатку усунути. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 29. Власний контейнер
1. Початковий рівень. Створити консольну програму: створити обгортку array з begin/end і застосувати ranges::find. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: реалізувати forward-ітератор кільцевого буфера з логічним порядком після обертання. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: для кільцевого буфера реалізувати const-обхід і перевірити forward_range; застосувати filter/take, задокументувати недійсність після зміни структури. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Варіант 30. Бюджет родини
1. Початковий рівень. Створити консольну програму: через accumulate підсумувати навчальні транзакції у копійках. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
2. Базовий рівень. Створити консольну програму: для навчальних транзакцій з місяцем, категорією й сумою в копійках через filter відібрати заданий місяць і підсумувати категорії. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
3. Високий рівень. Створити консольну програму: для навчальних транзакцій з місяцем, категорією й сумою в копійках побудувати звіт місяця за категоріями з текстовою діаграмою: одна зірочка за повні 1000 копійок; від’ємні повернення показати окремо. Вхідні записи задати в коді; вивести результат і перевірку граничного випадку.
Порядок виконання роботи
- Зберіть приклади, порівняйте результати з наведеними.
- Створіть окрему програму для обраного рівня свого варіанта.
- Запишіть вимоги, допустимі дані й очікувані результати до реалізації.
- Перевірте звичайний, порожній і граничний випадки, які мають сенс для задачі.
- Збережіть код, команди збирання й результати перевірок у локальному Git.
Задокументуйте порядок операцій конвеєра, власника даних і потрібну категорію ітератора. Негативну перевірку недійсного ітератора виконуйте лише в окремому Debug-проєкті; вона не входить до правильної програми.
Вимоги до звіту
Подайте умову обраного завдання, рішення з поясненням інваріантів, команду збирання, версію MSVC, контрольні дані та справжнє виведення. Для очікуваних помилок відокремте негативний тест від робочої програми. Поясніть причину відмови й виправлення; самого знімка Error List недостатньо.