そして
ASP.NET MVC 病患者Matrix 病併発
終わるまでが、無駄に長い。
おしまい
当たり前と言えば、当たり前だけど、件数が多くなると、System.Console.WriteLine のコストがそれなりになるので- 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 FizzBuzz4
- {
- static string GetFizzBuzz(int start, int end)
- {
- return GetFizzBuzz("\n", start, end);
- }
- static string GetFizzBuzz(string separator, int start, int end)
- {
- return String.Join(separator, CreateFizzBuzz(start, end).ToArray());
- }
- static IEnumerable<string> CreateFizzBuzz(int start, int end)
- {
- int count = end - start + 1;
- return from i in Enumerable.Range(start, count)
- let s = i.ToFizzBuzz()
- select s;
- }
- public static void Main(string[] args)
- {
- //GetFizzBuzz(1, 100).ToConsole();
- GetFizzBuzz(1, 1000000).ToConsole();
- }
- }
- }
拡張メソッド病患者バージョンだと、30 秒くらいかかることもあったので、それなりに短縮。
今時の CPU を入手したら、並列化(PLinq?)を試してみるのも一興か。
ということで、おしまい。
1 件のコメント:
以下の修正を行いました。
11行目
Before:
return (i % 15 == 0) ? "FizzBuzz" : (i % 5 == 0) ? "Buzz" : (i % 3 == 0) ? "Fizz" : i.ToString();
After:
return (i % 3 == 0) ? ((i % 5 == 0) ? "FizzBuzz" : "Fizz") : (i % 5 == 0) ? "Buzz" : i.ToString();
コメントを投稿