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