Контест Junior Каналы и select обновлено
Pipeline из трёх стадий на каналах
Условие
Постройте конвейер из трёх стадий, соединённых каналами, каждая стадия в своей горутине:
- генератор отправляет числа из ввода;
- фильтр пропускает только числа, не делящиеся на
m; - стадия возводит число в квадрат и прибавляет к накопленной сумме, отправляя дальше текущую сумму.
main читает из последнего канала и печатает каждое значение.
Ввод: n m (1 ≤ n ≤ 3000, 1 ≤ m ≤ 100), затем n целых чисел, |aᵢ| ≤ 10⁴.
Вывод: значения из последней стадии, по одному в строке. Если ничего не прошло фильтр, выведите empty.
Решение должно быть конкурентным (горутины), а вывод не должен зависеть от порядка их выполнения.
Пример
6 3
1 2 3 4 5 6
1
5
21
46
Как подойти
Три функции-стадии, каждая возвращает <-chan и закрывает его через defer close.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.