Universe.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System.Collections.ObjectModel;
  2. using Day10;
  3. namespace Day11;
  4. public class Universe
  5. {
  6. public IList<Galaxy> Galaxies { get; } = new List<Galaxy>();
  7. public void Add(Galaxy galaxy)
  8. {
  9. Galaxies.Add(galaxy);
  10. }
  11. public void Expand()
  12. {
  13. var xMap = new Dictionary<int, IList<Galaxy>>();
  14. var yMap = new Dictionary<int, IList<Galaxy>>();
  15. foreach (var g in Galaxies)
  16. {
  17. if (!xMap.ContainsKey(g.Position.X))
  18. {
  19. xMap.Add(g.Position.X, new List<Galaxy>());
  20. }
  21. xMap[g.Position.X].Add(g);
  22. if (!yMap.ContainsKey(g.Position.Y))
  23. {
  24. yMap.Add(g.Position.Y, new List<Galaxy>());
  25. }
  26. yMap[g.Position.Y].Add(g);
  27. }
  28. var xPrev = -1;
  29. var xExpand = 0;
  30. foreach (var x in xMap.Keys.Order())
  31. {
  32. xExpand += x - xPrev - 1;
  33. xPrev = x;
  34. foreach (var g in xMap[x])
  35. {
  36. var delta = new GridPoint(xExpand, 0);
  37. g.Move(delta);
  38. }
  39. }
  40. var yPrev = -1;
  41. var yExpand = 0;
  42. foreach (var y in yMap.Keys.Order())
  43. {
  44. yExpand += y - yPrev - 1;
  45. yPrev = y;
  46. foreach (var g in yMap[y])
  47. {
  48. var delta = new GridPoint(0, yExpand);
  49. g.Move(delta);
  50. }
  51. }
  52. }
  53. }