この問題が解ければプログラマになれます!
2007年05月09日 プログラミングTIPS
どうしてプログラマに・・・プログラムが書けないのか?FizzBuzzの中で、「プログラミングの仕事への応募者200人中199人はコードがまったく書けないということで苦労している。」と書かれていました。
そういった類の開発者を見分けるための質問「Fizz-Buzz問題」があるそうで、それは以下の問題になります。
ということは逆に考えて、この問題が解けるようになれば、プログラマになる素質を持っているということになりますね!
そういった類の開発者を見分けるための質問「Fizz-Buzz問題」があるそうで、それは以下の問題になります。
1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。コンピュータサイエンス学科卒業生の過半数にはこの問題が解けず、自称上級プログラマが答えを書くのにも10-15分かかることがあるそうです。
ということは逆に考えて、この問題が解けるようになれば、プログラマになる素質を持っているということになりますね!
一応、自分でもPHPで解いてみました。(もし間違っていたら教えてください)
今回はこんな感じのプログラムにしてみました。<?php 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"; } ?>
問題文からすると、それぞれの倍数の時にそれぞれの文字を出力し、3と5両方の倍数の時は「Fizz」と「Buzz」をつなげるようにするのが良かったのかもしれません。
そこで、もう一つコードを書いてみました。
これでも同じ結果が得られます。<?php for($i=1;$i<=100;$i++){ $str = ""; if($i%3 == 0){ $str = "Fizz"; } if($i%5 == 0){ $str .= "Buzz"; } if($str == ""){ $str = $i; } echo $str."\n"; } ?>
どうせ100までしかないのだから、
こんな風にしてしまうのも手だとは思います。<?php echo "1\n2\nFizz\n4\nBuzz\nFizz\n7\n8\nFizz\nBuzz\n11\nFizz\n13\n14\nFizzBuzz\n16\n17\nFizz\n19\nBuzz\nFizz\n22\n23\nFizz\nBuzz\n26\nFizz\n28\n29\nFizzBuzz\n31\n32\nFizz\n34\nBuzz\nFizz\n37\n38\nFizz\nBuzz\n41\nFizz\n43\n44\nFizzBuzz\n46\n47\nFizz\n49\nBuzz\nFizz\n52\n53\nFizz\nBuzz\n56\nFizz\n58\n59\nFizzBuzz\n61\n62\nFizz\n64\nBuzz\nFizz\n67\n68\nFizz\nBuzz\n71\nFizz\n73\n74\nFizzBuzz\n76\n77\nFizz\n79\nBuzz\nFizz\n82\n83\nFizz\nBuzz\n86\nFizz\n88\n89\nFizzBuzz\n91\n92\nFizz\n94\nBuzz\nFizz\n97\n98\nFizz\nBuzz\n"; ?>
(このコードは手書きで書いたのではなく、上のプログラムを改良してこのコードを作りました。手書きが面倒だからプログラムを書くんですよね)
その他の言語の回答例などは、 にたくさん載っています。
とにかくコーディング量を少なくするためのテクニックが披露されたりもしていますが、見やすさ、メンテナンス性と引き替えになってしまっているものもあります。
答えは一つだけじゃないところが、プログラムの面白いところですね。
プログラマを目指している人は、ぜひこの問題に挑戦してみてください。