示例#1
0
        public long CalculateStepsToPreviousState()
        {
            int xFase = CalculateFase(x: true);
            int yFase = CalculateFase(y: true);
            int zFase = CalculateFase(z: true);

            return(CommonMinimumMultiple(CommonMinimumMultiple(xFase, yFase), zFase));

            int CalculateFase(bool x = false, bool y = false, bool z = false)
            {
                List <UniverseState> exploredUniverseStates = new List <UniverseState> {
                    initalState
                };
                UniverseState newUniverseState;
                bool          exploredState;

                do
                {
                    if (x)
                    {
                        ApplyGravity(x: true);
                    }
                    if (y)
                    {
                        ApplyGravity(y: true);
                    }
                    if (z)
                    {
                        ApplyGravity(z: true);
                    }

                    ApplyVelocities();

                    newUniverseState = new UniverseState(moons);
                    exploredState    = exploredUniverseStates.Contains(newUniverseState);
                    exploredUniverseStates.Add(newUniverseState);
                }while (!exploredState);

                return(exploredUniverseStates.Count - 1);
            }
        }
示例#2
0
        public Day12Solver(string input)
        {
            moons = new List <Moon>();

            string separator = "\n";

            if (input.Contains("\r"))
            {
                separator = "\r\n";
            }
            foreach (string s in input.Split(separator))
            {
                string[] positions = s.Split(',');

                moons.Add(new Moon(
                              int.Parse(positions[0].Split('=')[1]),
                              int.Parse(positions[1].Split('=')[1]),
                              int.Parse(positions[2].Substring(0, positions[2].Length - 1).Split('=')[1])));
            }

            initalState = new UniverseState(moons);
        }