Guest User

Untitled

a guest
Oct 8th, 2023
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.47 KB | None | 0 0
  1. const size_t ROUND_CNT = 10'000'000;
  2.     const int PLAYERS_CNT = 8;
  3.     const size_t PLAYER_A_NUM = 0;
  4.     const size_t PLAYER_B_NUM = 1;
  5.  
  6.     size_t players[PLAYERS_CNT];
  7.  
  8.     Random r;
  9.     double successCnt = 0;
  10.     int currentPlayerCnt;
  11.     std::random_device rd;
  12.     std::mt19937 g(rd());
  13.     for (size_t i = 0; i < ROUND_CNT; ++i)
  14.     {
  15.         currentPlayerCnt = PLAYERS_CNT;
  16.         for (int i = 0; i < PLAYERS_CNT; ++i)
  17.             players[i] = i;
  18.         std::shuffle(players, players + PLAYERS_CNT, g);
  19.  
  20.         while (currentPlayerCnt >= 2)
  21.         {
  22.             for (int j = 0; j < (currentPlayerCnt / 2); ++j)
  23.             {
  24.                 if ((players[j * 2] == PLAYER_A_NUM && players[j * 2 + 1] == PLAYER_B_NUM) || (players[j * 2] == PLAYER_B_NUM && players[j * 2 + 1] == PLAYER_A_NUM))
  25.                 {
  26.                     ++successCnt;
  27.                     goto leaveExperimentLabel;
  28.                 }
  29.             }
  30.  
  31.             for (int k = 0; k < (currentPlayerCnt / 2); ++k)
  32.             {
  33.                 double randomDouble = r.nextDouble();
  34.                 if (randomDouble < 0.5)
  35.                 {
  36.                     players[k] = players[k * 2];
  37.                 }
  38.                 else
  39.                 {
  40.                     players[k] = players[k * 2 + 1];
  41.                 }
  42.             }
  43.  
  44.             currentPlayerCnt /= 2;
  45.         }
  46.  
  47.         leaveExperimentLabel:
  48.         {};
  49.     }
  50.  
  51.     std::cout << successCnt / ROUND_CNT << "\n" ;
Advertisement
Add Comment
Please, Sign In to add comment