ホーム » ブログ » 面接でのFizz-Buzzテスト-PHPコード
このエントリーをはてなブックマークに追加
@2012/10/27

スポンサーリンク
【Fizz-Buzz】を適性テストでよくある質問です。FizzBuzzといえば、1から100までの数をプリントするプログラムを書けることです。3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントする。

ちゃんとしたPGの場合、3分以内で書き出せるとみられています。
しかし、面接の時、誰でも緊張している状態で、頭が真っ白になってしまって、時間をかかり過ぎことがよくあります。
【落とし穴】:数字15、または15の倍数をご注意してください。

さぁ、何も考えずに書いたコード:
 for($i=1;$i<=100;$i++){
    if($i%15 == 0)
        echo "FizzBuzz";
    else if ($i%5==0)
        echo "Buzz";
    else if($i%3 ==0)
        echo "Fizz";
    else
        echo $i;
    echo "\n";
}

とても理解しやすいですが、簡潔なコードじゃないですね。

他人書いたより簡潔な72byteのソースコードです。
<?for(;$i++<100;)echo($i%15?$i%3?$i%5?$i:'Buzz':'Fizz':'FizzBuzz')."\n";
三項演算子をよく使いましたね。しかし読みにくい。
インデントで見ると、下記のようなコードです。
 <?for(;$i++<100;)
    echo(
        $i%15?
              $i%3?
                   $i%5?$i
                       :'Buzz'
                  :'Fizz'
             :'FizzBuzz'
         )."\n"; 
すごいね!
さらに頑張ったら、FizzBuzzの無駄な部分見直して、"\n"の部分を直接LFを打てばの59byteのコード:
 <?for(;$i++<100;)echo$i%3?$i%5?$i:"":Fizz,$i%5?"":Buzz,"
"; 
上記のダブルクォートをシングルクォートにすると、下記のコード:
 <?for(;$i++<100;)echo$i%3?$i%5?$i:'':Fizz,$i%5?'':Buzz,'
'; 
上記のコード中で、FizzとBuzzをシングルクォートがありませんね。これはPHPで変数を宣言してない場合、そのまま出力しますから。PHPのバージョンによって、警告やエラーが発生する可能性がありますので、省略しないほうがいいと思う。
さぁ、最終の正しいコードです:63byteのコード
 <?for(;$i++<100;)echo$i%3?$i%5?$i:'':'Fizz',$i%5?'':'Buzz','
'; 

56byteのコードがありそうですが、誰かが教えてください。





♪ 当記事がお役に立ちましたらシェアして頂ければ嬉しいです。
0人
このエントリーをはてなブックマークに追加


★ 当記事を閲覧の方は下記の【関連記事】も閲覧していました。

お名前:

 

EMAIL:

 

URL:

 

認証コード:

zanmai.net-safecode

 


※会員の方は認証コードを要らないから、新規登録をオススメ!

check