#include <iostream>
#include <random>
using namespace std;
int* statGen(const int die, const int num)
{
int x;
int* stats = new int[num];
int tot = (die + 1) / 2 * num;
std::random_device rd; // only used once to initialise (seed) engine
std::mt19937 rng(rd()); // random-number engine used (Mersenne-Twister in this case)
std::uniform_int_distribution<int> uni(0, num-1); // guaranteed unbiased
while(tot > 0)
{
x = uni(rng); //generate a random number between 1 and then number of stats
if(stats[x] < die)
{
++stats[x];
--tot;
}
}
return stats;
}
int main()
{
int* myStats;
for(int i = 0; i < 1000; i++)
{
myStats = statGen(20, 6);
cout << '[';
for(int j = 0; j < 5; j++)
{
cout << myStats[j] << ' ';
}
cout << myStats[5] << ']' << endl;
delete[] myStats;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cmFuZG9tPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50KiBzdGF0R2VuKGNvbnN0IGludCBkaWUsIGNvbnN0IGludCBudW0pCnsKCWludCB4OwoJaW50KiBzdGF0cyA9IG5ldyBpbnRbbnVtXTsKCWludCB0b3QgPSAoZGllICsgMSkgLyAyICogbnVtOwoKCXN0ZDo6cmFuZG9tX2RldmljZSByZDsgICAgIC8vIG9ubHkgdXNlZCBvbmNlIHRvIGluaXRpYWxpc2UgKHNlZWQpIGVuZ2luZQoJc3RkOjptdDE5OTM3IHJuZyhyZCgpKTsgICAgLy8gcmFuZG9tLW51bWJlciBlbmdpbmUgdXNlZCAoTWVyc2VubmUtVHdpc3RlciBpbiB0aGlzIGNhc2UpCglzdGQ6OnVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbjxpbnQ+IHVuaSgwLCBudW0tMSk7IC8vIGd1YXJhbnRlZWQgdW5iaWFzZWQKCQoJd2hpbGUodG90ID4gMCkKCXsKCQl4ID0gdW5pKHJuZyk7IC8vZ2VuZXJhdGUgYSByYW5kb20gbnVtYmVyIGJldHdlZW4gMSBhbmQgdGhlbiBudW1iZXIgb2Ygc3RhdHMKCQlpZihzdGF0c1t4XSA8IGRpZSkKCQl7CgkJCSsrc3RhdHNbeF07CgkJCS0tdG90OwoJCX0KCX0KCXJldHVybiBzdGF0czsKfQoKaW50IG1haW4oKQp7CglpbnQqIG15U3RhdHM7Cglmb3IoaW50IGkgPSAwOyBpIDwgMTAwMDsgaSsrKQoJewoJCW15U3RhdHMgPSBzdGF0R2VuKDIwLCA2KTsKCQljb3V0IDw8ICdbJzsKCQlmb3IoaW50IGogPSAwOyBqIDwgNTsgaisrKQoJCXsKCQkJY291dCA8PCBteVN0YXRzW2pdIDw8ICcgJzsKCQl9CgkJY291dCA8PCBteVN0YXRzWzVdIDw8ICddJyA8PCBlbmRsOwoJCWRlbGV0ZVtdIG15U3RhdHM7Cgl9CglyZXR1cm4gMDsKfQ==