FizzBuzz書いてみよう

知り合いとFizzBuzz書いてみようという話になりました。

@仕様
1から順番に数をコマンドプロンプトに表示する。
その数が3で割り切れるなら"Fizz"
5で割り切れるなら"Buzz"
両方で割り切れるなら"FizzBuzz"と表示する。

@引数
[0]=終端の値

言語はいつもの通りC#

まずはProgram.csを記述します。

using System;
using Models;

namespace FizzBuzzTest
{
    static class Program
    {
        static void Main(string[] args)
        {
            //Todo:値判定
            var endvalue = int.Parse(args[0]);

            Console.WriteLine(FizzBuzz.Execute(endvalue));
        }
    }
}

本来は、引数の数値判定とかするべきなんですが、面倒なので今回は割愛します。

次に実際に出力値を組み立てるクラスを作成します。(FizzBuzz.cs)

using System.Text;

namespace Models
{
    public class FizzBuzz
    {
        /// <summary>
        /// 実行
        /// </summary>
        public static string Execute(int endValue)
        {
            var returnStrings = new StringBuilder();

            for (int i = 1; i <= endValue; i++)
			{
                returnStrings.AppendLine(GetPrintValue(GetFizz(i), GetBuzz(i), i));
			}

            return returnStrings.ToString();
        }

        /// <summary>
        /// 出力値取得
        /// </summary>
        private static string GetPrintValue(string fizz, string buzz,int target)
        {
            return ((fizz + buzz) == string.Empty) ? target.ToString() : (fizz + buzz);
        }

        /// <summary>
        /// Buzz
        /// </summary>
        private static string GetBuzz(int i)
        {
            return ((i % 5) == 0) ? "Buzz" : string.Empty;
        }

        /// <summary>
        /// Fizz
        /// </summary>
        private static string GetFizz(int i)
        {
            return ((i % 3) == 0) ? "Fizz" : string.Empty;
        }
    }
}

クラス分けとかしないで、なるべく短く書くのがクールだと思うのですが、ついついクラスを分けてしまいますね。