Advertisement
Guest User

Untitled

a guest
Feb 26th, 2020
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.42 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