Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace Delegates.Reports
- {
- interface IReporter
- {
- string Caption { get; }
- string BeginList();
- string EndList();
- string MakeCaption(string caption);
- string MakeItem(string valueType, string entry);
- }
- static class Common
- {
- public static object MakeMeanAndStdStatistics(IEnumerable<double> data)
- {
- var newData = data.ToList();
- var mean = newData.Average();
- var std = Math.Sqrt(newData.Select(z => Math.Pow(z - mean, 2)).Sum() / (newData.Count - 1));
- return new MeanAndStd { Mean = mean, Std = std };
- }
- public static object MakeMedianStatistics(IEnumerable<double> data)
- {
- var list = data.OrderBy(z => z).ToList();
- if (list.Count % 2 == 0)
- return (list[list.Count / 2] + list[list.Count / 2 - 1]) / 2;
- return list[list.Count / 2];
- }
- }
- public class HtmlStatistics : IReporter
- {
- public HtmlStatistics(string caption) { Caption = caption; }
- public string Caption { get; }
- public string MakeCaption(string caption) => $"<h1>{caption}</h1>";
- public string BeginList() => "<ul>";
- public string EndList() => "</ul>";
- public string MakeItem(string valueType, string entry) => $"<li><b>{valueType}</b>: {entry}";
- }
- public class MarkdownStatistics : IReporter
- {
- public MarkdownStatistics(string caption) { Caption = caption; }
- public string Caption { get; }
- public string BeginList() => "";
- public string EndList() => "";
- public string MakeCaption(string caption) => $"## {caption}\n\n";
- public string MakeItem(string valueType, string entry) => $" * **{valueType}**: {entry}\n\n";
- }
- public static class ReportMakerHelper
- {
- private static string MakeReport(
- IReporter reporter,
- IEnumerable<Measurement> measurements,
- Func<IEnumerable<double>, object> makeStatistics)
- {
- var data = measurements.ToList();
- var result = new StringBuilder();
- result.Append(reporter.MakeCaption(reporter.Caption));
- result.Append(reporter.BeginList());
- result.Append(reporter.MakeItem("Temperature", makeStatistics(data.Select(z => z.Temperature)).ToString()));
- result.Append(reporter.MakeItem("Humidity", makeStatistics(data.Select(z => z.Humidity)).ToString()));
- result.Append(reporter.EndList());
- return result.ToString();
- }
- public static string MeanAndStdHtmlReport(IEnumerable<Measurement> data) =>
- MakeReport(new HtmlStatistics("Mean and Std"), data, Common.MakeMeanAndStdStatistics);
- public static string MedianMarkdownReport(IEnumerable<Measurement> data) =>
- MakeReport(new MarkdownStatistics("Median"), data, Common.MakeMedianStatistics);
- public static string MeanAndStdMarkdownReport(IEnumerable<Measurement> measurements) =>
- MakeReport(new MarkdownStatistics("Mean and Std"), measurements, Common.MakeMeanAndStdStatistics);
- public static string MedianHtmlReport(IEnumerable<Measurement> measurements)=>
- MakeReport(new HtmlStatistics("Median"), measurements, Common.MakeMedianStatistics);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement