Контест Junior Каналы и select обновлено

Pipeline из трёх стадий на каналах

Условие

Постройте конвейер из трёх стадий, соединённых каналами, каждая стадия в своей горутине:

  1. генератор отправляет числа из ввода;
  2. фильтр пропускает только числа, не делящиеся на m;
  3. стадия возводит число в квадрат и прибавляет к накопленной сумме, отправляя дальше текущую сумму.

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.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.