FizzBuzz問題の解法 Javascript

Javascript

FizzBuzz問題は、プログラミングの初学者からエキスパートまで、さまざまな技術面接でよく使われるクラシックな問題です。この問題は、1から100までの数を順番に出力するプログラムを書くというもので、ただし3で割り切れる場合は “Fizz”、5で割り切れる場合は “Buzz”、3と5で割り切れる場合は “FizzBuzz” と出力するというルールがあります。

今回はJavascriptでChatGptに解いてもらいます。(他の言語:C#, Python

例1:基本的な条件分岐

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

このプログラムは、1から100までの数を順番に評価し、各数に対して条件を満たす場合には “Fizz”、”Buzz”、または “FizzBuzz” を出力し、それ以外の場合には数自体を出力します。このような形式でFizzBuzz問題を解くことが一般的です。

この方法はC#やPythonとほぼ同様です。

例2:簡潔な文字列補間を使用

for (let i = 1; i <= 100; i++) {
    const fizz = i % 3 === 0 ? 'Fizz' : '';
    const buzz = i % 5 === 0 ? 'Buzz' : '';

    console.log(`${fizz}${buzz}` || i);
}

このコードでは、テンプレート文字列内でFizzBuzzの条件を評価し、条件に応じて “Fizz”、”Buzz”、または “FizzBuzz” を生成します。最終的に、console.logを使用して結果を表示します。文字列補間を使用することで、コードがシンプルかつ可読性が向上します。

この方法もC#やPythonとほぼ同様です。

例3:テンプレート文字列と三項演算子を使用

const fizzBuzz = () => Array.from({ length: 100 }, (_, i) => `${i % 3 === 0 ? 'Fizz' : ''}${i % 5 === 0 ? 'Buzz' : ''}` || i + 1);

console.log(fizzBuzz().join('\n'));

このコードでは、Array.frommap、そしてテンプレート文字列と論理和演算子を使用してコードを簡潔にしています。

例4:C#のようにLinqっぽく解けるのか?

ChatGptに無茶振りにもこたえてくれました。

LINQはC#言語に固有の機能であり、JavaScript自体には直接的なサポートがありません。ただし、JavaScriptの配列や関数を活用して、LINQのような機能を模倣することは可能です。

const range = (start, end) => Array.from({ length: end - start + 1 }, (_, i) => start + i);

const fizzBuzz = (number) =>
    (number % 3 === 0 && number % 5 === 0) ? "FizzBuzz" :
    (number % 3 === 0) ? "Fizz" :
    (number % 5 === 0) ? "Buzz" :
    number.toString();

const fizzBuzzResults = range(1, 100).map(fizzBuzz);

console.log(fizzBuzzResults.join('\n'));

このコードでは、range関数で指定された範囲の数値を生成し、mapメソッドを使用して各数値にFizzBuzz関数を適用しています。これにより、1から100までのFizzBuzzの結果が得られます。最後に、join('\n')を使って改行で結果を表示しています。

無茶振りをした結果ですが、FizzBuzz問題としては高度な解き方な気がします。

その他

プラグイン:Highlighting Code Block

コメント