Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 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());
     }
 }
Exemplo n.º 3
0
        public SpaceObjChildrenItem(OrbitObject spaceObj)
        {
            InitializeComponent();

            this.spaceObj     = spaceObj;
            txtblockName.Text = spaceObj.Name;
            elSpaceObj.Fill   = new ImageBrush(spaceObj.Texture);
        }
Exemplo n.º 4
0
 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);
     });
 }
Exemplo n.º 5
0
        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());
        }
Exemplo n.º 6
0
        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();
 }