Example #1
0
 public void AddParkingSpace(ParkingSpace parkingSpace)
 {
     if (this.BestParkingSpace == null ||
         parkingSpace.DistanceFromTarget < this.BestParkingSpace.DistanceFromTarget)
     {
         this.BestParkingSpace = parkingSpace;
     }
 }
Example #2
0
        public static void Main()
        {
            int         zonesCount = int.Parse(Console.ReadLine());
            List <Zone> zones      = new List <Zone>();

            for (int i = 0; i < zonesCount; i++)
            {
                string[] tokens     = Console.ReadLine().Split(':');
                string   name       = tokens[0];
                string[] parameters = tokens[1].Split(',');
                uint     x          = uint.Parse(parameters[0]);
                uint     y          = uint.Parse(parameters[1]);
                uint     width      = uint.Parse(parameters[2]);
                uint     height     = uint.Parse(parameters[3]);
                double   price      = double.Parse(parameters[4]);
                zones.Add(new Zone(name, x, y, width, height, price));
            }

            string[] parkSpaces = Console.ReadLine().Split(';');

            string[] targetTokens = Console.ReadLine().Split(',');
            uint     targetX      = uint.Parse(targetTokens[0]);
            uint     targetY      = uint.Parse(targetTokens[1]);

            uint timeConstant = uint.Parse(Console.ReadLine());

            for (int i = 0; i < parkSpaces.Length; i++)
            {
                string[]     tokens = parkSpaces[i].Split(',');
                uint         x      = uint.Parse(tokens[0]);
                uint         y      = uint.Parse(tokens[1]);
                ParkingSpace space  = new ParkingSpace(x, y, targetX, targetY);
                for (int j = 0; j < zones.Count; j++)
                {
                    if (x >= zones[j].MinX && x < zones[j].MaxX && y >= zones[j].MinY && y < zones[j].MaxY)
                    {
                        zones[j].AddParkingSpace(space);
                        break;
                    }
                }
            }

            ParkingSpace bestParkingSpace = null;
            decimal      totalPrice       = Decimal.MaxValue;
            uint         totalTime        = int.MaxValue;
            string       zoneName         = string.Empty;

            for (int i = 0; i < zones.Count; i++)
            {
                ParkingSpace currentBest = zones[i].BestParkingSpace;
                if (currentBest != null)
                {
                    uint    currentTime  = currentBest.DistanceFromTarget * 2 * timeConstant;
                    uint    timeInMins   = currentTime % 60 == 0 ? currentTime / 60 : currentTime / 60 + 1;
                    decimal currentPrice = timeInMins * (decimal)zones[i].PricePerMin;
                    if (currentPrice < totalPrice || (currentPrice == totalPrice && currentTime < totalTime))
                    {
                        totalTime        = currentTime;
                        totalPrice       = currentPrice;
                        bestParkingSpace = currentBest;
                        zoneName         = zones[i].Name;
                    }
                }
            }

            Console.WriteLine("Zone Type: {0}; X: {1}; Y: {2}; Price: {3:F2}", zoneName, bestParkingSpace.X, bestParkingSpace.Y, totalPrice);
        }