FizzBuzz, short code #3

仕事やゲームの合間に、ちょっとshort coding。

step 6: "if"の代わりに"&&"

ここにいくつかRubyのshort codingに関するtipsが載っている。
この中にあった次の1文が面白い。

? : operator as well as using i==0&&j+=7 instead of j+=7 if i==0

三項演算子を使うべし、という説明なのだけど、その後半も結構使える感じで、if文でチェックすると、ifの後ろに空白が一つできるけど、&&なら空白は必要ない、ということなのだ。
昨日トライしたコードの最後のやつでも適用できて、次のような感じになる。

# 元のコード.
1.upto(100){|i|s=i%3==0?'Fizz':'';s+='Buzz'if i%5==0;puts s==''?i:s}
# &&に置き換えて1byte削減!
1.upto(100){|i|s=i%3==0?'Fizz':'';i%5==0&&s+='Buzz';puts s==''?i:s}

そんな感じでコードを見渡してたら、三項演算子を使えそうに見えてきたので、ちょっと考えたらさらに短く出来ました!

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

これで65byte、23位まで上昇!
anarchy golf - FizzBuzz

参考になりそう

このあたりのリファレンスもshort codingに参考になりそうなので、URLをメモしておく。