public double GetPriceToPointAndBack(TargetPoint point, int k) { return(Math.Ceiling(GetTimeInSeconds(point, k) * 2 / 60d) * Zone.PricePerMinute); }
static void Main(string[] args) { var zones = new List <ParkingZone>(); var freeParkingSpaces = new List <ZonedParkingSpace>(); var zonesToReceive = int.Parse(Console.ReadLine()); for (var i = 0; i < zonesToReceive; i++) { var split = Console.ReadLine().Split(": ,".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); var color = split[0]; var x = int.Parse(split[1]); var y = int.Parse(split[2]); var width = int.Parse(split[3]); var height = int.Parse(split[4]); var price = double.Parse(split[5]); var zone = new ParkingZone(color, x, y, width, height, price); zones.Add(zone); } var splitSpaces = Console.ReadLine().Split(", ;".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); for (var i = 0; i < splitSpaces.Length; i += 2) { var x = int.Parse(splitSpaces[i]); var y = int.Parse(splitSpaces[i + 1]); var unzonedSpace = new ParkingSpace(x, y); foreach (var zone in zones) { if (zone.IsInside(unzonedSpace)) { // Console.WriteLine($"{unzonedSpace.X} {unzonedSpace.Y} is inside {zone.Color}"); freeParkingSpaces.Add(zone.GetParkingSpace(unzonedSpace)); } } } var pointSplit = Console.ReadLine().Split(", ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); var store = new TargetPoint(int.Parse(pointSplit[0]), int.Parse(pointSplit[1])); var k = int.Parse(Console.ReadLine()); var lowestPrice = double.MaxValue; ZonedParkingSpace lowestPriceSpace = null; foreach (var space in freeParkingSpaces) { var priceToStore = space.GetPriceToPointAndBack(store, k); // Console.WriteLine($"{space.X} {space.Y} zone: {space.Zone.Color} dist: {store.GetDistance(space)} price: {priceToStore}"); if (priceToStore < lowestPrice) { lowestPrice = priceToStore; lowestPriceSpace = space; } // ReSharper disable once CompareOfFloatsByEqualityOperator else if (lowestPrice == priceToStore && space.GetTimeInSeconds(store, k) < lowestPriceSpace.GetTimeInSeconds(store, k)) { lowestPrice = priceToStore; lowestPriceSpace = space; } } Console.WriteLine("Zone Type: {0}; X: {1}; Y: {2}; Price: {3:f2}", lowestPriceSpace.Zone.Color, lowestPriceSpace.X, lowestPriceSpace.Y, lowestPrice); // Main(args); }
public double GetTimeInSeconds(TargetPoint point, int k) { return(k * point.GetDistance(this)); }