#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';
}