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.from
とmap、
そしてテンプレート文字列と論理和演算子を使用してコードを簡潔にしています。
例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
コメント