Пример #1
0
        internal MarsRoversResource MapRoversToResource(Dictionary <int, Rover> rovers)
        {
            var result = new MarsRoversResource();

            foreach (var rover in rovers)
            {
                result.RoverPositions.Add(new RoverPositionResource()
                {
                    Direction     = rover.Value.CurrentPosition.Direction.GetEnumDescription(),
                    PositionX     = rover.Value.CurrentPosition.X,
                    PositionY     = rover.Value.CurrentPosition.Y,
                    StatusMessage = rover.Value.StatusMessage,
                    Success       = rover.Value.Success
                });
            }

            return(result);
        }
Пример #2
0
        public MarsRoversResource CalculateRoversPosition(MarsRoversModel model)
        {
            var result = new MarsRoversResource();
            var rovers = new Dictionary <int, Rover>();

            var directions = EnumDescriptionHelper.GetEnumDescriptions <Direction>().ToList();
            var commands   = EnumDescriptionHelper.GetEnumDescriptions <RoverCommand>().ToList();

            var index = 0;

            try
            {
                // InitializeRovers
                foreach (var roverModel in model.Rovers)
                {
                    index++;
                    rovers.Add(index, InitializeRover(index, roverModel, directions, commands));
                }
                ;

                // Validate starting positions
                foreach (var rover in rovers)
                {
                    PositionValidator.ValidatePosition(rover.Value, rover.Value.CurrentPosition, rovers, model.PlateauX, model.PlateauY, true);
                }

                // ProcessRovers
                var deployedRovers = rovers.Where(x => x.Value.Deployed).ToDictionary(x => x.Key, x => x.Value);;
                foreach (var rover in deployedRovers)
                {
                    ProcessRoverCommands(rover.Value, deployedRovers, model.PlateauX, model.PlateauY);
                }

                // Map results
                result = MapRoversToResource(rovers);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, ex.Message);
                throw;
            }

            return(result);
        }