예제 #1
0
파일: Program.cs 프로젝트: xonium/AoC2019
        private static List <string> PathToRoot(OrbitChart inputChart)
        {
            var path  = new List <string>();
            var chart = inputChart;

            while (chart.Parent != null)
            {
                path.Add(chart.Parent.ToString());
                chart = chart.Parent;
            }

            return(path);
        }
예제 #2
0
파일: Program.cs 프로젝트: xonium/AoC2019
        private static void CountOrbits(OrbitChart orbitChart)
        {
            if (orbitChart.InOrbit == null)
            {
                Count += orbitChart.Depth;
                return;
            }
            foreach (var inOrbit in orbitChart.InOrbit)
            {
                CountOrbits(inOrbit);
            }

            Count += orbitChart.Depth;
        }
예제 #3
0
파일: Program.cs 프로젝트: xonium/AoC2019
 private static void FindSanta(OrbitChart orbitChart, string name)
 {
     if (orbitChart.PlanetName == name)
     {
         SanChart = orbitChart;
     }
     else
     {
         if (orbitChart.InOrbit != null)
         {
             foreach (var inOrbit in orbitChart.InOrbit)
             {
                 FindSanta(inOrbit, name);
             }
         }
     }
 }
예제 #4
0
파일: Program.cs 프로젝트: xonium/AoC2019
        private static OrbitChart FindOrbits(string PlanetToFind, List <string> orbits, int depth, OrbitChart parent = null)
        {
            var planetWithOrbits = orbits.Where(x => x.Contains(PlanetToFind + ")"));
            var orbitChart       = new OrbitChart
            {
                Depth = depth
            };

            Console.WriteLine($"depth: {depth}");

            foreach (var orbit in planetWithOrbits)
            {
                if (orbitChart.PlanetName == null)
                {
                    orbitChart = new OrbitChart(planetname: orbit.Split(')')[0])
                    {
                        Depth  = depth,
                        Parent = parent
                    };

                    var foundOrbits = FindOrbits(orbit.Split(')')[1], orbits, depth + 1, orbitChart);
                    if (foundOrbits.PlanetName != null)
                    {
                        orbitChart.InOrbit = new List <OrbitChart>
                        {
                            foundOrbits
                        };
                    }
                    else
                    {
                        var inOrbit = new OrbitChart(planetname: orbit.Split(')')[1])
                        {
                            Depth  = depth + 1,
                            Parent = orbitChart
                        };

                        orbitChart.InOrbit = new List <OrbitChart>
                        {
                            inOrbit
                        };
                    }
                }
                else
                {
                    var foundOrbits = FindOrbits(orbit.Split(')')[1], orbits, depth + 1, orbitChart);
                    if (foundOrbits.PlanetName != null)
                    {
                        orbitChart.InOrbit.Add(foundOrbits);
                    }
                    else
                    {
                        var inOrbit = new OrbitChart(planetname: orbit.Split(')')[1])
                        {
                            Depth  = depth + 1,
                            Parent = orbitChart
                        };
                        orbitChart.InOrbit.Add(inOrbit);
                    }
                }
            }

            return(orbitChart);
        }