FizzBuzz問題は、プログラミングの初学者からエキスパートまで、さまざまな技術面接でよく使われるクラシックな問題です。この問題は、1から100までの数を順番に出力するプログラムを書くというもので、ただし3で割り切れる場合は “Fizz”、5で割り切れる場合は “Buzz”、3と5で割り切れる場合は “FizzBuzz” と出力するというルールがあります。
ここでは、C#を使用してFizzBuzz問題を解くシンプルで洗練されたコードをChatGptに解いてもらったコードを3点紹介します。これらのコードは、冗長性を排除し、可読性を向上させるように設計されています。
例 1: 基本的な条件分岐
using System;
class Program
{
static void Main()
{
for (int i = 1; i <= 100; i++)
{
if (i % 3 == 0 && i % 5 == 0)
{
Console.WriteLine("FizzBuzz");
}
else if (i % 3 == 0)
{
Console.WriteLine("Fizz");
}
else if (i % 5 == 0)
{
Console.WriteLine("Buzz");
}
else
{
Console.WriteLine(i);
}
}
}
}
この基本的なアプローチは、FizzBuzzのルールに厳密に従っており、条件分岐を使用して各ケースを処理しています。
例 2: 簡潔な文字列補完を使用
using System;
class Program
{
static void Main()
{
for (int i = 1; i <= 100; i++)
{
string output = "";
if (i % 3 == 0) output += "Fizz";
if (i % 5 == 0) output += "Buzz";
Console.WriteLine(output == "" ? i.ToString() : output);
}
}
}
このコードは、output
という文字列変数を使用し、簡潔な文字列補完を使ってFizzBuzzの条件に基づいて出力します。
例 3: Linqを使用
using System;
using System.Linq;
class Program
{
static void Main()
{
var fizzBuzzList = Enumerable.Range(1, 100)
.Select(i => (i % 3 == 0, i % 5 == 0, i))
.Select(tuple => tuple switch
{
(true, true, _) => "FizzBuzz",
(true, false, _) => "Fizz",
(false, true, _) => "Buzz",
(_, _, var number) => number.ToString()
});
foreach (var result in fizzBuzzList)
{
Console.WriteLine(result);
}
}
}
このコードでは、Enumerable.Range
で1から100までの数値のシーケンスを生成し、Select
メソッドを使用してタプル (i % 3 == 0, i % 5 == 0, i)
を作成します。次に、Select
を再度使用してパターンマッチングを行い、結果を生成します。最後に、結果をforeach
ループで出力しています。
FizzBuzz問題のまとめ
FizzBuzz問題を解くことは単なるプログラムの練習に留まらず、コーディングスタイルや読みやすさを向上させる上での良い機会です。この記事のコード例を通じて、異なるアプローチで同じ問題に取り組む方法を学ぶことができます。プログラミングの基本的なスキルを向上させ、より効果的なコーディングを実現する手助けとなるでしょう。
ChatGptのコードはいいですね。AIによるコーディングはどこまで可能なのか気になりますし、他のAIでは、どのように解いてくれるのかも気になります。
その他
プラグイン:Highlighting Code Block
コメント