Шардированная мапа с мьютексом на шард
Условие
Реализуйте конкурентную мапу из s шардов, у каждого свой sync.Mutex. Ключ попадает в шард fnv1a32(key) mod s, где fnv1a32 это 32-битный FNV-1a по байтам UTF-8 ключа (hash/fnv.New32a). Операции add key delta (прибавить к значению ключа, изначально 0) выполняют w горутин параллельно.
Ввод: s m w (1 ≤ s ≤ 64, 1 ≤ m ≤ 2000, 1 ≤ w ≤ 32), затем m операций.
Вывод: первая строка: число ключей в каждом шарде через пробел; затем все ключи по возрастанию (побайтово) в формате key value.
Решение должно быть конкурентным (горутины), а вывод не должен зависеть от порядка их выполнения.
Пример
4 5 2
add a 1
add b 2
add a 3
add c -1
add b 0
1 1 1 0
a 4
b 2
c -1
Как подойти
Слайс шардов {mu, map}, номер шарда через hash/fnv, пул воркеров, вывод с сортировкой.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.