| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- using System.Collections.ObjectModel;
- using Day10;
- namespace Day11;
- public class Universe
- {
- public IList<Galaxy> Galaxies { get; } = new List<Galaxy>();
- public void Add(Galaxy galaxy)
- {
- Galaxies.Add(galaxy);
- }
- public void Expand()
- {
- var xMap = new Dictionary<int, IList<Galaxy>>();
- var yMap = new Dictionary<int, IList<Galaxy>>();
- foreach (var g in Galaxies)
- {
- if (!xMap.ContainsKey(g.Position.X))
- {
- xMap.Add(g.Position.X, new List<Galaxy>());
- }
- xMap[g.Position.X].Add(g);
- if (!yMap.ContainsKey(g.Position.Y))
- {
- yMap.Add(g.Position.Y, new List<Galaxy>());
- }
- 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);
- }
- }
- }
- }
|