From acbc22c498a5e58b810f6a3838fa85e597b7f4d9 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Fri, 26 Aug 2016 14:44:10 +0200 Subject: Solve sum of multiples --- go/sum-of-multiples/sum_of_multiples.go | 34 +++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 go/sum-of-multiples/sum_of_multiples.go (limited to 'go/sum-of-multiples/sum_of_multiples.go') diff --git a/go/sum-of-multiples/sum_of_multiples.go b/go/sum-of-multiples/sum_of_multiples.go new file mode 100644 index 0000000..c99cdd7 --- /dev/null +++ b/go/sum-of-multiples/sum_of_multiples.go @@ -0,0 +1,34 @@ +package summultiples + +import "sync" + +func MultipleSummer(n ...int) func(top int) int { + return func(top int) int { + c := make(chan int) + wg := sync.WaitGroup{} + // spawn worker + for _, v := range n { + wg.Add(1) + go func(m int) { + for i := m; i < top; i += m { + c <- i + } + wg.Done() + }(v) + } + go func() { + wg.Wait() + close(c) + }() + // collect, uniq and sum up values + var sum int + seen := make(map[int]bool) + for v := range c { + if !seen[v] { + seen[v] = true + sum += v + } + } + return sum + } +} -- cgit v1.2.3