Задача: сумма в горутинах
Напишите функцию func parallelSum(nums []int, parts int, partSum func([]int) int) int. Она делит nums на parts частей из подряд идущих элементов, для каждой части один раз вызывает partSum в отдельной горутине и возвращает сумму всех результатов.
Функция partSum считает сумму одной части, но работает медленно: перед ответом она ждёт, как запрос к другому серверу. Поэтому все вызовы partSum должны идти одновременно, и тесты это проверяют. Дождитесь горутин с помощью sync.WaitGroup из урока 2 или соберите результаты через канал.
parallelSum([]int{1, 2, 3, 4}, 2, partSum)→10parallelSum([]int{1, 2, 3}, 5, partSum)→6parallelSum([]int{10, 20, 30, 40, 50, 60, 70, 80}, 4, partSum)→360, и четыре вызоваpartSumждут одновременно
Ограничения: parts не меньше 1 и может быть больше длины nums; длина nums не обязательно делится на parts; числа бывают отрицательными; для пустого nums результат — 0.
Часть номер p (от 0) — это nums[p*len(nums)/parts : (p+1)*len(nums)/parts]; при parts больше длины некоторые части пустые.
Проверка запускает тесты с детектором гонок: если горутины без синхронизации меняют общую переменную, например общую сумму, решение не пройдёт.
Не добавляйте лишних импортов, если в задаче это прямо не сказано.
Подпишись, чтобы пройти курс
Курс бесплатный. Войди через Telegram и подпишись на канал — откроются все уроки.