Go · 27 строк
Каждую минуту приходит пачка примерно из 10 тысяч событий. Прослушиванием считаем трек, который играл хотя бы 30 секунд: по этим числам платим правообладателям.
Раз в час CountPlays получает 60 пачек и считает их параллельно. Сервис собран на Go 1.22. Отметьте строки с ошибками.
В работе: Почасовая сводка прослушиваний для отчёта правообладателям.
Как проверяем
Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Плюс 2 вопроса про поведение программы — на зачёт не влияют. Ответ один на подход: после него показываем разбор.
Источник: наша задача на данных МТС Музыки: прослушивания за час. Условие пересказано своими словами.
Давали на собеседовании?
package playsimport "sync"type Play struct {TrackID stringSeconds int}// CountPlays считает прослушивания от 30 секунд по трекам.func CountPlays(batches [][]Play) map[string]int {counts := make(map[string]int)var wg sync.WaitGroupfor _, batch := range batches {go func() {wg.Add(1)defer wg.Done()for _, p := range batch {if p.Seconds >= 30 {counts[p.TrackID]++}}}()}wg.Wait()return counts}