2009年10月13日火曜日

FizzBuzz

よし、オレも

ウィキペディア:Fizz Buzz

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

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

拡張メソッド病患者編

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4.   
  5. namespace FizzBuzz  
  6. {  
  7.     static class ExtMethods  
  8.     {  
  9.         public static string ToFizzBuzz(this int i)  
  10.         {  
  11.             return (i % 3 == 0) ? ((i % 5 == 0) ? "FizzBuzz" : "Fizz") : (i % 5 == 0) ? "Buzz" : i.ToString();  
  12.         }  
  13.   
  14.         public static void ToConsole(this string s)  
  15.         {  
  16.             Console.WriteLine(s);  
  17.         }  
  18.     }  
  19.   
  20.     class FizzBuzz1  
  21.     {  
  22.         public static void Main(string[] args)  
  23.         {  
  24.             Enumerable.Range(1, 100).ToList().ForEach(i => i.ToFizzBuzz().ToConsole());  
  25.         }  
  26.     }  
  27. }  

yeild 病患者編

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4.   
  5. namespace FizzBuzz  
  6. {  
  7.     class FizzBuzz2  
  8.     {  
  9.         static IEnumerable<string> CreateFizzBuzz(int start, int end)  
  10.         {  
  11.             int count = end - start + 1;  
  12.             foreach (int i in Enumerable.Range(start, count))  
  13.             {  
  14.                 yield return (i % 3 == 0) ? ((i % 5 == 0) ? "FizzBuzz" : "Fizz") : (i % 5 == 0) ? "Buzz" : i.ToString();  
  15.             }  
  16.         }  
  17.   
  18.         public static void Main(string[] args)  
  19.         {  
  20.             CreateFizzBuzz(1, 100).ToList().ForEach(s => Console.WriteLine(s));  
  21.         }  
  22.     }  
  23. }  

let 病患者編

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4.   
  5. namespace FizzBuzz  
  6. {  
  7.     class FizzBuzz3  
  8.     {  
  9.         static IEnumerable<string> CreateFizzBuzz(int start, int end)  
  10.         {  
  11.             int count = end - start + 1;  
  12.             return from i in Enumerable.Range(start, count)  
  13.                     let s = (i % 3 == 0) ? ((i % 5 == 0) ? "FizzBuzz" : "Fizz") : (i % 5 == 0) ? "Buzz" : i.ToString()  
  14.                     select s;  
  15.         }  
  16.   
  17.         public static void Main(string[] args)  
  18.         {  
  19.             CreateFizzBuzz(1, 100).ToList().ForEach(s => Console.WriteLine(s));  
  20.         }  
  21.     }  
  22. }  

そして

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

1 件のコメント:

sta さんのコメント...

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

各コード
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()

コメントを投稿