private int TraceJumpPath(OrbitObject start, OrbitObject target) { OrbitObject[] targetTree = GetTree(target); OrbitObject currObject = start; List <OrbitObject> fullPath = new List <OrbitObject>(); while (!targetTree.Contains(currObject)) { currObject = currObject.ParentObject; fullPath.Add(currObject); } bool intersectionFound = false; for (int i = targetTree.Length - 1; i >= 1; i--) { if (intersectionFound) { fullPath.Add(targetTree[i]); } else { if (targetTree[i] == currObject) { intersectionFound = true; } } } return(fullPath.Count - 1); }
public override string Solve(string input, bool part2) { //input = "COM)B\nB)C\nC)D\nD)E\nE)F\nB)G\nG)H\nD)I\nE)J\nJ)K\nK)L"; //input = "COM)B\nB)C\nC)D\nD)E\nE)F\nB)G\nG)H\nD)I\nE)J\nJ)K\nK)L\nK)YOU\nI)SAN"; string[] orbits = input.Split('\n'); orbitDetails = new List <OrbitInfo>(); totalObjects = new List <OrbitObject>(); foreach (string orbit in orbits) { string[] orbitDetail = orbit.Split(')'); orbitDetails.Add(new OrbitInfo() { From = orbitDetail[0], To = orbitDetail[1] }); } GetChildOrbitals(COM, 0); if (part2) { OrbitObject start = GetObjectByName("YOU"); OrbitObject end = GetObjectByName("SAN"); if (start == null || end == null) { throw new Exception("Start or Target not found!"); } return("Jumps:" + TraceJumpPath(start, end)); } else { return("Orbits: " + BuildChecksum()); } }
public SpaceObjChildrenItem(OrbitObject spaceObj) { InitializeComponent(); this.spaceObj = spaceObj; txtblockName.Text = spaceObj.Name; elSpaceObj.Fill = new ImageBrush(spaceObj.Texture); }
private static void FindWhoOrbitsThis(OrbitObject orbitObject, List <OrbitObject> orbits) { orbits.Where(o => o.Orbits == orbitObject.Name).ToList().ForEach(o => { if (orbitObject.Orbits != null) { o.InderectlyOrbits.Add(orbitObject.Orbits); } o.InderectlyOrbits.AddRange(orbitObject.InderectlyOrbits); FindWhoOrbitsThis(o, orbits); }); }
private OrbitObject[] GetTree(OrbitObject start) { List <OrbitObject> tree = new List <OrbitObject>(); OrbitObject currObject = start; while (currObject.ParentObject != null) { tree.Add(currObject); currObject = currObject.ParentObject; } tree.Add(currObject); return(tree.ToArray()); }
private void GetChildOrbitals(OrbitObject currObject, int indirectOrbits) { OrbitInfo[] orbits = FindOrbitingObjects(currObject.Name); List <OrbitObject> children = new List <OrbitObject>(); foreach (OrbitInfo orbit in orbits) { OrbitObject child = new OrbitObject(); child.Name = orbit.To; child.OrbitCount = indirectOrbits + 1; child.ParentObject = currObject; children.Add(child); totalObjects.Add(child); GetChildOrbitals(child, indirectOrbits + 1); } currObject.ChildObjects = children.ToArray(); }
private void InitOrbitObjProperties(OrbitObject orbitObj) { txtboxOrbit.Visibility = Visibility.Visible; txtboxOrbit.Text = orbitObj.Orbit.ToString(); txtboxPeriod.Text = orbitObj.period.ToString(); }