このブログを検索

2013/01/25

fizzbuzz



perlの経験もだいぶ増えたので、fizzbuzz問題くらいなら書けるだろうと思って書いてみた。


for($i=0; $i<=100; $i++){
if(($i % 15)==0){
print "Fizz Buzz\n";
}elsif(($i % 3)==0){
print "Fizz\n";
}elsif(($i % 5)==0){
print "Buzz\n";
}else{
print $i."\n";
}
}


なんどもエラーが出ては消しを繰り返したけど、これであってるよね?

もっとエレガントな方法はあるだろう。perlだったらワンライナーで書いてるのを見たことがある。

が、とりあえず最低限の要件は満たすものとして。

perlでは、forでインデックスを足してくループなどほとんど使わないので、

インデックスの初期値と終了条件と増分の順番がわからなくなったりする。

mod(%)はさっきちょっと使ったので書けたがさっきまではgoogleで検索しないと書けないくらいだった。

というか、%を使ったからfizzbuzzを思い出したのだ。







演算子の優先順位はよくわからないので、いつも念のためにカッコをつけているが、

この場合は $i % 5 == 0 とかでいいんだね。

カッコをいれるというのは打鍵もちょっと面倒だしわかってる人には邪魔かな。

でもこれでいいんだっけ?と不安になるくらいならカッコをつけといたほうがいいと思ってつけている。

でも、やっぱり % くらいはつけずに使うか。

たとえば以下のような場合は、


$a = 99;

print $a."\n";

if($a > 10 and $a < 50 or $a == 99){
print "baaa\n";
}


今までは必ず以下のように書いていた。


$a = 99;

print $a."\n";

if((($a > 10) and ($a < 50)) or ($a == 99)){
print "baaa\n";
}