無駄にジェネレータを使ってみたFizzBuzz

ジェネレータの練習。FizzBuzz判定はFizzBuzz問題 - Engineer as a Lifestyle @tenkomaでの自分的なお気に入りをパクらせてもらいました。

def fizzbuzz_gen(max):
    for i in range(1, max + 1):
        yield "Fizz" * (i % 3 == 0) + "Buzz" * (i % 5 == 0) or i

for n in fizzbuzz_gen(100):
    print n

せっかくのジェネレータなんだから、こう書いたほうが意味があっていいかも、と思いました。

In [3]: g =  fizzbuzz_gen(100)

In [4]: g.next()
Out[4]: 1

In [5]: g.next()
Out[5]: 2

In [6]: g.next()
Out[6]: 'Fizz'

In [7]: g.next()
Out[7]: 4

In [8]: g.next()
Out[8]: 'Buzz'

In [9]: g.next()
Out[9]: 'Fizz'

In [10]: g.next()
Out[10]: 7

In [11]: g.next()
Out[11]: 8

In [12]: g.next()
Out[12]: 'Fizz'

追記ここまで。


あと、社内の偉い人がzsh版を書いてくれました。

paste <(repeat 34 (echo;echo;echo Fizz)) <(repeat 20 (echo;echo;echo;echo;echo Buzz)) | pr -tn | head -100

repeatで繰り返した結果をpasteでガッチャンコして、prで行番号をくっつけてます。
場合分けもしてないのが面白い。