Advertisement
Guest User

Untitled

a guest
Dec 12th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.65 KB | None | 0 0
  1.  
  2. bool verbose = false;
  3.  
  4. class Prymitywna {
  5.     public:
  6.  
  7.     vector<char> slowo;
  8.     Prymitywna(string slowo) {
  9.         for(char c : slowo)
  10.             this->slowo.push_back(c);
  11.     }
  12.  
  13.     int32_t num_of_right_sequences(int a, int b) {
  14.         int32_t res[2][2];
  15.         int32_t res_new[2][2];
  16.         for(int i = 0; i < 2; i++)
  17.             for(int j = 0; j < 2; j++) {
  18.                 res[i][j] = 0;
  19.             }
  20.  
  21.         int32_t nowy[2][2];
  22.  
  23.         for(int nr = a; nr <= b; nr++) {
  24.             for(int i = 0; i < 2; i++)
  25.                 for(int j = 0; j < 2; j++)
  26.                     nowy[i][j] = 0;
  27.  
  28.             if (slowo[nr] == 'G')
  29.                 nowy[1][1] = 1;
  30.             else
  31.                 nowy[0][0] = 1;
  32.  
  33.             calculate_nums_for_two_connected(res, nowy, res_new);
  34.             for(int i = 0; i < 2; i++)
  35.                 for(int j = 0; j < 2; j++)
  36.                     res[i][j] = res_new[i][j];
  37.         }
  38.  
  39.         int32_t kacowy = 0;
  40.         for(int i = 0; i < 2; i++) {
  41.             for(int j = 0; j < 2; j++) {
  42.                 kacowy = suma(kacowy, res[i][j]);
  43.             }
  44.         }
  45.         return kacowy;
  46.     }
  47.  
  48.     void przekrec_odcinek(int a, int b) {
  49.         vector<char> wek;
  50.         for(int nr = a; nr <= b; nr++) {
  51.             wek.push_back(slowo[nr]);
  52.         }
  53.  
  54.         for(int i = 0; i < wek.size(); i++)
  55.             slowo[b - i] = wek[i];
  56.     }
  57. };
  58.  
  59. string generate_word(int n) {
  60.     string res = "";
  61.     for(int i = 0; i < n; i++)
  62.         if (rand() % 2 == 0)
  63.             res += "G";
  64.         else
  65.             res += "R";
  66.     return res;
  67. }
  68.  
  69. int generuj_int(int n) {
  70.     return rand() % n;
  71. }
  72.  
  73. void generuj_pare(int & a, int & b, int n) {
  74.     while(true) {
  75.         a = generuj_int(n);
  76.         b = generuj_int(n);
  77.         if (a <= b)
  78.             return;
  79.     }
  80. }
  81.  
  82. void testuj(int n, int num_przes, int num_testow_na_przes) {
  83.     string slowo = generate_word(n);
  84.     // TODO tutaj wasza struktura wchodzi
  85.     Drzewo drz(slowo, n);
  86.     Prymitywna prym(slowo);
  87.  
  88.     for(int i = 0; i < num_przes; i++) {
  89.         //cout << "\n\n\n" << endl << "i = " << i << endl;
  90.  
  91.         for(int j = 0; j < num_testow_na_przes; j++) {
  92.             //cout << "\n\n\n" << endl << "j = " << j << endl;
  93.             int a, b;
  94.             generuj_pare(a, b, n);
  95.             if (drz.num_of_right_sequences(a, b) != prym.num_of_right_sequences(a, b)) {
  96.                 cout << "\n\n fail ab " << a << " " << b << "\n drzewo daje " << drz.num_of_right_sequences(a, b) << "a powinno" <<
  97.                         prym.num_of_right_sequences(a, b);
  98.                 cout << "\nchwilowo slowo byc powinno ";
  99.                 for (char c : prym.slowo)
  100.                     cout << c;
  101.                 cout << endl;
  102.                 cout << "\n\n a drzewo jest teraz takie \n";
  103.                 drz.wypisz_sie();
  104.  
  105.                 cout << "\n\n teraz puszczam jeszcze raz tylko verbose ab " << a << " " << b << endl;
  106.                 verbose = true;
  107.                 drz.num_of_right_sequences(a, b);
  108.                 assert(false);
  109.             }
  110.         }
  111.  
  112.         int a,b;
  113.         generuj_pare(a, b, n);
  114.         //cout << "\n\nprzestawienie ab " << a << " " << b << endl << endl;
  115.         drz.przekrec_odcinek(a, b);
  116.         prym.przekrec_odcinek(a, b);
  117.     }
  118. }
  119.  
  120. /*
  121. // przyklad uzycia
  122. int main()
  123. {
  124.     // ustalamy seed
  125.     srand(3563);
  126.  
  127.  
  128.     // tutaj zrobimy kolumne legionistow o dlugosci 10,
  129.     // odbijemy w niej odcinek 2 1000 razy
  130.     // po kazdym takim odbiciu 1000 razy sprawdzimy czy daje dobre wyniki powstala struktura
  131.     testuj(10, 1000, 1000);
  132.  
  133.     //cout << "\n\nkoniec pliku\n";
  134.     return 0;
  135. }
  136. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement