public SimulationParameters AboveWithDirection(ClosestElevator elevator, Direction direction, bool elevatorIsCloneGoingToRightDirection) { var totalClones = NbTotalClones; if (!elevatorIsCloneGoingToRightDirection) { totalClones--; } return(new SimulationParameters(CloneFloor + 1, elevator.Position, direction, ElevatorsToBuild, totalClones)); }
private MapReturn LastFloorReturnLeft(SimulationParameters simulationParameters, Direction returnDirection, ClosestElevator elevator) { if (elevator != null && elevator.Position > _exitPosition) { return(new MapReturn(int.MaxValue, returnDirection)); } var distance = Floor.GetDistance(simulationParameters.ClonePos, _exitPosition, simulationParameters.Direction); return(new MapReturn(distance, returnDirection)); }
private int CalculateFor(SimulationParameters simulationParameters, ClosestElevator elevator, Direction direction) { if (elevator == null) { return(int.MaxValue); } var aboveWithWrongDirection = simulationParameters.AboveWithDirection(elevator, direction, elevator.IsCloneGoingToRightDirection); var totalTravel = ShortPath(aboveWithWrongDirection).TotalTravel; if (totalTravel == int.MaxValue) { return(totalTravel); } return(elevator.Distance + totalTravel); }