Пример #1
0
        public void Build(string[] orbits)
        {
            CenterOfMass = new OrbitingObject("COM", 0);
            CenterOfMass.OrbitingObjects.AddRange(GetOrbitingObjects(orbits, CenterOfMass.Name, 0));

            OrbitChecksum += CenterOfMass.OrbitingObjects.Sum(o => o.OrbitLevel);
        }
Пример #2
0
        private static OrbitingObject?FindOrbitingObject(OrbitingObject orbitingObject, string nameToFind)
        {
            OrbitingObject?result = null;

            if (orbitingObject.OrbitingObjects.Any(o => o.Name == nameToFind))
            {
                result = orbitingObject;
            }
            else if (orbitingObject.OrbitingObjects.Count > 0)
            {
                result = orbitingObject.OrbitingObjects.Select(oo => FindOrbitingObject(oo, nameToFind))
                         .SingleOrDefault(oo => oo != null);
            }

            return(result);
        }
Пример #3
0
        private IEnumerable <OrbitingObject> GetOrbitingObjects(string[] orbits, string name, int currentOrbitLevel)
        {
            var orbitingObjects = new List <OrbitingObject>();

            // Need to add the ')' or C and COM both match and an infinite loop occurs.
            foreach (var orbit in orbits.Where(o => o.StartsWith($"{name})")))
            {
                var orbitingObject = new OrbitingObject(orbit.Substring(orbit.IndexOf(')') + 1), currentOrbitLevel + 1);

                if (orbits.Any(o => o.StartsWith(orbitingObject.Name)))
                {
                    orbitingObject.OrbitingObjects.AddRange(
                        GetOrbitingObjects(orbits, orbitingObject.Name, currentOrbitLevel + 1));
                }

                orbitingObjects.Add(orbitingObject);
                OrbitChecksum += orbitingObject.OrbitingObjects.Sum(o => o.OrbitLevel);
            }

            return(orbitingObjects);
        }