FizzBuzz(ふぃずばず)問題とは
このゲームをコンピュータ画面に表示させるプログラムとして作成させることで、コードが書けないプログラマ志願者を見分ける手法をJeff AtwoodがFizzBuzz問題 (FizzBuzz Question) として提唱した。その提唱はインターネットの様々な場所で議論の対象になっている。
wikipedia参照
やってみよう
条件1 : 1~100の数字を表示する
条件2 : 3の倍数を「fizz」と表示
条件3 : 5の倍数を「buzz」と表示
条件4 : 3と5の公倍数を「fizzbuzz」と表示
条件5 : 言語種別は問わない
もし、正しく表示することができれば、
1,2,fizz,4,buzz,fizz,7,8,fizz,buzz,11,fizz,13,14,fizzbuzz,16,17....
というようになります。
筆者がやってみた
私が初めてfizzbuzz問題を解いてみた時の結果です。
言語はPHPで書いています。
※ 答えではありません。
<?php
// __ _ _
// / _(_)_______| |__ _ _ ________
// | |_| |_ /_ / '_ \| | | |_ /_ /
// | _| |/ / / /| |_) | |_| |/ / / /
// |_| |_/___/___|_.__/ \__,_/___/___|
//1~100の数字を表示する
echo "(1)";
$max = 100;
for( $i=1; $i<=$max; $i++ ){
echo $i;
$i==$max ?: print ",";
}
echo '<br>';
//3の倍数を「fizz」と表示
echo "(2)";
outputFizbuzz(3,'fizz');
echo '<br>';
//5の倍数を「buzz」と表示
echo "(3)";
outputFizbuzz(5,'buzz');
echo '<br>';
//3と5の倍数を「fizzbuzz」と表示
echo "(4)";
$ary = [3,5];
outputFizbuzz($ary,'fizzbuzz');
/**
* 1から順番に$maxで指定された数字までをカンマ区切りで出力します。
* 指定がなかった場合、デフォルトで100が使用されます。
* $numで指定された数字を剰余演算にて割り切れた場合に、$strが表示されます。
*
* @param int or int_array $num
* @param String $str
* @param int $max
*
* @return void
*/
function outputFizbuzz( $num , $str , $max=100 ){
if(is_array($num)){
for( $i=1; $i<=$max; $i++ ){
$fb = "";
for( $m=0; $m<count($num); $m++ ){
$i % $num[$m] != 0 ?: $fb = $str;
}
echo $fb == "" ? $i : $fb ;
$i==$max ?: print ",";
}
}else{
for( $i=1; $i<=$max; $i++ ){
echo $i % $num == 0 ? $str : $i ;
$i==$max ?: print ",";
}
}
}
?>
これを見て、何か違和感を感じた人。
ご名答です。笑
初めてやったときには、それぞれが条件だとは思わず、
それぞれが問題だと考え解いています。
問題さえしっかりと把握してれば、普通に解けたのに...。
答え
まだ問題を解いていないという人はこれ以降を見ないように注意してください。
<?php
for ($count = 1; $count <= 100; $count++){
if ($count % 3 == 0 && $count % 5 == 0){
echo 'fizzbuzz';
}
elseif ($count % 3 == 0){
echo 'fizz';
}
elseif ($count % 5 == 0){
echo 'buzz';
}
else{
echo $count;
}
echo '<br>';
}
?>
どうでしたか?
これぐらいは簡単に解けないと、プログラマ失格ですね。