【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のコードがありそうですが、誰かが教えてください。
♪ 当記事がお役に立ちましたらシェアして頂ければ嬉しいです。
★ 当記事を閲覧の方は下記の【関連記事】も閲覧していました。
zanmai @2016年03月31日
» ①②③④の順で設定できるはず。…