先日、あるところでFizzBuzz問題なるものを出題されました。
FizzBuzz問題とは、
1から100までの数をプリントするプログラムを書け。
ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とし、
3と5両方の倍数の場合には「FizzBuzz」とプリントすること。
というもの。
管理人、ちょっと焦って~10分もかけてコードを書いたような気がしますが、
その時に書いたコードがこちら
for ($i=1; $i<=100; $i++) { $fizzFlag = false; $buzzFlag = false; $fizzbuzzFlag = false; if (($i % 3) == 0) { $fizzFlag = true; } if (($i % 5) == 0) { if ($fizzFlag == true) { $fizzbuzzFlag = true; } else { $buzzFlag = true; } } if ($fizzbuzzFlag == true) { echo 'FizzBuzz'; } else if ($fizzFlag == true) { echo 'Fizz'; } else if ($buzzFlag == true) { echo 'Buzz'; } else { echo $i; } }
まー結果は合っているのですが、あとから考えると
無駄な処理をいろいろと書いちゃってました。
まず、各変数なんて必要ないですよね。
そこで変数なしバージョンはこちら。
for ($i=1; $i<=100; $i++) { if (($i % 15) == 0) { echo 'FizzBuzz'; } else if (($i % 3) == 0) { echo 'Fizz'; } else if (($i % 5) == 0) { echo 'Buzz'; } else { echo $i; } }
コードが約半分になりました。
こういうちょっとした事でも無駄なコードになってしまっている。。
管理人、ちょっと反省です。
しかし上には上がいるものです。
もっとコードを短縮させたい方はこちらの先人の方の記事がおすすめです。