Контест Senior sync и атомики обновлено

Шардированная мапа с мьютексом на шард

Условие

Реализуйте конкурентную мапу из 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, пул воркеров, вывод с сортировкой.

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

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