Example #1
0
        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}");
        }
Example #2
0
        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());
        }