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;
}
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;
}