public string Part1(string[] input) { var moons = ParseMoons(input); var simulator = new MoonSimulator(moons); simulator.Simulate(1000); return(simulator.TotalEnergy.ToString()); }
public string Part2(string[] input) { var moons = ParseMoons(input); var simulator = new MoonSimulator(moons); var ticks = 0L; var xCycles = 0L; var yCycles = 0L; var zCycles = 0L; var moonMappings = simulator.MoonsToOriginalMoons; while (true) { ticks++; simulator.Step(); if (moons.All(m => Moon.XComparer.Equals(m, moonMappings[m]) && xCycles == 0)) { xCycles = ticks; } if (moons.All(m => Moon.YComparer.Equals(m, moonMappings[m]) && yCycles == 0)) { yCycles = ticks; } if (moons.All(m => Moon.ZComparer.Equals(m, moonMappings[m]) && zCycles == 0)) { zCycles = ticks; } if (xCycles * yCycles * zCycles != 0) { var result = MathEx.LCM(new long[] { xCycles + 1, yCycles + 1, zCycles + 1 }); return(result.ToString()); } } }