From 804014f9e58cbaacb41a06a59c899413f72e7b60 Mon Sep 17 00:00:00 2001 From: "exercism-solutions-syncer[bot]" <211797793+exercism-solutions-syncer[bot]@users.noreply.github.com> Date: Wed, 21 Jan 2026 20:30:20 +0000 Subject: [PATCH] [Sync Iteration] go/parallel-letter-frequency/1 --- .../1/parallel_letter_frequency.go | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 solutions/go/parallel-letter-frequency/1/parallel_letter_frequency.go diff --git a/solutions/go/parallel-letter-frequency/1/parallel_letter_frequency.go b/solutions/go/parallel-letter-frequency/1/parallel_letter_frequency.go new file mode 100644 index 0000000..bb0bac4 --- /dev/null +++ b/solutions/go/parallel-letter-frequency/1/parallel_letter_frequency.go @@ -0,0 +1,41 @@ +package letter + +import "sync" + +// FreqMap records the frequency of each rune in a given text. +type FreqMap map[rune]int + +// Frequency counts the frequency of each rune in a given text and returns this +// data as a FreqMap. +func Frequency(text string) FreqMap { + frequencies := FreqMap{} + for _, r := range text { + frequencies[r]++ + } + return frequencies +} + +// ConcurrentFrequency counts the frequency of each rune in the given strings, +// by making use of concurrency. +func ConcurrentFrequency(texts []string) FreqMap { + var wg sync.WaitGroup + var mu sync.Mutex + + m := make(FreqMap) + for _, line := range texts { + wg.Add(1) + go func(line string) { + defer wg.Done() + + for _, r := range line { + mu.Lock() + m[r]++ + mu.Unlock() + } + }(line) + } + + wg.Wait() + + return m +}