/*
   Get pseudorandom integer numbers with non-uniform distribution.

   Outcome   |   weight    |  probability
   --------------------------------------
      0      |      10     |     10/18
      1      |       5     |      5/18
      2      |       2     |      2/18
      3      |       1     |      1/18

*/
 
#include <iostream>
#include <random>
using namespace std;

int main()
{
   default_random_engine re;
   discrete_distribution<int> distribution {10,5,2,1};

   const int nrolls = 10000; // number of experiments

   cout << "50 randomly drawn numbers: ";
   for (int i=0;i<50;i++) cout << distribution(re) << " ";
   cout << endl;

   // Calculate histogram
   int hist[4]={0};

   for (int i=0; i<nrolls; ++i) {
      int number = distribution(re);
      hist[number]++;
    }

   cout << "A discrete_distribution:" << std::endl;
   for (int i=0; i<4; ++i)
       {
          cout << i << ": ";
          for (int j=0 ; j<hist[i]*40/nrolls; j++) cout << "*";
          cout << endl;
       }
   return 0;
}

