private static string SetRoverToAction(Coordinates plateauMaxCoordinates, RoverInputs roverInput) { var newCoordinateX = roverInput.CurrentCoordinate.CoordinateX; var newCoordinateY = roverInput.CurrentCoordinate.CoordinateY; var newDirection = roverInput.CurrentDirection.ToUpper(); foreach (var sequence in roverInput.MovementSequence) { var movement = sequence.ToString().ToUpper(); if (movement == Directions.TurnRight || movement == Directions.TurnLeft) { newDirection = Directions.SetDirection(newDirection, movement); continue; } try { (newCoordinateX, newCoordinateY) = Rover.Move(newCoordinateX, newCoordinateY, newDirection, movement); if (newCoordinateX > plateauMaxCoordinates.CoordinateX || newCoordinateX < 0 || newCoordinateY > plateauMaxCoordinates.CoordinateY || newCoordinateY < 0) { throw new Exception(Rover.InvalidMovementSequence); } } catch (Exception e) { return(new RoverFinalLocation(newCoordinateX, newCoordinateY, Rover.InvalidMovementSequence) .ToDisplayString()); } } return(new RoverFinalLocation(newCoordinateX, newCoordinateY, newDirection).ToDisplayString()); }
private static void GetRoverInputs(List <string> martianInputs, List <RoverInputs> roverInputs) { for (var roverIndex = 1; roverIndex < martianInputs.Count; roverIndex = roverIndex + 2) { var roverPosition = martianInputs[roverIndex].Trim().Split(' '); var roverInput = new RoverInputs(Convert.ToInt32(roverPosition[0]), Convert.ToInt32(roverPosition[1]), roverPosition[2], martianInputs[roverIndex + 1]); roverInputs.Add(roverInput); } }
private static RoverFinalLocation MoveRover(Coordinates plateauMaxCoordinates, RoverInputs roverInput) { var newCoordinateX = roverInput.CurrentCoordinate.CoordinateX; var newCoordinateY = roverInput.CurrentCoordinate.CoordinateY; var newDirection = roverInput.CurrentDirection; foreach (var movement in roverInput.MovementSequence) { if (movement == Directions.TurnRight || movement == Directions.TurnLeft) { newDirection = Directions.SetDirection(newDirection, movement); continue; } (newCoordinateX, newCoordinateY) = Rover.Move(newCoordinateX, newCoordinateY, newDirection, movement); if (newCoordinateX > plateauMaxCoordinates.CoordinateX || newCoordinateX < 0 || newCoordinateY > plateauMaxCoordinates.CoordinateY || newCoordinateY < 0) { return(new RoverFinalLocation(newCoordinateX, newCoordinateY, Rover.InvalidMovementSequence)); } } return(new RoverFinalLocation(newCoordinateX, newCoordinateY, newDirection)); }