protected override string Solve2(IEnumerable <string> inputs) { var bodies = inputs.Select(x => new Body(x)).ToArray(); var simulation = new GravitySimulation(bodies); var existingStates = new HashSet <string>[] { new HashSet <string>(), new HashSet <string>(), new HashSet <string>() }; var duplicateStateStep = new int[] { 0, 0, 0 }; do { simulation.Step(); for (var currentAxis = 0; currentAxis < 3; currentAxis++) { if (duplicateStateStep[currentAxis] == 0) { if (!existingStates[currentAxis].Add(simulation.StateOfAxis(currentAxis))) { duplicateStateStep[currentAxis] = existingStates[currentAxis].Count(); } } } } while (duplicateStateStep.Any(x => x == 0)); var temp = LeastCommonMultiple(duplicateStateStep[0], duplicateStateStep[1]); var cycleLength = LeastCommonMultiple(temp, duplicateStateStep[2]); AssertExpectedResult("380635029877596", cycleLength.ToString()); return($"Cycles at {cycleLength}"); }
protected override string Solve(IEnumerable <string> inputs) { var bodies = inputs.Select(x => new Body(x)).ToArray(); var simulation = new GravitySimulation(bodies); var energies = new List <float>(1000); simulation.OnEachStep(sim => energies.Add(sim.Energy)); simulation.Step(1000); logger.LogInformation(simulation.Print()); AssertExpectedResult("12351", energies.Last().ToString()); return(energies.Last().ToString()); }