Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2018
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.28 KB | None | 0 0
  1. static void Main(string[] args)
  2. {
  3.     Execute(5);
  4.     Execute(8);
  5.     Execute(10);
  6.     Execute(15);
  7. }
  8. static void Execute(int n)
  9. {
  10.     var dict =
  11.         File.ReadLines($@"x{n}.csv")
  12.             .Skip(1) // header
  13.             .Select(l => l.Split(','))
  14.             .ToDictionary(
  15.                 parts => new DateTime(year: int.Parse(parts[0].Trim('"')),
  16.                                         month: int.Parse(parts[1].Trim('"')),
  17.                                         day: 1),
  18.                 parts => int.Parse(parts[2].Trim('"')));
  19.  
  20.     int Get(DateTime dt) => dict.TryGetValue(dt, out int v) ? v : 0;
  21.  
  22.     var averagingKernel = new[] { 1, 3, 7, 3, 1 };
  23.     var averagingKernelDict = Enumerable.Range(0, averagingKernel.Length)
  24.         .ToDictionary(idx => idx - averagingKernel.Length, idx => averagingKernel[idx]);
  25.     var kernelTotalWeight = averagingKernel.Sum();
  26.  
  27.     double GetAve(DateTime dt) => averagingKernelDict.Select(kvp => kvp.Value * Get(dt.AddMonths(kvp.Key))).Sum() / (double)kernelTotalWeight;
  28.  
  29.     using (var outf = File.CreateText($@"y{n}.csv"))
  30.     {
  31.         outf.WriteLine($"Date\tAveraged {n}+ Users Count");
  32.         foreach (var key in dict.Keys.OrderBy(k => k))
  33.             outf.WriteLine($"{key.Year}-{key.Month}\t{GetAve(key)}");
  34.     }
  35. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement