public int TransfersCount(string from, string to) { if (from.Equals(to)) { return(0); } var fromOrbit = GetOrbitByName(from); var toOrbit = GetOrbitByName(to); var fromOrbitCounters = new OrbitCounter(Orbits, Root, fromOrbit); var toOrbitCounters = new OrbitCounter(Orbits, Root, toOrbit); int?minTransfers = null; foreach (var aOrbit in fromOrbitCounters.ConnectedOrbits.Keys) { if (toOrbitCounters.ConnectedOrbits.ContainsKey(aOrbit)) { var transfers = fromOrbitCounters.ConnectedOrbits[from] - fromOrbitCounters.ConnectedOrbits[aOrbit] - 1 + toOrbitCounters.ConnectedOrbits[to] - toOrbitCounters.ConnectedOrbits[aOrbit] - 1; if (minTransfers == null || minTransfers > transfers) { minTransfers = transfers; } } } if (minTransfers.HasValue) { return(minTransfers.Value); } throw new Exception($"Can't tranfser from {from} to {to}"); }
private int TotalNumberOfOrbits(Orbit orbit) { var counter = new OrbitCounter(Orbits, Root, orbit); System.Diagnostics.Debug.WriteLine($"{orbit.Name}: {counter.Count}"); return(counter.Count); }
public int TotalNumberOfOrbits() { Console.WriteLine($"Total number of orbits: {Orbits.Values.Count}"); //return Orbits.Values.Sum(o => o.CountConnections); var count = 0; var list = new Dictionary <string, OrbitCounter>(); foreach (var orbit in Orbits.Values) { var orbitCounter = new OrbitCounter(Orbits, Root, orbit); Console.WriteLine($"{orbit.Name}: {orbitCounter.Count}"); list[orbit.Name] = orbitCounter; count += orbitCounter.Count; } return(count); //return Orbits.Values.Sum(orbit => TotalNumberOfOrbits(orbit)); }