maesblog

JavaScriptで「階乗計算」「FizzBuzz」問題を解く

転職に祭して応募先の会社でプログラミングのテストをしてきました。ネット上には有名な『どうしてプログラマに・・・プログラムが書けないのか? | Jeff Atwood / 青木靖 訳』という記事もあるほどです。最近DOMをいじることぐらいしかしていなかったので、若干苦戦しました…。復習がてら紹介します。

問題は2問。ある数字の階乗を求める関数を書く問題と、あの有名なFizzBuzzの問題でした。言語はJavaScriptで書きました。手っ取り早く試すにはFirefoxのスクラッチパッドにコピペして実行(Ctrl+R)してみてください。もしくはjsdo.itなどを使ってみてもよいと思います。

ある数字の階乗を求める関数

問題:数字nの階乗を求める関数を書きなさい。(例えば、数字の「5」であれば、階乗は5×4×3×2×1となり、120が表示される)/ 解答時間10分

ポイントは「繰り返し処理の部分をどう書くか」というところだったと思います。時間がないのと、紙に書くという慣れない環境のせいか、いまいちだったかなと思います。落ち着いて臨んだら、意外と簡単に書けました!解答は以下のようになりました。

(function factorial(n) {
  if (n < 1) { 
    alert("1以上の数字を入力してください");
    return;
  }
  for (var i = n - 1; i > 0; i--) {
    n = n * i;
  }
  alert(n);
}) (5); // 5を入力した場合

数字nの階乗を求める関数の実行結果(nが5の場合)

数字nの階乗を求める関数の処理結果(nが5の場合

FizzBuzzの問題

問題:1~100まで順に出力させる関数を書きなさい。ただし、3の倍数のときは「Fizz」、5の倍数のときは「Buzz」、3の倍数であり5の倍数のときは「FizzBuzz」と出力するようにしなさい。 / 解答時間10分

すごく有名な問題ですね!実際に解いてみたら、これは正直できなかったです…。まず倍数のチェックの仕方がわかりませんでした。仕方ないので、これは調べさせてもらいました。余りを求める演算子の「%」を使って、余りが「0」であれば、その数字の倍数とみなせるということがわかりました。

解答は以下の通りです。Firefoxであれば「ツール > Web開発 > Webコンソール」(Ctrl+Shift+k)で確認することができます。

(function fizzBuzz(n) {  
  var i, result;

  for (i = 1; i <= n; i++) {
    result = i;
    if (i % 3 === 0 && i % 5 !== 0) result = "Fizz";
    if (i % 5 === 0 && i % 3 !== 0) result = "Buzz";
    if (i % 3 === 0 && i % 5 === 0) result = "FizzBuzz";
    console.log(result);
  }
}) (100);

FizzBuzzの出力結果

FizzBuzzの出力結果

まとめ

私の今のレベルだとこれで精一杯ですが、世の中にはもっと簡潔に書く達人がたくさんいらっしゃいます。以下のブログではFizzBuzzの問題を大変短いコードで書くことに挑戦されています。すごいですね~。

Webのプログラミングだけでなく、こういった類のプログラミングも瞬時にできるようにしておきたいと思いました。

コメント

  • 必須

コメント