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

昨日とあるプログラミングのテストをしてきました。結果は…。ネット上には有名な『どうしてプログラマに・・・プログラムが書けないのか? | Jeff Atwood / 青木靖 訳』という記事もあるほどです。私はバリバリのプログラマではないですが、このままではあまりにも悔しいので、改めて解いてみることにしました。

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

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

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

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

var factorial = function (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」であれば、その数字の倍数とみなせるということがわかりました。

解答は以下のように書いてみました。「alert」で出力すると、100回「OK」ボタンを押す羽目になるので、「console.log」を使ってコンソールに出力するようにしました。Firefoxであれば「ツール > Web開発 > Webコンソール」(Ctrl+Shift+k)で確認することができます。

var fizzbuzz = function () {
    
    var n, i;

    for (n = 1; n <= 100; n++) {

        i = n;
        if (n % 3 === 0 && n % 5 !== 0) i = "Fizz";
        if (n % 5 === 0 && n % 3 !== 0) i = "Buzz";
        if (n % 3 === 0 && n % 5 === 0) i = "FizzBuzz";
        console.log(i);

  }

}();

FizzBuzzの出力結果

FizzBuzzの出力結果

私の今のレベルだとこれで精一杯ですが、世の中にはもっと簡潔に書く達人がたくさんいらっしゃいます。

以下のブログではFizzBuzzの問題を大変短いコードで書くことに挑戦されています。すごいですね~。

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

コメント一覧

  • 必須

コメント