Advertisement
Guest User

Untitled

a guest
Feb 26th, 2020
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.49 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace Delegates.Reports
  8. {
  9.     interface IReporter
  10.     {
  11.         string Caption { get; }
  12.         string BeginList();
  13.         string EndList();
  14.         string MakeCaption(string caption);
  15.         string MakeItem(string valueType, string entry);
  16.     }
  17.  
  18.  
  19.     static class Common
  20.     {
  21.         public static object MakeMeanAndStdStatistics(IEnumerable<double> data)
  22.         {
  23.             var newData = data.ToList();
  24.             var mean = newData.Average();
  25.             var std = Math.Sqrt(newData.Select(z => Math.Pow(z - mean, 2)).Sum() / (newData.Count - 1));
  26.             return new MeanAndStd { Mean = mean, Std = std };
  27.         }
  28.  
  29.         public static object MakeMedianStatistics(IEnumerable<double> data)
  30.         {
  31.             var list = data.OrderBy(z => z).ToList();
  32.             if (list.Count % 2 == 0)
  33.                 return (list[list.Count / 2] + list[list.Count / 2 - 1]) / 2;
  34.             return list[list.Count / 2];
  35.         }
  36.     }
  37.  
  38.     public class HtmlStatistics : IReporter
  39.     {
  40.         public HtmlStatistics(string caption) { Caption = caption; }
  41.         public string Caption { get; }
  42.         public string MakeCaption(string caption) => $"<h1>{caption}</h1>";
  43.         public string BeginList() => "<ul>";
  44.         public string EndList() => "</ul>";
  45.         public string MakeItem(string valueType, string entry) => $"<li><b>{valueType}</b>: {entry}";
  46.     }
  47.  
  48.     public class MarkdownStatistics : IReporter
  49.     {
  50.         public MarkdownStatistics(string caption) { Caption = caption; }
  51.         public string Caption { get; }
  52.         public string BeginList() => "";
  53.         public string EndList() => "";
  54.         public string MakeCaption(string caption) => $"## {caption}\n\n";
  55.         public string MakeItem(string valueType, string entry) => $" * **{valueType}**: {entry}\n\n";
  56.     }
  57.  
  58.     public static class ReportMakerHelper
  59.     {
  60.         private static string MakeReport(
  61.             IReporter reporter,
  62.             IEnumerable<Measurement> measurements,
  63.             Func<IEnumerable<double>, object> makeStatistics)
  64.         {
  65.             var data = measurements.ToList();
  66.             var result = new StringBuilder();
  67.             result.Append(reporter.MakeCaption(reporter.Caption));
  68.             result.Append(reporter.BeginList());
  69.             result.Append(reporter.MakeItem("Temperature", makeStatistics(data.Select(z => z.Temperature)).ToString()));
  70.             result.Append(reporter.MakeItem("Humidity", makeStatistics(data.Select(z => z.Humidity)).ToString()));
  71.             result.Append(reporter.EndList());
  72.             return result.ToString();
  73.         }
  74.  
  75.         public static string MeanAndStdHtmlReport(IEnumerable<Measurement> data) =>
  76.             MakeReport(new HtmlStatistics("Mean and Std"), data, Common.MakeMeanAndStdStatistics);
  77.  
  78.         public static string MedianMarkdownReport(IEnumerable<Measurement> data) =>
  79.             MakeReport(new MarkdownStatistics("Median"), data, Common.MakeMedianStatistics);
  80.  
  81.         public static string MeanAndStdMarkdownReport(IEnumerable<Measurement> measurements) =>
  82.             MakeReport(new MarkdownStatistics("Mean and Std"), measurements, Common.MakeMeanAndStdStatistics);
  83.  
  84.         public static string MedianHtmlReport(IEnumerable<Measurement> measurements)=>
  85.             MakeReport(new HtmlStatistics("Median"), measurements, Common.MakeMedianStatistics);
  86.     }
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement