Exemple #1
0
        public int GetOrbitsToIndirectOrbit(string name)
        {
            ObjectInSpace orbited = DirectlyOrbits;
            int           orbits  = 0;

            while (orbited != null && orbited.Name != name)
            {
                orbits++;
                orbited = orbited.DirectlyOrbits;
            }

            return(orbits);
        }
Exemple #2
0
        public List <ObjectInSpace> GetOrbitList()
        {
            List <ObjectInSpace> orbits  = new List <ObjectInSpace>();
            ObjectInSpace        orbited = DirectlyOrbits;

            while (orbited != null)
            {
                orbits.Add(orbited);
                orbited = orbited.DirectlyOrbits;
            }

            return(orbits);
        }
Exemple #3
0
        public static void GetIntersectPoint(ObjectInSpace a, ObjectInSpace b)
        {
            List <ObjectInSpace> aOrbits = a.GetOrbitList();
            List <ObjectInSpace> bOrbits = b.GetOrbitList();

            List <ObjectInSpace> intersect = aOrbits.Intersect(bOrbits).ToList();

            int aMin = Int32.MaxValue;
            int bMin = Int32.MaxValue;

            foreach (var objectInSpace in intersect)
            {
                aMin = Math.Min(a.GetOrbitsToIndirectOrbit(objectInSpace.Name), aMin);
                bMin = Math.Min(b.GetOrbitsToIndirectOrbit(objectInSpace.Name), bMin);
            }

            Console.WriteLine($"{aMin} + {bMin} = {aMin+bMin}");
        }
Exemple #4
0
        public static void Execute(string filename)
        {
            List <string>        input          = File.ReadAllLines(filename).ToList();
            List <ObjectInSpace> objectsInSpace = new List <ObjectInSpace>();

            foreach (string orbit in input)
            {
                string[] pair = orbit.Split(")");

                ObjectInSpace orbited = objectsInSpace.FirstOrDefault(o => o.Name == pair[0]);
                if (orbited == null)
                {
                    orbited = new ObjectInSpace(pair[0], null);
                    objectsInSpace.Add(orbited);
                }

                ObjectInSpace orbiter = objectsInSpace.FirstOrDefault(o => o.Name == pair[1]);

                if (orbiter == null)
                {
                    orbiter = new ObjectInSpace(pair[1], orbited);
                    objectsInSpace.Add(orbiter);
                }
                else
                {
                    orbiter.DirectlyOrbits = orbited;
                }

                orbited.AddOrbiter(orbiter);
            }

            int totalOrbits = 0;

            foreach (ObjectInSpace objectInSpace in objectsInSpace)
            {
                totalOrbits += objectInSpace.GetTotalOrbits();
            }

            Console.WriteLine($"Total Orbits: {totalOrbits}");

            GetIntersectPoint(objectsInSpace.First(o => o.Name == "YOU"), objectsInSpace.First(o => o.Name == "SAN"));
        }
Exemple #5
0
 public void AddOrbiter(ObjectInSpace orbiter)
 {
     Oribiters.Add(orbiter);
 }
Exemple #6
0
 public ObjectInSpace(string name, ObjectInSpace directlyOrbits)
 {
     Name           = name;
     Oribiters      = new List <ObjectInSpace>();
     DirectlyOrbits = directlyOrbits;
 }