Functional FizzBuzz
public class FizzBuzz { public static void Main(string[] args) { Console.WriteLine(FizzBuzzProgram(350)); } public static string FizzBuzzProgram(int n) => String.Join("\r\n", Enumerable.Range(1, n).Select(FizzBuzzPipeline)); static readonly Func<int, string?>[] handlers = [(n) => n % 3 == 0 ? "Три" : null, (n) => n % 5 == 0 ? "Пять" : null]; public static string FizzBuzzPipeline(int i) => Counter(i, String.Join("", handlers.Select(f => f(i)))); public static string FizzBuzzPipelinePar(int i) { var results = handlers.AsParallel().Select(handler => handler(i)).Where(r => r != null); return results.Any() ? string.Concat(results) : i.ToString(); } }
Насмотрелся тут Скотта Влашина https://youtu.be/ipceTuJlw-M?si=ndSDvv-RWj8L1Ejt
и сделал свой функциональный FizzBuzz с массивом делегатов преобразований числа в Fizz & Buzz.
Этот массив расширяемый - пишите хоть 100 проверок, множество других решений на такое не способно.
Можно делать любое вычисление вычислять. А из-за независимости мы можем запускать их параллельно (если бы вычисление хендлера занимало большое время).
Хотите попроще ценой потери части универсальности?
static string FizzBuzzPipelineWOHandlers(int n) { string result = $"{(n % 3 == 0 ? "Fizz" : "")}{(n % 5 == 0 ? "Buzz" : "")}{(n % 7 == 0 ? "Qux" : "")}"; return String.IsNullOrEmpty(result) ? n.ToString() : result; }
Ката закончил, поклон.
