void generateRec(vector<string>& ret, string& str, int left, int right, int pos, int n)
 {
     if(pos == n)
     {
         ret.push_back(str);
         return;
     }
     if(left > 0)
     {
         str[pos] = '(';
         generateRec(ret,str,left-1,right,pos+1,n);
     }
     if(right > left)
     {
         str[pos] = ')';
         generateRec(ret,str,left,right-1,pos+1,n);
     }
 
 }
 vector<string> generateParenthesis(int n) {
     // Start typing your C/C++ solution below
     // DO NOT write int main() function
     vector<string> ret;
     if(n <= 0)
         return ret;
     string str(2*n,' ');
     generateRec(ret,str,n,n,0,2*n);
     return ret;
 }
Example #3
0
/**
 * Generate code for a projection of a group of mutually recursive definitions
 */
string DocCompiler::generateRecProj(Tree sig, Tree r, int i, int priority)
{
    string vname;
    Tree var, le;
	
	//cerr << "*** generateRecProj sig : \"" << ppsig(sig) << "\"" << endl;            

    if ( ! getVectorNameProperty(sig, vname)) {
        faustassert(isRec(r, var, le));
		//cerr << "    generateRecProj has NOT YET a vname : " << endl;            
		//cerr << "--> generateRecProj calls generateRec on \"" << ppsig(sig) << "\"" << endl;            
        generateRec(r, var, le, priority);
        faustassert(getVectorNameProperty(sig, vname));
		//cerr << "<-- generateRecProj vname : \"" << subst("$0(t)", vname) << "\"" << endl;            
    } else {
		//cerr << "(generateRecProj has already a vname : \"" << subst("$0(t)", vname) << "\")" << endl;            
	}
    return subst("$0(t)", vname);
}
Example #4
0
void VectorCompiler::generateCodeRecursions (Tree sig)
{
    Tree    id, body;
    string  code;
    //cerr << "VectorCompiler::generateCodeRecursions( " << ppsig(sig) << " )" << endl;
    if (getCompiledExpression(sig, code)) {
        //cerr << "** ALREADY VISITED : " << code << " ===> " << ppsig(sig) << endl;
        return;
    } else if( isRec(sig, id, body) ) {
        //cerr << "we have a recursive expression non compiled yet : " << ppsig(sig) << endl;
        setCompiledExpression(sig, "[RecursionVisited]");
        fClass->openLoop(sig, "count");
        generateRec(sig, id, body);
        fClass->closeLoop(sig);
    } else {
        // we go down the expression
        vector<Tree>  subsigs;
        int n = getSubSignals(sig, subsigs, false);
        for (int i=0; i<n; i++) { generateCodeRecursions(subsigs[i]); }
    }
}