Beispiel #1
0
void turing_t::simuliraj()
{
  string curr = Q0;
  triple prijelaz;
  tuple QT;

  while (1) {
    QT.first = curr;  QT.second = traka.at( head );

    if (delta.find( QT ) == delta.end()) {
      break;
    } else {
      prijelaz = delta[ QT ];

      if ( (head == MIN && prijelaz.third == "L") || ( head == MAX && prijelaz.third == "R" ) ) {
        break;
      }

      curr = prijelaz.first;
      traka[ head ] = prijelaz.second;
      head += prijelaz.third == "R" ? +1 : -1;

    }
  }

  printf("%s|%d|", curr.c_str(), head);

  for ( vit it = traka.begin(); it != traka.end(); ++it ) {
    printf("%s", it->c_str());
  }

  printf("|%d\n", (int)F.count( curr ));

  return;
}
Beispiel #2
0
void turing_t::output()
{
  for ( sit it = Q.begin(); it != Q.end(); ++it ) {
    printf("%s ", it->c_str() );
  } puts( "" );
  
  for ( sit it = sigma.begin(); it != sigma.end(); ++it ) {
    printf("%s ", it->c_str() );
  } puts( "" );
  
  for ( sit it = theta.begin(); it != theta.end(); ++it ) {
    printf("%s ", it->c_str() );
  } puts( "" );

  printf("%s\n", prazanZnak.c_str());

  for ( vit it = traka.begin(); it != traka.end(); ++it ) {
    printf("%s", it->c_str());
  } puts( "" );

  for ( sit it = F.begin(); it != F.end(); ++it ) {
    printf("%s ", it->c_str() );
  } puts( "" );

  printf("%s\n", Q0.c_str());
  printf("%d\n", head);

  for ( map< tuple, triple >::iterator it = delta.begin(); it != delta.end(); ++it ) {
    printf("%s,%s -> %s,%s,%s\n", 
           it->first.first.c_str(), it->first.second.c_str(), 
           it->second.first.c_str(), it->second.second.c_str(), it->second.third.c_str());
  }
  
  return;
}
Beispiel #3
0
constr vStrToStr(const vstr& vec_str, int spos) //spos = start position
{
    str str = "";

    for(uint i=spos; i<vec_str.size(); i++)
    {
        str += " " + vec_str.at(i); //space to show where tokens start and end
    }

    return str;
}
Beispiel #4
0
string buildPath(const vstr &path)
{
	string r;
	for( size_t j=0; j<path.size(); j++ )
	{
		if( path[j] == "." ) continue;
		r+=path[j];
		if( j+1<path.size() ) r+="/";
	}
	return r;
}
Beispiel #5
0
vector<vstr> mergeRows(const vstr& dt)
{
    vector<vstr> ret;
    vstr row;

    for(int i=0, inrow=0; i<dt.size(); i++){
        if(dt[i].find("<TR valign=\"top\">") != string::npos
                || dt[i].find("<tr valign=\"top\">") != string::npos){
            if(inrow)
                error("Invalid format! Nested <tr> tags");
            inrow = 1;
            row.clear();
            continue;
        }else if(inrow && dt[i].find("</TR>") != string::npos
                    || inrow && dt[i].find("</tr>") != string::npos){
            inrow = 0;
            ret.push_back(row);
            continue;
        }

        if(inrow)
            row.push_back(dt[i]);
    }

    return ret;
}
int main()
{
    scanf("%d",&TC);
    while(TC--)
    {
        // erase all elements:
        Data.erase (Data.begin(),Data.end());

        pos = 0;
        scanf("%d",&n);
        REP(a,n)
        {
            if(a == 0) getline(cin,temp);
            getline(cin,temp);

            // Masukkan ke vector
            Data.pb(temp);

            // Debugging
            //cout << Data[a] << endl;
            if(Data[a][0] == 'L') pos--;
            else if(Data[a][0] == 'R')pos++;

            // Jika sama
            else if(Data[a][0] == 'S')
            {
                idx = Data[a][8] - '0';

                // Debugging
                //printf("Index : %d\n",index);

                if(Data[idx - 1][0] == 'L') pos--;
                else if(Data[idx - 1][0] == 'R') pos++;

                // Jika dapat Same As lagi
                else
                {
                    sameAs(a,idx);
                }
            }
        }
        printf("%d\n",pos);
    }

    return 0;
}
Beispiel #7
0
void turing_t::input()
{
  vstr v;
  string line;

  v = split( readline(), "," );
  for ( vit it = v.begin(); it != v.end(); ++it ) {
    Q.insert( *it );
  }

  v = split( readline(), "," );
  for ( vit it = v.begin(); it != v.end(); ++it ) {
    sigma.insert( *it );
  }

  v = split( readline(), "," );
  for ( vit it = v.begin(); it != v.end(); ++it ) {
    theta.insert( *it );
  }

  prazanZnak = readline();

  line = readline();
  for (int i = 0; i < line.length(); i++) {
    traka.push_back( line.substr( i, 1 ) );
  }
  
  v = split( readline(), "," );
  for ( vit it = v.begin(); it != v.end(); ++it ) {
    F.insert( *it );
  }

  Q0 = readline();

  line = readline();  sscanf( line.c_str(), "%d", &head );

  while (1) {
    line = readline();
    if (line.length() <= 0) { break; }

    v = split( line, "->" );
    string RHS = v[1], LHS = v[0];

    tuple a;  triple b;

    v = split( LHS, "," );
    a.first = v[0]; a.second = v[1];

    v = split( RHS, "," );
    b.first = v[0]; b.second = v[1]; b.third = v[2];

    delta[a] = b;

  }

  return;
}
Beispiel #8
0
void readNames(std::istream &is, vstr &x)
{	
	while(1)
	{
		string s;
		is>>s;
		if( !is ) break;
		x.push_back(s);
	}
}
Beispiel #9
0
void removeHTMLTagsVec(vstr& lines)
{
    vstr ret;
    for(int i=0; i<lines.size(); i++){
        string inner = removeHTMLTags(lines[i]);
        if(inner != "")
            ret.push_back(inner);
    }
    lines = ret;
}
int main()
 {
 	int a,b,ben = 0,selesai;
 	string temp;
	scanf("%d %d",&R,&C);
	
	// Input
	REP(a,R)
	{
		temp = GetString();
		data.pb(temp);
	}
Beispiel #11
0
vstr getDataTable(const vstr& lines)
{
    vstr v;
    for(int i=0, seen=0; i<lines.size(); i++){
        if(lines[i] == DATA_START_MARKER){
            seen = 1;
            continue;
        }else if(lines[i] == DATA_END_MARKER)
            return v;

        if(seen)
            v.push_back(lines[i]);
    }
    error("Invalid format!");
}