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); } }
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); }