public override (Position.Position position, IState state, bool isMatched) GetPositionAndState(ICommand command) { if (command == null) { throw new ArgumentException(nameof(command)); } if (command.GetType().Name != nameof(Move)) { return(Calculator.GetPositionAndState(command)); } var newLocation = GetNewLocation(Robot.CurrentPosition); return(new Position.Position(newLocation, Robot.CurrentPosition.Direction), StateFactory.CreateMoved(Robot), true); }