Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const size_t ROUND_CNT = 10'000'000;
- const int PLAYERS_CNT = 8;
- const size_t PLAYER_A_NUM = 0;
- const size_t PLAYER_B_NUM = 1;
- size_t players[PLAYERS_CNT];
- Random r;
- double successCnt = 0;
- int currentPlayerCnt;
- std::random_device rd;
- std::mt19937 g(rd());
- for (size_t i = 0; i < ROUND_CNT; ++i)
- {
- currentPlayerCnt = PLAYERS_CNT;
- for (int i = 0; i < PLAYERS_CNT; ++i)
- players[i] = i;
- std::shuffle(players, players + PLAYERS_CNT, g);
- while (currentPlayerCnt >= 2)
- {
- for (int j = 0; j < (currentPlayerCnt / 2); ++j)
- {
- 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))
- {
- ++successCnt;
- goto leaveExperimentLabel;
- }
- }
- for (int k = 0; k < (currentPlayerCnt / 2); ++k)
- {
- double randomDouble = r.nextDouble();
- if (randomDouble < 0.5)
- {
- players[k] = players[k * 2];
- }
- else
- {
- players[k] = players[k * 2 + 1];
- }
- }
- currentPlayerCnt /= 2;
- }
- leaveExperimentLabel:
- {};
- }
- std::cout << successCnt / ROUND_CNT << "\n" ;
Advertisement
Add Comment
Please, Sign In to add comment