static void Main(string[] args) { string LON = Console.ReadLine(); string LAT = Console.ReadLine(); int N = int.Parse(Console.ReadLine()); Defib defibr = null; double lon = double.Parse(LON.Replace(",", ".")); double lat = double.Parse(LAT.Replace(",", ".")); for (int i = 0; i < N; i++) { string DEFIB = Console.ReadLine(); var def = new Defib(DEFIB); if (defibr == null) { defibr = def; } else { var dist = def.Distance(lon, lat); if (dist < defibr.Distance(lon, lat)) { defibr = def; } } } Console.WriteLine(defibr.Name); }
static void Main(string[] args) { string LON = Console.ReadLine().Replace(',', '.'); string LAT = Console.ReadLine().Replace(',', '.'); User user = new User(LON, LAT); int N = int.Parse(Console.ReadLine()); List <Defib> defibsList = new List <Defib>(); //list of Defib objects for (int i = 0; i < N; i++) { // add all defibs to list defibsList.Add(new Defib(Console.ReadLine())); } // find the closest defib object Defib closestDefib = user.findClosestDefib(defibsList); Console.WriteLine(closestDefib.name); }
public static void Simulate(int?maxIterations = null) { var current = new Location { Long = float.Parse(Console.ReadLine().Replace(',', '.')), Lat = float.Parse(Console.ReadLine().Replace(',', '.')) }; var defibCount = int.Parse(Console.ReadLine()); Defib closest = null; double?closestDistance = null; for (var i = 0; i < defibCount; i++) { var data = Console.ReadLine(); var parts = data.Split(';').Select(x => x.Trim()).ToList(); var defib = new Defib { Name = parts[1], Location = new Location { Long = float.Parse(parts[4].Replace(',', '.')), Lat = float.Parse(parts[5].Replace(',', '.')) } }; var x1 = (defib.Location.Long - current.Long) * Math.Cos((current.Lat - defib.Location.Lat) / 2); var y = defib.Location.Lat - current.Lat; var distance = Math.Sqrt(Math.Pow(x1, 2) + Math.Pow(y, 2)) * 6371; if (distance < closestDistance.GetValueOrDefault(double.MaxValue)) { closest = defib; closestDistance = distance; } } Console.WriteLine(closest.Name); }
static string FindClosestDefib(string lon, string lat, IEnumerable <Defib> defibs) { const double earthRadius = 6371; var longitude = Double.Parse(lon.Replace(',', '.')); var latitude = Double.Parse(lat.Replace(',', '.')); double shortestDistance = Double.MaxValue; Defib closestDefib = null; foreach (var d in defibs) { var x = (longitude - d.Longitude) * Math.Cos((d.Latitude + latitude) / 2); var y = latitude - d.Latitude; var dist = Math.Sqrt((x * x) + (y * y)) * earthRadius; if (dist < shortestDistance) { shortestDistance = dist; closestDefib = d; } } return(closestDefib.Name); }
static void Main(string[] args) { string lon = Console.ReadLine(); string lat = Console.ReadLine(); int n = int.Parse(Console.ReadLine()); var defibs = new Defib[n]; for (int i = 0; i < n; i++) { var defibDetails = Console.ReadLine().Split(';'); defibs[i] = new Defib { ID = Int32.Parse(defibDetails[0]), Name = defibDetails[1], Address = defibDetails[2], Phone = defibDetails[3], Longitude = Double.Parse(defibDetails[4].Replace(',', '.')), Latitude = Double.Parse(defibDetails[5].Replace(',', '.')) }; } Console.WriteLine(FindClosestDefib(lon, lat, defibs)); }