2009年10月13日火曜日

FizzBuzz

このエントリーをはてなブックマークに追加
よし、オレも

ウィキペディア:Fizz Buzz

だいたいのお題は
「1」から「100」までの数を出力するプログラムを書け。ただし「3」の倍数のときは数の代わりに「Fizz」、「5」の倍数のときは「Buzz」と出力し、「3」と「5」両者の倍数のときには「FizzBuzz」と出力すること。
というもの。

上記を踏まえ、以下の設定で

拡張メソッド病患者編

using System;
using System.Collections.Generic;
using System.Linq;

namespace FizzBuzz
{
    static class ExtMethods
    {
        public static string ToFizzBuzz(this int i)
        {
            return (i % 3 == 0) ? ((i % 5 == 0) ? "FizzBuzz" : "Fizz") : (i % 5 == 0) ? "Buzz" : i.ToString();
        }

        public static void ToConsole(this string s)
        {
            Console.WriteLine(s);
        }
    }

    class FizzBuzz1
    {
        public static void Main(string[] args)
        {
            Enumerable.Range(1, 100).ToList().ForEach(i => i.ToFizzBuzz().ToConsole());
        }
    }
}

yeild 病患者編

using System;
using System.Collections.Generic;
using System.Linq;

namespace FizzBuzz
{
    class FizzBuzz2
    {
        static IEnumerable<string> CreateFizzBuzz(int start, int end)
        {
            int count = end - start + 1;
            foreach (int i in Enumerable.Range(start, count))
            {
                yield return (i % 3 == 0) ? ((i % 5 == 0) ? "FizzBuzz" : "Fizz") : (i % 5 == 0) ? "Buzz" : i.ToString();
            }
        }

        public static void Main(string[] args)
        {
            CreateFizzBuzz(1, 100).ToList().ForEach(s => Console.WriteLine(s));
        }
    }
}

let 病患者編

using System;
using System.Collections.Generic;
using System.Linq;

namespace FizzBuzz
{
    class FizzBuzz3
    {
        static IEnumerable<string> CreateFizzBuzz(int start, int end)
        {
            int count = end - start + 1;
            return from i in Enumerable.Range(start, count)
                    let s = (i % 3 == 0) ? ((i % 5 == 0) ? "FizzBuzz" : "Fizz") : (i % 5 == 0) ? "Buzz" : i.ToString()
                    select s;
        }

        public static void Main(string[] args)
        {
            CreateFizzBuzz(1, 100).ToList().ForEach(s => Console.WriteLine(s));
        }
    }
}

そして

構想中。てへ。
FizzBuzz 2 へ続く。

1 件のコメント:

sta.blockhead さんのコメント...

以下の修正を行いました。

各コード
Before:
(i % 15 == 0) ? "FizzBuzz" : (i % 5 == 0) ? "Buzz" : (i % 3 == 0) ? "Fizz" : i.ToString()

After:
(i % 3 == 0) ? ((i % 5 == 0) ? "FizzBuzz" : "Fizz") : (i % 5 == 0) ? "Buzz" : i.ToString()

コメントを投稿