FizzBuzzってなんぞやと思ったら、世界のナベアツみたいなやつだった。
http://ja.wikipedia.org/wiki/Fizz_Buzz
3で割り切れたら Fizz で、5で割り切れたら Buzz で、どっちでも割れたら FizzBuzz なんだとさ。
出来るだけ短くプログラムを書くのが楽しいらしい。
業務プログラマがFizzBuzz書いたらどうなるか
https://gist.github.com/3292173
が面白かった。ガッチガチやぞっ!って感じ。
で、なんかとりあえず考えてみた。 Javascriptですけども。
var fizzbuzz = function(num){
if(typeof(num) !== "number"){return "not a number";}
if(num < 1){return "input 0 upper";}
return (!(num % 15) ? "fizzbuzz" : (!(num % 3) ? "fizz" : (!(num % 5) ? "buzz" : num)));
};
for(var i = 0;i < 31;++ i){
alert(fizzbuzz(i));
}
長ぇな。
最初の方の例外処理みたいなの無ければ
var fizzbuzz = function(num){
return (!(num % 15) ? "fizzbuzz" : (!(num % 3) ? "fizz" : (!(num % 5) ? "buzz" : num)));
};
だけでおっけーだけど、 なんか、メンテナンスし辛いよなこれでは。
var fizzbuzz = function(num){
if(typeof(num) !== "number"){return "not a number";}
if(num < 1){return "input 0 upper";}
var fizz = 3,buzz = 5;
return (!(num % (fizz * buzz)) ? "fizzbuzz" : (!(num % fizz) ? "fizz" : (!(num % buzz) ? "buzz" : num)));
};
これで fizz と buzz の条件が変わってもOKだよねっ!
いやいや、それだったら、
var fizzbuzz = function(num,fizz,buzz){
if(typeof(num) !== "number"){return "not a number";}
if(num < 1){return "input 0 upper";}
return (!(num % (fizz * buzz)) ? "fizzbuzz" : (!(num % fizz) ? "fizz" : (!(num % buzz) ? "buzz" : num)));
};
var fizz = 3,buzz = 5;
for(var i = 0;i < 31;++ i){
alert(fizzbuzz(i,fizz,buzz));
}
こっちのほうがいいよなぁ。うん。
FizzBuzzっていうゲームなんだから、ルールは関数の外で変わるんだから、こっちのほうが正しい。
グローバルが汚くても良いんなら、
i=0;while(i<31){alert(!(i%15)?"fizzbuzz":!(i%3)?"fizz":!(i%5)?"buzz":i);++i;}
こんな感じじゃね?使いまわせねーし読み辛いけど。78文字くらい。
もっと短くなるんだろうなぁ。凡人はこんなレベルです。
phpでFizzBuzz最短56Byte
http://d.hatena.ne.jp/milieu/20100204/1265305089
PHPだけど、こっちのが短い。
なるほど、割り切れたらベースじゃないほうが結果として短くなるのか。
i=0;while(i<31){alert(i%15?i%5?i%3?i:"fizz":"buzz":"fizzbuzz");++i;}
これで 69文字か。
0 件のコメント:
コメントを投稿