#include <random>
#include <array>
#include <iostream>
int RollADice1(const std::array<int, 6>& chances) {
static std::random_device rd; //Will be used to obtain a seed for the random number engine
static std::mt19937 gen(rd()); //Standard mersenne_twister_engine seeded with rd()
static std::uniform_int_distribution<int> distrib(0, *chances.crbegin());
auto roll = distrib(gen);
for(int i=0; i < chances.size(); ++i) {
if (roll <= chances[i]) {
return i;
}
}
return chances.size() - 1;
}
int main() {
constexpr std::array<int, 6> chances {
100,
100,
200,
100,
100,
600
};
std::array<int, 6> partial_sums{};
int prev{};
for(int i=0; i < partial_sums.size(); ++i) {
partial_sums[i] = chances[i] + prev;
prev = partial_sums[i];
}
std::array<int, 6> arr{};
for(int i=0; i < 120'000; ++i) {
++arr.at(RollADice1(partial_sums));
}
for(int i=0; i < arr.size(); ++i) {
std::cout << i << ' ' << arr[i] << '\n';
}
std::cout << "Sum: " << std::accumulate(arr.begin(), arr.end(), 0) << '\n';
}
I2luY2x1ZGUgPHJhbmRvbT4KI2luY2x1ZGUgPGFycmF5PgojaW5jbHVkZSA8aW9zdHJlYW0+CgppbnQgUm9sbEFEaWNlMShjb25zdCBzdGQ6OmFycmF5PGludCwgNj4mIGNoYW5jZXMpIHsKCXN0YXRpYyBzdGQ6OnJhbmRvbV9kZXZpY2UgcmQ7ICAvL1dpbGwgYmUgdXNlZCB0byBvYnRhaW4gYSBzZWVkIGZvciB0aGUgcmFuZG9tIG51bWJlciBlbmdpbmUKCXN0YXRpYyBzdGQ6Om10MTk5MzcgZ2VuKHJkKCkpOyAvL1N0YW5kYXJkIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lIHNlZWRlZCB3aXRoIHJkKCkKCXN0YXRpYyBzdGQ6OnVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbjxpbnQ+IGRpc3RyaWIoMCwgKmNoYW5jZXMuY3JiZWdpbigpKTsKCglhdXRvIHJvbGwgPSBkaXN0cmliKGdlbik7CgoJZm9yKGludCBpPTA7IGkgPCBjaGFuY2VzLnNpemUoKTsgKytpKSB7CgkJaWYgKHJvbGwgPD0gY2hhbmNlc1tpXSkgewogICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICB9Cgl9CiAgICByZXR1cm4gY2hhbmNlcy5zaXplKCkgLSAxOwp9CgppbnQgbWFpbigpIHsKCWNvbnN0ZXhwciBzdGQ6OmFycmF5PGludCwgNj4gY2hhbmNlcyB7CgkJMTAwLAoJCTEwMCwKCQkyMDAsCgkJMTAwLAoJCTEwMCwKCQk2MDAKCX07CgogICAgc3RkOjphcnJheTxpbnQsIDY+IHBhcnRpYWxfc3Vtc3t9OwogICAgaW50IHByZXZ7fTsKICAgIGZvcihpbnQgaT0wOyBpIDwgcGFydGlhbF9zdW1zLnNpemUoKTsgKytpKSB7CiAgICAgICAgcGFydGlhbF9zdW1zW2ldID0gY2hhbmNlc1tpXSArIHByZXY7CiAgICAgICAgcHJldiA9IHBhcnRpYWxfc3Vtc1tpXTsKICAgIH0KCglzdGQ6OmFycmF5PGludCwgNj4gYXJye307CgoJZm9yKGludCBpPTA7IGkgPCAxMjAnMDAwOyArK2kpIHsKCQkrK2Fyci5hdChSb2xsQURpY2UxKHBhcnRpYWxfc3VtcykpOwoJfQoKCWZvcihpbnQgaT0wOyBpIDwgYXJyLnNpemUoKTsgKytpKSB7CgkJc3RkOjpjb3V0IDw8IGkgPDwgJyAnIDw8IGFycltpXSA8PCAnXG4nOwoJfQoKICAgIHN0ZDo6Y291dCA8PCAiU3VtOiAiIDw8IHN0ZDo6YWNjdW11bGF0ZShhcnIuYmVnaW4oKSwgYXJyLmVuZCgpLCAwKSA8PCAnXG4nOwp9