東京うぇ部

PHPをメインにしたプログラム情報共有サイト

Etc

PHPでFizzBuzz問題

先日、あるところで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;
	}
}

コードが約半分になりました。

こういうちょっとした事でも無駄なコードになってしまっている。。

管理人、ちょっと反省です。

しかし上には上がいるものです。

もっとコードを短縮させたい方はこちらの先人の方の記事がおすすめです。

コメントを残す




このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事