ページに戻る
-#start+ #start FizzBuzz #?anch -e -**** 内容が未設定のページです-ブラウザの「戻る」で前のページに戻ってください。-または[[編集|EDIT]]のリンクをクリックして内容を入力してください。+ package main + import "fmt" + + func natsGen() chan int { + ch := make(chan int); + go func() { + for i := 1; ; i++ { + ch <- i + } + }(); + return ch; + } + + func fizzGen() chan string { + ch := make(chan string); + go func() { + for { + ch <- ""; + ch <- ""; + ch <- "Fizz"; + } + }(); + return ch; + } + + func buzzGen() chan string { + ch := make(chan string); + go func() { + for { + ch <- ""; + ch <- ""; + ch <- ""; + ch <- ""; + ch <- "Buzz"; + } + }(); + return ch; + } + + func fizzBuzz() chan string { + out := make(chan string); + go func() { + nats := natsGen(); + fizz := fizzGen(); + buzz := buzzGen(); + for { + n := <- nats; + f := <- fizz; + b := <- buzz; + if f != "" || b != "" { + out <- f + b; + } + else { + out <- fmt.Sprintf("%d", n); + } + } + }(); + return out; + } + + func main() { + fizzbuzz := fizzBuzz(); + for i := 1 ; i <= 30 ; i++ { + fmt.Println(<-fizzbuzz); + } + } #end