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); }
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; }
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); } } } }
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); }