Ejemplo n.º 1
0
Archivo: trie.c Proyecto: starsep/Trie
bool findTree(Node *node, char *s, int size, bool exact){
	if(node == NULL)return false;
	if(size == 0 && (!exact || node->numberOfWord != NO_END_OF_WORD))
		return true;
	int maxPref = maxPrefix(s, size, node->text, node->size);
	if(maxPref == size && (!exact || node->size == size))
		return !exact || node->numberOfWord != NO_END_OF_WORD;
	if(maxPref < node->size)
		return false;
	if(node->sons[cToI(s[maxPref])] == NULL)
		return false;
	return findTree(node->sons[cToI(s[maxPref])], s + maxPref, size - maxPref, exact);
}
Ejemplo n.º 2
0
void ALL::print_function(vector<int>& record_array,char *advise_string,int flag){
	if(flag>=record_array.size()){return;}
	for(int i=0;i<=61;i++){
		advise_string[ record_array[flag] ]=antiTranslate(i);
		print_function(record_array,advise_string,flag+1);
		int now=translate(advise_string[0]);
		if( findTree(tree[now],advise_string,0,strlen(advise_string)-1)<0 ){
			char *tmp=new char[101];
			strcpy(tmp,advise_string);
			TEN.push_back(tmp);
		}
	}
	return;
}
Ejemplo n.º 3
0
Archivo: trie.c Proyecto: starsep/Trie
//dodaje ostatni dodany do bazy wyraz
void addLastWord(void){
	Word *last = &words[numberOfWords - 1];
	if(findTree(root, last->text, last->size, true))
		ignore();
	if(checkBadLine()){
		numberOfWords--;
		deleteWord(&words[numberOfWords]);
		return;
	}
	if(root == NULL)
		root = makeLeaf(NULL, 0, NO_END_OF_WORD, NULL);
	addWordToNode(root, last->text, last->size, numberOfWords - 1);

	nodes();
	assert(endOfWord[numberOfWords - 1] != NULL);
	printf("word number: %d\n", numberOfWords - 1);
}
Ejemplo n.º 4
0
TEST(BoltNutTest, First) {

	std::srand ( unsigned ( std::time(0) ) );
	// Количество элементов
	int count = 10;
	// Создаем списки болтов и гаек
	std::vector<Bolt> bolts;
	std::vector<Nut> nuts;
	for (int i = 1; i <= count; ++i)
	{
		Bolt bolt;
		Nut nut;
		bolt.size = nut.size = i;
		bolts.push_back(bolt);
		nuts.push_back(nut);
	}

	unsigned int cmp = 0;
	// Перемешиваем болты
	std::random_shuffle ( bolts.begin(), bolts.end() );

	// Эталонный список пар, с которым будет сравниваться результат,
	// возвращенный функцией findTree.
	std::vector<Pair> p;
	for (unsigned int k = 0; k < bolts.size(); ++k)
	{
		Pair pr;
		pr.bolt.size = pr.nut.size = bolts[k].size;
		p.push_back(pr);
	}
	// Uncomment next line to fail test.
	// p[0].bolt.size = -1;

	// Перемешиваем гайки
	std::random_shuffle ( nuts.begin(), nuts.end() );
	// Находим пары болтов и гаек
	std::vector<Pair> pairs = findTree(bolts, nuts, cmp);
	
	// Тестируем.
	EXPECT_TRUE( equalPairVectors(p, pairs) );

}
Ejemplo n.º 5
0
void ALL::order_function(const int string_length,const int& length_dis,const int ID_length,vector<int>& record_array,int string_score_remain,int flag){
	if(string_score_remain==0){
		char advise_string[101];
		strncpy(advise_string,save_used_ID,string_length);
		advise_string[string_length]='\0';
		//cout<<"advise_string="<<advise_string<<endl;
		int now=translate(advise_string[0]);
		if(record_array.size()==0){
			if(findTree(tree[now],advise_string,0,strlen(advise_string)-1)<0&& strcmp(advise_string," ")!=0){
				char *tmp = new char [101];
				strcpy(tmp, advise_string);
				TEN.push_back(tmp);
			}
		}
		print_function(record_array,advise_string,0);
		return;
	}
	//cout<<"string_length= "<<string_length<<"   "<<"flag= "<<flag<<endl;
	//cout<<"string_score_remain="<<string_score_remain<<endl;
	if(flag>=string_length){return;}
	//===============================
	if(string_score_remain>=(string_length-flag)){
		//cout<<"enter if and  "<<"string_length= "<<string_length<<"   "<<"flag= "<<flag<<endl;
		for(flag;flag<string_length;flag++){
			/*cout<<"string_score_remain="<<string_score_remain<<"   ";
			cout<<"flag= "<<flag<<endl;
			cout<<"string_length-flag="<<string_length-flag<<endl;*/
			record_array.push_back(flag);
			order_function(string_length,length_dis,ID_length,record_array,string_score_remain-(string_length-flag),flag+1);
			record_array.pop_back();
		}
	}
	else{
		//cout<<"enter else"<<endl;
		order_function(string_length,length_dis,ID_length,record_array,string_score_remain,flag+1);
	}
	//================================
	return;
}
Ejemplo n.º 6
0
void fillHistoFromTreeVar(std::string& treedrawspec,
			  int  index,
			  wTH1 *&wth1)
{
  // Sample treedrawspec:
  // mytree:"TDCwinstart[%d]:runnum>>winstrt%d(70,202000,209000)","evtnum==1","prof P"
  //
  vector<string> v_tokens;
  string tid;
  TString drawspec;
  Tokenize(treedrawspec,v_tokens,":",true);
  if( (v_tokens.size() < 2) ||
      (!v_tokens[0].size())  ||
      (!v_tokens[2].size())    ) {
    cerr << "malformed root tree draw spec treeid:\"varexp\",\"selection\",option: " << treedrawspec << endl;
    return;
  }

  tid = v_tokens[0];
  for (size_t i=2; i<v_tokens.size(); i++) {
    drawspec += v_tokens[i];
  }
  int fmtcnt = drawspec.CountChar('%');

  if (fmtcnt) { // use index for tree array var
    switch(fmtcnt) {
    case 1: drawspec = Form(drawspec,index); break;
    case 2: drawspec = Form(drawspec,index,index); break;
    case 3: drawspec = Form(drawspec,index,index,index); break;
    case 4: drawspec = Form(drawspec,index,index,index,index); break;
    case 5: drawspec = Form(drawspec,index,index,index,index,index); break;
    case 6: drawspec = Form(drawspec,index,index,index,index,index,index); break;
    default:
      cerr << "More than six fmt specifiers in drawspec found, fix me! " << drawspec <<endl;
      exit(-1);
    }
  }
  if( gl_verbose)
    cout<<"drawspec="<<drawspec<<endl;

  TTree *tree = findTree(tid);
  assert (tree);

  // can't use comma as delimiter since histo with binning spec may be supplied
  TObjArray *tokens = drawspec.Tokenize("\"");
  TString hname;

  TString varexp = ((TObjString *)(*tokens)[0])->GetString();

  if (varexp.Contains(">>")) {
    TObjArray *rematches = TPRegexp(">>(\\w+)").MatchS(varexp); // get histo name
    assert(rematches->GetEntriesFast() ==2);
    hname = ((TObjString *)(*rematches)[1])->GetString();

    if (wth1 && !hname.EqualTo(wth1->histo()->GetName())) {
      cerr << "Error: histo name in treedraw spec "<<hname;
      cerr <<" doesn't match named histo "<<wth1->histo()->GetName()<<endl;
      exit(-1);
    }
  } else { // add histo name
    assert (wth1);
    hname = TString(wth1->histo()->GetName());
    varexp = varexp + ">>+" + hname; // append to pre-existing histo
  }

  if( gl_verbose)
    cout<<"varexp="<<varexp<<", hname="<<hname<<endl;
  switch(tokens->GetEntriesFast()) {
  case 1:
    tree->Draw(varexp,"","goff");
    break;
  case 3:
    {
      TString cut = ((TObjString *)(*tokens)[2])->GetString();
      tree->Draw(varexp,cut,"goff"); 
    }
    break;
  case 4: // assume the cut string is blank
    {
      TString gopt = ((TObjString *)(*tokens)[3])->GetString();
      gopt = gopt + " goff";
      tree->Draw(varexp,"",gopt);
    }
    break;
  case 5:
    {
      TString cut  = ((TObjString *)(*tokens)[2])->GetString();
      TString gopt = ((TObjString *)(*tokens)[4])->GetString();
      gopt = gopt + " goff";
      tree->Draw(varexp,cut,gopt);
    }
    break;
  default:
    cerr << "malformed root tree draw spec treeid:varexp,selection,option";
    for (int i=0; i<tokens->GetEntriesFast(); i++)
      cerr << i<<": "<< ((TObjString *)(*tokens)[i])->GetString() << " ";
    cerr << endl;
    break;
  }
  if (!wth1) {
    wth1 = new wTH1((TH1*)gDirectory->Get(hname));
    assert(wth1);
    wth1->histo()->UseCurrentStyle();
  }
}                                                // fillHistoFromTreeVar
Ejemplo n.º 7
0
void fillGraphFromTreeVar(std::string& treedrawspec,int index,wGraph_t *&pwg)
{
  // Sample treedrawspec:
  // mytree:"TDCwinstart[%d]:runnum","evtnum==1","P"
  //
  vector<string> v_tokens;
  string tid;
  TString drawspec;
  Tokenize(treedrawspec,v_tokens,":",true);
  if( (v_tokens.size() < 2) ||
      (!v_tokens[0].size())  ||
      (!v_tokens[2].size())    ) {
    cerr << "malformed root tree draw spec treeid:\"varexp\",\"selection\",option: " << treedrawspec << endl;
    return;
  }

  tid = v_tokens[0];
  for (size_t i=2; i<v_tokens.size(); i++) {
    drawspec += v_tokens[i];
  }
  int fmtcnt = drawspec.CountChar('%');

  if (fmtcnt) { // use index for tree array var
    switch(fmtcnt) {
    case 1: drawspec = Form(drawspec,index); break;
    case 2: drawspec = Form(drawspec,index,index); break;
    case 3: drawspec = Form(drawspec,index,index,index); break;
    case 4: drawspec = Form(drawspec,index,index,index,index); break;
    case 5: drawspec = Form(drawspec,index,index,index,index,index); break;
    case 6: drawspec = Form(drawspec,index,index,index,index,index,index); break;
    default:
      cerr << "More than six fmt specifiers in drawspec found, fix me! " << drawspec <<endl;
      exit(-1);
    }
  }
  if( gl_verbose)
    cout<<"drawspec="<<drawspec<<endl;

  TTree *tree = findTree(tid);
  assert (tree);

  // can't use comma as delimiter since histo with binning spec may be supplied
  TObjArray *tokens = drawspec.Tokenize("\"");
  TString hname;

  TString varexp = ((TObjString *)(*tokens)[0])->GetString();

  if( gl_verbose)
    cout<<"varexp="<<varexp<<endl;
  switch(tokens->GetEntriesFast()) {
  case 1:
    tree->Draw(varexp,"","goff");
    break;
  case 3:
    {
      TString cut = ((TObjString *)(*tokens)[2])->GetString();
      tree->Draw(varexp,cut,"goff"); 
    }
    break;
  case 4: // assume the cut string is blank
    {
      TString gopt = ((TObjString *)(*tokens)[3])->GetString();
      gopt = gopt + " goff";
      tree->Draw(varexp,"",gopt);
    }
    break;
  case 5:
    {
      TString cut  = ((TObjString *)(*tokens)[2])->GetString();
      TString gopt = ((TObjString *)(*tokens)[4])->GetString();
      gopt = gopt + " goff";
      tree->Draw(varexp,cut,gopt);
    }
    break;
  default:
    cerr << "malformed root tree draw spec treeid:varexp,selection,option";
    for (int i=0; i<tokens->GetEntriesFast(); i++)
      cerr << i<<": "<< ((TObjString *)(*tokens)[i])->GetString() << " ";
    cerr << endl;
    break;
  }

  assert(tree->GetSelectedRows());

  if (!pwg)
    pwg = new wGraph_t();

  assert(pwg);
  pwg->gr = new TGraph(tree->GetSelectedRows(),
		       tree->GetV2(), tree->GetV1());

}                                                // fillGraphFromTreeVar