Exemple #1
0
        // 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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        //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);
        }
Exemple #4
0
 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);
        }