Beispiel #1
0
 private bool ExistsScentForPosition(FinalPosition currentPositionExtended)
 {
     return(_scents != null &&
            _scents.Count() > 0 &&
            _scents.ToList().Any(s => (s.PositionX == currentPositionExtended.Position.PositionX &&
                                       s.PositionY == currentPositionExtended.Position.PositionY)));
 }
Beispiel #2
0
        public FinalPosition GetFinalPosition(Position currentPosition)
        {
            if (!currentPosition.IsValid(_marsGrid))
            {
                throw new Exception($"Position X: {currentPosition.PositionX} Y: {currentPosition.PositionY} is invalid");
            }

            var currentPositionExtended = new FinalPosition(currentPosition);
            var nextPosition            = new FinalPosition(currentPosition);

            foreach (var movement in _movements)
            {
                nextPosition.Position = movement.Move(currentPositionExtended.Position);
                if (IsInNewLostPosition(currentPositionExtended, nextPosition))
                {
                    currentPositionExtended.IsLost = true;
                    currentPositionExtended.Scent  = currentPositionExtended.Position;
                    return(currentPositionExtended);
                }

                if (IsInAPreviousLostPosition(currentPositionExtended, nextPosition))
                {
                    nextPosition.Position = currentPositionExtended.Position;
                }
                else
                {
                    currentPositionExtended.Position = nextPosition.Position;
                }
            }
            nextPosition.IsLost = IsRobotOffMars(_marsGrid, nextPosition.Position);
            return(nextPosition);
        }
Beispiel #3
0
        public override string ToString()
        {
            var sb = new StringBuilder();

            sb.Append("Component type: ").Append(ComponentType.ToString()).Append("\n");
            sb.Append("Category: ").Append(Category.ToString()).Append("\n");
            sb.Append("Lexeme: ").Append(Lexeme.ToString()).Append("\n");
            sb.Append("Line number: ").Append(LineNumber.ToString()).Append("\n");
            sb.Append("Initial position: ").Append(InitialPosition.ToString()).Append("\n");
            sb.Append("Final position: ").Append(FinalPosition.ToString()).Append("\n");

            return(sb.ToString());
        }
Beispiel #4
0
 private bool IsInNewLostPosition(FinalPosition currentPosition, FinalPosition nextPosition)
 {
     return(IsRobotOffMars(_marsGrid, nextPosition.Position) && !ExistsScentForPosition(currentPosition));
 }