using System.Collections.ObjectModel; using Day10; namespace Day11; public class Universe { public IList Galaxies { get; } = new List(); public void Add(Galaxy galaxy) { Galaxies.Add(galaxy); } public void Expand() { var xMap = new Dictionary>(); var yMap = new Dictionary>(); foreach (var g in Galaxies) { if (!xMap.ContainsKey(g.Position.X)) { xMap.Add(g.Position.X, new List()); } xMap[g.Position.X].Add(g); if (!yMap.ContainsKey(g.Position.Y)) { yMap.Add(g.Position.Y, new List()); } yMap[g.Position.Y].Add(g); } var xPrev = -1; var xExpand = 0; foreach (var x in xMap.Keys.Order()) { xExpand += x - xPrev - 1; xPrev = x; foreach (var g in xMap[x]) { var delta = new GridPoint(xExpand, 0); g.Move(delta); } } var yPrev = -1; var yExpand = 0; foreach (var y in yMap.Keys.Order()) { yExpand += y - yPrev - 1; yPrev = y; foreach (var g in yMap[y]) { var delta = new GridPoint(0, yExpand); g.Move(delta); } } } }