123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- package kata
- func Primes(limit int) []int {
-
- gen := func(ch chan<- int, limit int) {
- for i := 2; i <= limit; i++ {
- ch <- i
- }
- close(ch)
- }
-
-
-
-
- filter := func(in <-chan int, out chan<- int, prime int) {
- for {
- candidate, ok := <-in
-
- if !ok {
- break
- }
- if candidate%prime != 0 {
- out <- candidate
- }
- }
- close(out)
- }
- genChan := make(chan int)
- go gen(genChan, limit)
- var primes []int
- for i := 0; ; i++ {
- prime, ok := <-genChan
- if !ok {
- break
- }
- primes = append(primes, prime)
- filterChan := make(chan int)
- go filter(genChan, filterChan, prime)
- genChan = filterChan
- }
- return primes
- }
|