FizzBuzz, short code #2

昨日の続き。

step 4: upto

ちょっとイテレータ周りのことを調べていたら upto という繰り返しの構文を発見した。
http://www.namaraii.com/rubytips/?%C0%A9%B8%E6%B9%BD%C2%A4#l9
これでさらに2byte短くなって、73byte。

1.upto(100){|i|puts i%3==0?i%5==0?"FizzBuzz":"Fizz":i%5==0?"Buzz":i.to_s}

anarchy golf - FizzBuzz

順位は変わらず。
あと気になるところは、

  • i%5==0 の判定を2回やっているところ
  • i.to_s
  • 文字列の表示のところ

の3つ。

step 5: putsの引数

よく考えたら、i.to_s は必要ない、ということにようやく気づいて、修正して、68byte達成。

1.upto(100){|i|puts i%3==0?i%5==0?"FizzBuzz":"Fizz":i%5==0?"Buzz":i}

これで、30位にアップ!
anarchy golf - FizzBuzz

あと、他の方法も試してみたけど、これも68byte。

1.upto(100){|i|s=i%3==0?'Fizz':'';s+='Buzz'if i%5==0;puts s==''?i:s}

うーん、どっちの改良に未来があるんだろうか?