// Column Methods public Elevator findElevator(int reqFloor, string reqDirection) { int bestScore = 999; Elevator bestElevator = this.elevators[0]; // Determine elevator position foreach (var elevator in this.elevators) { // If floors are the same if (elevator.currentFloor == reqFloor & reqDirection == elevator.currentDirection) { // elevator gets set as bestElevator by default since 999 is much higher than any score if (bestScore > 1) { bestElevator = elevator; bestScore = 1; } // If more than 2 elevators can service the request, determine which is closest else if (bestScore == 1) { int bestElevatorGap = Math.Abs(bestElevator.currentFloor - reqFloor); int newElevatorGap = Math.Abs(elevator.currentFloor - reqFloor); if (newElevatorGap < bestElevatorGap) { bestElevator = elevator; } } } // If elevator is above floor requesting elevator & going down else if (elevator.currentFloor > reqFloor & elevator.currentDirection == "down" & reqDirection == "up") { if (bestScore > 2) { bestElevator = elevator; bestScore = 2; } // If more than 2 elevators can service the request, determine which is closest else if (bestScore == 2) { int bestElevatorGap = Math.Abs(bestElevator.currentFloor - reqFloor); int newElevatorGap = Math.Abs(elevator.currentFloor - reqFloor); if (newElevatorGap < bestElevatorGap) { bestElevator = elevator; } } } // If elevator is above floor requesting elevator & going down else if (elevator.currentFloor > reqFloor & elevator.currentDirection == "down" & reqDirection == "down") { if (bestScore > 3) { bestElevator = elevator; bestScore = 3; } // If more than 2 elevators can service the request, determine which is closest else if (bestScore == 3) { int bestElevatorGap = Math.Abs(bestElevator.currentFloor - reqFloor); int newElevatorGap = Math.Abs(elevator.currentFloor - reqFloor); if (newElevatorGap < bestElevatorGap) { bestElevator = elevator; } } } // If elevator is above floor requested elevator & going up else if (elevator.currentFloor > reqFloor & elevator.currentDirection == "up" & reqDirection == "down") { if (bestScore > 4) { bestElevator = elevator; bestScore = 4; } // If more than 2 elevators can service the request, determine which is closest else if (bestScore == 4) { int bestElevatorGap = Math.Abs(bestElevator.currentFloor - reqFloor); int newElevatorGap = Math.Abs(elevator.currentFloor - reqFloor); if (newElevatorGap < bestElevatorGap) { bestElevator = elevator; } } } // If elevator is below floor requested & going up // If elevator is below floor requested elevator & going down else if (elevator.currentFloor < reqFloor & elevator.currentDirection == "up" & reqDirection == "up") { if (bestScore > 1) { bestElevator = elevator; bestScore = 1; } // If more than 2 elevators can service the request, determine which is closest else if (bestScore == 1) { int bestElevatorGap = Math.Abs(bestElevator.currentFloor - reqFloor); int newElevatorGap = Math.Abs(elevator.currentFloor - reqFloor); if (newElevatorGap < bestElevatorGap) { bestElevator = elevator; } } } } Console.WriteLine("___________________________________________________"); return(bestElevator); }
public static void Test2_requestFloor() { var battery2 = new Battery(3, 3, 3, 4); battery2.columnsList[0].elevatorsList[0].currentFloor = 2; battery2.columnsList[0].elevatorsList[0].direction = "up"; battery2.columnsList[0].elevatorsList[0].status = "moving"; battery2.columnsList[0].elevatorsList[0].queue.AddRange(new List <int>() { 2, 5 }); battery2.columnsList[0].elevatorsList[1].currentFloor = 3; battery2.columnsList[0].elevatorsList[1].direction = "down"; battery2.columnsList[0].elevatorsList[1].status = "moving"; battery2.columnsList[0].elevatorsList[1].queue.AddRange(new List <int>() { 3, 5, 8 }); battery2.columnsList[0].elevatorsList[2].currentFloor = 38; battery2.columnsList[0].elevatorsList[2].direction = "up"; battery2.columnsList[0].elevatorsList[2].status = "moving"; battery2.columnsList[0].elevatorsList[2].queue.AddRange(new List <int>() { -1, 3, 6 }); battery2.columnsList[0].elevatorsList[3].currentFloor = 38; battery2.columnsList[0].elevatorsList[3].direction = "up"; battery2.columnsList[0].elevatorsList[3].status = "moving"; battery2.columnsList[0].elevatorsList[3].queue.AddRange(new List <int>() { -1, 5, 8 }); battery2.columnsList[1].elevatorsList[0].currentFloor = 5; battery2.columnsList[1].elevatorsList[0].direction = null; battery2.columnsList[1].elevatorsList[0].status = "idle"; battery2.columnsList[1].elevatorsList[0].queue.AddRange(new List <int>() { }); battery2.columnsList[1].elevatorsList[1].currentFloor = 6; battery2.columnsList[1].elevatorsList[1].direction = "up"; battery2.columnsList[1].elevatorsList[1].status = "moving"; battery2.columnsList[1].elevatorsList[1].queue.AddRange(new List <int>() { 1, 2, 3, 4 }); battery2.columnsList[1].elevatorsList[2].currentFloor = 7; battery2.columnsList[1].elevatorsList[2].direction = "down"; battery2.columnsList[1].elevatorsList[2].status = "moving"; battery2.columnsList[1].elevatorsList[2].queue.AddRange(new List <int>() { -3, 2, 7, 8 }); battery2.columnsList[1].elevatorsList[3].currentFloor = 7; battery2.columnsList[1].elevatorsList[3].direction = "down"; battery2.columnsList[1].elevatorsList[3].status = "moving"; battery2.columnsList[1].elevatorsList[3].queue.AddRange(new List <int>() { -3, 2, 7, 8 }); battery2.columnsList[2].elevatorsList[0].currentFloor = 6; battery2.columnsList[2].elevatorsList[0].direction = "down"; battery2.columnsList[2].elevatorsList[0].status = "moving"; battery2.columnsList[2].elevatorsList[0].queue.AddRange(new List <int>() { 2, 4 }); battery2.columnsList[2].elevatorsList[1].currentFloor = 9; battery2.columnsList[2].elevatorsList[1].direction = null; battery2.columnsList[2].elevatorsList[1].status = "idle"; battery2.columnsList[2].elevatorsList[1].queue.AddRange(new List <int>() { }); battery2.columnsList[2].elevatorsList[2].currentFloor = 38; battery2.columnsList[2].elevatorsList[2].direction = "up"; battery2.columnsList[2].elevatorsList[2].status = "moving"; battery2.columnsList[2].elevatorsList[2].queue.AddRange(new List <int>() { 4, 6, 7 }); battery2.columnsList[1].elevatorsList[3].currentFloor = 7; battery2.columnsList[1].elevatorsList[3].direction = "down"; battery2.columnsList[1].elevatorsList[3].status = "moving"; battery2.columnsList[1].elevatorsList[3].queue.AddRange(new List <int>() { -3, 2, 7, 8 }); Elevator elevator = battery2.columnsList[1].elevatorsList[2]; battery2.requestFloor(elevator); }
//This method will determine the best elevator to be send for the current request (From Lobby to Basement or Floor) public void findBestElevatorLobby(int _requestedFloor, string _currentDirection, int _destinationFloor) { int distance = 0; int bestDistance = 99; for (int i = 0; i < elevatorList.Count; i++) { if (_currentDirection == "up" && _currentDirection == elevatorList[i].currentDirection && elevatorList[i].destinationFloor >= _destinationFloor) { distance = Math.Abs(elevatorList[i].currentFloor - _requestedFloor); if (distance < bestDistance) { bestDistance = distance; bestElevator = elevatorList[i]; } } else if (_currentDirection == "up" && _currentDirection == elevatorList[i].currentDirection && elevatorList[i].destinationFloor >= _destinationFloor) { distance = Math.Abs(elevatorList[i].currentFloor - _requestedFloor); if (distance < bestDistance) { bestDistance = distance; bestElevator = elevatorList[i]; } } if ((elevatorList[i].currentDirection == "up" || elevatorList[i].currentDirection == "idle") && elevatorList[i].currentFloor <= _requestedFloor) { distance = Math.Abs(elevatorList[i].currentFloor - _requestedFloor); if (distance < bestDistance) { bestDistance = distance; bestElevator = elevatorList[i]; } } else if ((elevatorList[i].currentDirection == "up" || elevatorList[i].currentDirection == "idle") && elevatorList[i].currentFloor <= _requestedFloor) { distance = Math.Abs(elevatorList[i].currentFloor - _requestedFloor); if (distance < bestDistance) { bestDistance = distance; bestElevator = elevatorList[i]; } } else if ((elevatorList[i].currentDirection == "down" || elevatorList[i].currentDirection == "idle") && elevatorList[i].currentFloor >= _requestedFloor) { distance = Math.Abs(elevatorList[i].currentFloor - _requestedFloor); if (distance < bestDistance) { bestDistance = distance; bestElevator = elevatorList[i]; } } else if (_requestedFloor == elevatorList[i].currentFloor && elevatorList[i].currentDirection == "idle") { bestElevator = elevatorList[i]; } } // This will add the requested floor (where the user is) and the destination floor (where the user wants to go) to the resquest list bestElevator.requestList.Add(_requestedFloor); bestElevator.requestList.Add(_destinationFloor); }
public void RequestFloor(Elevator elevator, int requestedFloor) { elevator.AddRequestedFloorToFloorList(requestedFloor); Console.WriteLine("Request For Floor Number " + requestedFloor); OperateElevator(elevator); }
public void AssignElevator(int RequestedFloor) { // Finding the proper column Column currentColumn = this.columnList[0]; foreach (var item in this.columnList) { // Console.WriteLine("current columnID {0} from floor {1} to floor {2}", item.ID, item.floorList[1], item.floorList.Last()); if (RequestedFloor >= item.floorList[1] && RequestedFloor <= item.floorList.Last()) { currentColumn = item; break; } } Console.WriteLine("the column ID for floor {0} is {1}", RequestedFloor, currentColumn.ID); int DistanceToGo = 1000; Elevator BestElevator = currentColumn.elevatorList[0]; string UserDirection; if (RequestedFloor > 1) { UserDirection = "UP"; } else { UserDirection = "DOWN"; } // Finding the best elevator based on comparing DistanceToGo foreach (Elevator elevator in currentColumn.elevatorList) { int currentDestination; if (elevator.Direction == "IDLE") { currentDestination = 0; } else { currentDestination = elevator.StopList.Last(); } Console.Write("111elID = {0}, elPos = {1}, elDir = {2}, current Destination = {3}", elevator.ID, elevator.Position, elevator.Direction, currentDestination); // Console.Write("elevatorID = {0}, Pos. = {1}, Dir. = {2}, current Destination = {3}", elevator.ID, elevator.Position, elevator.Direction, elevator.StopList.Last()); int distance = CalculateDistanceToGo(elevator, 1, UserDirection); Console.WriteLine(". distanceToGo: {0}", distance); // Console.WriteLine("elevator ID: {0} => DistanceToGo = {1}", elevator.ID, distance); if (distance <= DistanceToGo) { DistanceToGo = distance; BestElevator = elevator; } } Console.WriteLine("*** Take the column {0}, elevator {1} *** ", currentColumn.ID, BestElevator.ID); if (BestElevator.Position == 1) { // Console.WriteLine("%5ElevatorID: {0}", BestElevator.ID); UpdateList(BestElevator, BestElevator.StopList, RequestedFloor); } else { // Console.Write("%6ElevatorID: {0}", BestElevator.ID); UpdateList(BestElevator, BestElevator.BufferList, RequestedFloor); // Setting Buffer direction For Basements if (RequestedFloor > 1) { BestElevator.BufferDirection = "DOWN"; } // For other floors else { BestElevator.BufferDirection = "UP"; } } move(BestElevator); }
public void RequestElevator(int FloorNumber) { // Finding the proper column Column currentColumn = this.columnList[0]; foreach (var item in this.columnList) { if (FloorNumber >= item.floorList[1] && FloorNumber <= item.floorList.Last()) { currentColumn = item; break; } } // determining the USER Direction string Direction; if (FloorNumber < 1) { Direction = "UP"; } else { Direction = "DOWN"; } Console.WriteLine("Serving culomn: columnID {0} from floor {1} to floor {2}", currentColumn.ID, currentColumn.floorList[1], currentColumn.floorList.Last()); // finding the closest elevator Based on on comparing DistanceToGo AND the following Priority: // 1- the moving elevator which is arriving to the user // 2- the IDLE elevator // 3- other elevators int DistanceToGo = 1000; int distance; List <Elevator> FirstPriority = new List <Elevator>(); List <Elevator> SecondPriority = new List <Elevator>(); List <Elevator> ThirdPriority = new List <Elevator>(); Elevator BestElevator = currentColumn.elevatorList[0]; foreach (Elevator elev in currentColumn.elevatorList) { int currentDestination; if (elev.Direction == "IDLE") { currentDestination = 0; } else { currentDestination = elev.StopList.Last(); } Console.Write("111elID = {0}, elPos = {1}, elDir = {2}, current Destination = {3}", elev.ID, elev.Position, elev.Direction, currentDestination); distance = CalculateDistanceToGo(elev, FloorNumber, Direction); Console.WriteLine(". distanceToGo: {0}", distance); if (elev.Direction == Direction) { if ((Direction == "UP" && elev.Position <= FloorNumber) | (Direction == "DOWN" && elev.Position >= FloorNumber)) { FirstPriority.Add(elev); } } else if (elev.Direction == "IDLE") { SecondPriority.Add(elev); } else { ThirdPriority.Add(elev); } } if (FirstPriority.Count > 0) { foreach (Elevator elev in FirstPriority) { distance = CalculateDistanceToGo(elev, FloorNumber, Direction); // Console.WriteLine("#1elevator ID: {0} => DistanceToGo = {1}", elev.ID, distance); if (distance <= DistanceToGo) { DistanceToGo = distance; BestElevator = elev; } } } else if (SecondPriority.Count > 0) { foreach (Elevator elev in SecondPriority) { distance = CalculateDistanceToGo(elev, FloorNumber, Direction); // Console.WriteLine("#2elevator ID: {0} => DistanceToGo = {1}", elev.ID, distance); if (distance <= DistanceToGo) { DistanceToGo = distance; BestElevator = elev; } } } else { foreach (Elevator elev in ThirdPriority) { distance = CalculateDistanceToGo(elev, FloorNumber, Direction); // Console.WriteLine("#3elevator ID: {0} => DistanceToGo = {1}", elev.ID, distance); if (distance <= DistanceToGo) { DistanceToGo = distance; BestElevator = elev; } } } // Console.WriteLine("BEST ELEVATOR is ID: {0}", BestElevator.ID); // Updating the STOPLIST of the selected elevator if (BestElevator.Direction == Direction | BestElevator.Direction == "IDLE") { if (BestElevator.Direction == "DOWN" && BestElevator.Position >= FloorNumber) { Console.Write(" Take column {0} ElevatorID: {1} which is currently at floor {2}. ", currentColumn.ID, BestElevator.ID, BestElevator.Position); UpdateList(BestElevator, BestElevator.StopList, FloorNumber); UpdateList(BestElevator, BestElevator.StopList, 1); Console.WriteLine(" StopList: [ " + string.Join(" | ", BestElevator.StopList) + " ]"); // Console.WriteLine("*** 1%Take the column {0}, elevator {1} *** ", currentColumn.ID, BestElevator.ID); move(BestElevator); } else if (BestElevator.Direction == "UP" && BestElevator.Position <= FloorNumber) { Console.Write(" Take column {0} ElevatorID: {1} which is currently at floor {2}. ", currentColumn.ID, BestElevator.ID, BestElevator.Position); UpdateList(BestElevator, BestElevator.StopList, FloorNumber); UpdateList(BestElevator, BestElevator.StopList, 1); Console.WriteLine(" StopList: [ " + string.Join(" | ", BestElevator.StopList) + " ]"); // Console.WriteLine("*** 2%Take the column {0}, elevator {1} *** ", currentColumn.ID, BestElevator.ID); move(BestElevator); } else if (BestElevator.Direction == "IDLE") { Console.Write(" Take ElevatorID: {0} which is currently at floor {1}. ", BestElevator.ID, BestElevator.Position); UpdateList(BestElevator, BestElevator.StopList, FloorNumber); UpdateList(BestElevator, BestElevator.StopList, 1); Console.WriteLine(" StopList: [ " + string.Join(" | ", BestElevator.StopList) + " ]"); // Console.WriteLine("*** 2%Take the column {0}, elevator {1} *** ", currentColumn.ID, BestElevator.ID); move(BestElevator); } else { Console.Write(" Take ElevatorID: {0} which is currently at floor {1}. ", BestElevator.ID, BestElevator.Position); UpdateList(BestElevator, BestElevator.BufferList, FloorNumber); UpdateList(BestElevator, BestElevator.BufferList, 1); Console.Write(" StopList: [ " + string.Join(" | ", BestElevator.StopList) + " ]"); Console.WriteLine(" BufferLsit: [ " + string.Join(" | ", BestElevator.BufferList) + " ]"); // Console.WriteLine("*** 3%Take the column {0}, elevator {1} *** ", currentColumn.ID, BestElevator.ID); if (FloorNumber > 1) { BestElevator.BufferDirection = "DOWN"; move(BestElevator); } else { BestElevator.BufferDirection = "UP"; move(BestElevator); } } } else { Console.Write(" Take ElevatorID: {0} which is currently at floor {1}. ", BestElevator.ID, BestElevator.Position); UpdateList(BestElevator, BestElevator.BufferList, FloorNumber); UpdateList(BestElevator, BestElevator.StopList, 1); Console.Write(" StopList: [ " + string.Join(" | ", BestElevator.StopList) + " ]"); Console.WriteLine(" BufferLsit: [ " + string.Join(" | ", BestElevator.BufferList) + " ]"); // Console.WriteLine("*** 4%Take the column {0}, elevator {1} *** ", currentColumn.ID, BestElevator.ID); // For Basements if (FloorNumber > 1) { BestElevator.BufferDirection = "DOWN"; move(BestElevator); } // For other floors else { BestElevator.BufferDirection = "UP"; move(BestElevator); } } }
// *************** Find the best elevator *************** \\ public Elevator findElevator(int requestedFloor) { int bestScore = 9999; Elevator bestElevator = null; int userFloor = 1; if (requestedFloor != 1) { userFloor = requestedFloor; } else { userFloor = requestedFloor; } var gap = 9999; foreach (Elevator elevator in this.elevators) { // *************** User is on the RC floor *************** \\ // *************** The elevator is on the same floor as the user *************** \\ if (userFloor == 1 && elevator.elevatorFloor == userFloor && elevator.elevatorDirection == "up") { gap = Math.Abs(elevator.elevatorFloor - userFloor); elevator.score = 100 + gap; System.Console.WriteLine("Elevator score : " + elevator.score); if (elevator.score < bestScore) { bestScore = elevator.score; bestElevator = elevator; } System.Console.WriteLine("bestScore : " + bestScore + "\n"); } else if (userFloor == 1 && elevator.elevatorFloor == userFloor && elevator.elevatorDirection == "down") { gap = Math.Abs(elevator.elevatorFloor - userFloor); elevator.score = 120 + gap; System.Console.WriteLine("Elevator score : " + elevator.score); if (elevator.score < bestScore) { bestScore = elevator.score; bestElevator = elevator; } System.Console.WriteLine("bestScore : " + bestScore + "\n"); } else if (userFloor == 1 && elevator.elevatorFloor == userFloor && elevator.elevatorDirection == "idle") { gap = Math.Abs(elevator.elevatorFloor - userFloor); elevator.score = 140 + gap; System.Console.WriteLine("Elevator score : " + elevator.score); if (elevator.score < bestScore) { bestScore = elevator.score; bestElevator = elevator; } System.Console.WriteLine("bestScore : " + bestScore + "\n"); } // *************** The elevator is under the user floor ***************\\ else if (userFloor == 1 && elevator.elevatorFloor < userFloor && elevator.elevatorDirection == "up") { gap = Math.Abs(elevator.elevatorFloor - userFloor); elevator.score = 160 + gap; System.Console.WriteLine("Elevator score : " + elevator.score); if (elevator.score < bestScore) { bestScore = elevator.score; bestElevator = elevator; } System.Console.WriteLine("bestScore : " + bestScore + "\n"); } else if (userFloor == 1 && elevator.elevatorFloor < userFloor && elevator.elevatorDirection == "idle") { gap = Math.Abs(elevator.elevatorFloor - userFloor); elevator.score = 180 + gap; System.Console.WriteLine("Elevator score : " + elevator.score); if (elevator.score < bestScore) { bestScore = elevator.score; bestElevator = elevator; } System.Console.WriteLine("bestScore : " + bestScore + "\n"); } else if (userFloor == 1 && elevator.elevatorFloor < userFloor && elevator.elevatorDirection == "down") { gap = Math.Abs(elevator.elevatorFloor - userFloor); elevator.score = 200 + gap; System.Console.WriteLine("Elevator score : " + elevator.score); if (elevator.score < bestScore) { bestScore = elevator.score; bestElevator = elevator; } System.Console.WriteLine("bestScore : " + bestScore + "\n"); } // *************** The elevator is above the user floor ***************\\ else if (userFloor == 1 && elevator.elevatorFloor > userFloor && elevator.elevatorDirection == "down") { gap = Math.Abs(elevator.elevatorFloor - userFloor); elevator.score = 220 + gap; System.Console.WriteLine("Elevator score : " + elevator.score); if (elevator.score < bestScore) { bestScore = elevator.score; bestElevator = elevator; } System.Console.WriteLine("bestScore : " + bestScore + "\n"); } else if (userFloor == 1 && elevator.elevatorFloor > userFloor && elevator.elevatorDirection == "idle") { gap = Math.Abs(elevator.elevatorFloor - userFloor); elevator.score = 240 + gap; System.Console.WriteLine("Elevator score : " + elevator.score); if (elevator.score < bestScore) { bestScore = elevator.score; bestElevator = elevator; } System.Console.WriteLine("bestScore : " + bestScore + "\n"); } else if (userFloor == 1 && elevator.elevatorFloor > userFloor && elevator.elevatorDirection == "up") { gap = Math.Abs(elevator.elevatorFloor - userFloor); elevator.score = 260 + gap; System.Console.WriteLine("Elevator score : " + elevator.score); if (elevator.score < bestScore) { bestScore = elevator.score; bestElevator = elevator; } System.Console.WriteLine("bestScore : " + bestScore + "\n"); } // *************** User is under the RC floor ***************\\ else if (userFloor < 1 && elevator.elevatorFloor == userFloor && elevator.elevatorDirection == "up") { gap = Math.Abs(elevator.elevatorFloor - userFloor); elevator.score = 280 + gap; System.Console.WriteLine("Elevator score : " + elevator.score); if (elevator.score < bestScore) { bestScore = elevator.score; bestElevator = elevator; } System.Console.WriteLine("bestScore : " + bestScore + "\n"); } else if (userFloor < 1 && elevator.elevatorFloor < userFloor && elevator.elevatorDirection == "up") { gap = Math.Abs(elevator.elevatorFloor - userFloor); elevator.score = 300 + gap; System.Console.WriteLine("Elevator score : " + elevator.score); if (elevator.score < bestScore) { bestScore = elevator.score; bestElevator = elevator; } System.Console.WriteLine("bestScore : " + bestScore + "\n"); } else if (userFloor < 1 && elevator.elevatorFloor == userFloor && elevator.elevatorDirection == "idle") { gap = Math.Abs(elevator.elevatorFloor - userFloor); elevator.score = 320 + gap; System.Console.WriteLine("Elevator score : " + elevator.score); if (elevator.score < bestScore) { bestScore = elevator.score; bestElevator = elevator; } System.Console.WriteLine("bestScore : " + bestScore + "\n"); } else if (userFloor < 1 && elevator.elevatorFloor == userFloor && elevator.elevatorDirection == "down") { gap = Math.Abs(elevator.elevatorFloor - userFloor); elevator.score = 340 + gap; System.Console.WriteLine("Elevator score : " + elevator.score); if (elevator.score < bestScore) { bestScore = elevator.score; bestElevator = elevator; } System.Console.WriteLine("bestScore : " + bestScore + "\n"); } else if (userFloor < 1 && elevator.elevatorFloor < userFloor && elevator.elevatorDirection == "idle") { gap = Math.Abs(elevator.elevatorFloor - userFloor); elevator.score = 360 + gap; System.Console.WriteLine("Elevator score : " + elevator.score); if (elevator.score < bestScore) { bestScore = elevator.score; bestElevator = elevator; } System.Console.WriteLine("bestScore : " + bestScore + "\n"); } else if (userFloor < 1 && elevator.elevatorFloor < userFloor && elevator.elevatorDirection == "down") { gap = Math.Abs(elevator.elevatorFloor - userFloor); elevator.score = 380 + gap; System.Console.WriteLine("Elevator score : " + elevator.score); if (elevator.score < bestScore) { bestScore = elevator.score; bestElevator = elevator; } System.Console.WriteLine("bestScore : " + bestScore + "\n"); } else if (userFloor < 1 && elevator.elevatorFloor > userFloor && elevator.elevatorDirection == "idle") { gap = Math.Abs(elevator.elevatorFloor - userFloor); elevator.score = 400 + gap; System.Console.WriteLine("Elevator score : " + elevator.score); if (elevator.score < bestScore) { bestScore = elevator.score; bestElevator = elevator; } System.Console.WriteLine("bestScore : " + bestScore + "\n"); } else if (userFloor < 1 && elevator.elevatorFloor > userFloor && elevator.elevatorDirection == "down") { gap = Math.Abs(elevator.elevatorFloor - userFloor); elevator.score = 420 + gap; System.Console.WriteLine("Elevator score : " + elevator.score); if (elevator.score < bestScore) { bestScore = elevator.score; bestElevator = elevator; } System.Console.WriteLine("bestScore : " + bestScore + "\n"); } else if (userFloor < 1 && elevator.elevatorFloor > userFloor && elevator.elevatorDirection == "up") { gap = Math.Abs(elevator.elevatorFloor - userFloor); elevator.score = 440 + gap; System.Console.WriteLine("Elevator score : " + elevator.score); if (elevator.score < bestScore) { bestScore = elevator.score; bestElevator = elevator; } System.Console.WriteLine("bestScore : " + bestScore + "\n"); } // *************** User is above the RC floor ***************\\ // *************** The elevator is on the same floor as the user ***************\\ else if (userFloor > 1 && elevator.elevatorFloor == userFloor && elevator.elevatorDirection == "down") { gap = Math.Abs(elevator.elevatorFloor - userFloor); elevator.score = 460 + gap; System.Console.WriteLine("Elevator score : " + elevator.score); if (elevator.score < bestScore) { bestScore = elevator.score; bestElevator = elevator; } System.Console.WriteLine("bestScore : " + bestScore + "\n"); } else if (userFloor > 1 && elevator.elevatorFloor == userFloor && elevator.elevatorDirection == "idle") { gap = Math.Abs(elevator.elevatorFloor - userFloor); elevator.score = 480 + gap; System.Console.WriteLine("Elevator score : " + elevator.score); if (elevator.score < bestScore) { bestScore = elevator.score; bestElevator = elevator; } System.Console.WriteLine("bestScore : " + bestScore + "\n"); } else if (userFloor > 1 && elevator.elevatorFloor == userFloor && elevator.elevatorDirection == "up") { gap = Math.Abs(elevator.elevatorFloor - userFloor); elevator.score = 500 + gap; System.Console.WriteLine("Elevator score : " + elevator.score); if (elevator.score < bestScore) { bestScore = elevator.score; bestElevator = elevator; } System.Console.WriteLine("bestScore : " + bestScore + "\n"); } // *************** The elevator is under the user floor ***************\\ else if (userFloor > 1 && elevator.elevatorFloor < userFloor && elevator.elevatorDirection == "idle") { gap = Math.Abs(elevator.elevatorFloor - userFloor); elevator.score = 520 + gap; System.Console.WriteLine("Elevator score : " + elevator.score); if (elevator.score < bestScore) { bestScore = elevator.score; bestElevator = elevator; } System.Console.WriteLine("bestScore : " + bestScore + "\n"); } else if (userFloor > 1 && elevator.elevatorFloor < userFloor && elevator.elevatorDirection == "up") { gap = Math.Abs(elevator.elevatorFloor - userFloor); elevator.score = 540 + gap; System.Console.WriteLine("Elevator score : " + elevator.score); if (elevator.score < bestScore) { bestScore = elevator.score; bestElevator = elevator; } System.Console.WriteLine("bestScore : " + bestScore + "\n"); } else if (userFloor > 1 && elevator.elevatorFloor < userFloor && elevator.elevatorDirection == "down") { gap = Math.Abs(elevator.elevatorFloor - userFloor); elevator.score = 560 + gap; System.Console.WriteLine("Elevator score : " + elevator.score); if (elevator.score < bestScore) { bestScore = elevator.score; bestElevator = elevator; } System.Console.WriteLine("bestScore : " + bestScore + "\n"); } // *************** The elevator is above the user floor ***************\\ else if (userFloor > 1 && elevator.elevatorFloor > userFloor && elevator.elevatorDirection == "down") { gap = Math.Abs(elevator.elevatorFloor - userFloor); elevator.score = 300 + gap; System.Console.WriteLine("Elevator score : " + elevator.score); if (elevator.score < bestScore) { bestScore = elevator.score; bestElevator = elevator; } System.Console.WriteLine("bestScore : " + bestScore + "\n"); } else if (userFloor > 1 && elevator.elevatorFloor > userFloor && elevator.elevatorDirection == "idle") { gap = Math.Abs(elevator.elevatorFloor - userFloor); elevator.score = 300 + gap; System.Console.WriteLine("Elevator score : " + elevator.score); if (elevator.score < bestScore) { bestScore = elevator.score; bestElevator = elevator; } System.Console.WriteLine("bestScore : " + bestScore + "\n"); } else if (userFloor > 1 && elevator.elevatorFloor > userFloor && elevator.elevatorDirection == "up") { gap = Math.Abs(elevator.elevatorFloor - userFloor); elevator.score = 300 + gap; System.Console.WriteLine("Elevator score : " + elevator.score); if (elevator.score < bestScore) { bestScore = elevator.score; bestElevator = elevator; } System.Console.WriteLine("bestScore : " + bestScore + "\n"); } } return(bestElevator); }