
#include <random>
#include <iostream>
#include <algorithm>
//#include <time.h>

const int N=6;
const int X=10000;
const int C=10000;

void test(::std::vector<int>& c, unsigned int seed, unsigned int (*f)(::std::mt19937&))
{
    ::std::mt19937 g(seed);
    int n[N] ={};
    for( int i=0; i < X; ++i )
    {
        n[ f(g) ]++;
    }
    int r[N] = {};
    for( int i=0; i < N; ++i ) r[i] = i;
    ::std::sort(r, r+N, [&](int a, int b){ return n[a] > n[b]; });
    for( int i=0; i < N; ++i )
    {
        c[r[i]] += N/2 - i;
    }
}

int main(int, char**)
{
//  ::std::mt19937 rd(static_cast<unsigned int>(time(NULL)));
    ::std::random_device rd;
    ::std::vector<int> c1(N), c2(N);
    for( int j=0; j < C; ++j )
    {
        unsigned int s = rd();
        test(c1, s, [](::std::mt19937& g){ return g()%N; });
        test(c2, s, [](::std::mt19937& g){ return ::std::uniform_int_distribution<unsigned int>(0, N-1)(g); });
    }
    for( int i=0; i < N; ++i )
    {
        ::std::cout << i << ": " << c1[i] << ", " << c2[i] << ::std::endl;
    }
    return 0;
}
