#include <random>
#include <map>
#include <iostream>
#include <algorithm>


std::map<int, int> runLength(int range, int iterations)
{
	std::mt19937 rng(0);
	auto seed = std::random_device{}();
	rng.seed(seed);

	std::uniform_int_distribution<int> dist(0, range - 1);

	int run = 0;
	int prev = -1;
	std::map<int, int> runLengthCount;

	for (int i = 0; i < iterations; i++)
	{
		int val = dist(rng);
		if (val == prev)
			++run;
		else
		{
			++runLengthCount[run];
			run = 0;
		}

		prev = val;
	}

	return runLengthCount;
}

int main(int argc, char** argv)
{
	int range = 2;
	int iterations = 100000;

	if (argc > 1)
		range = atoi(argv[1]);
	if (argc > 2)
		iterations = atoi(argv[2]);

	auto result = runLength(range, iterations);

	std::cout << "Length\tOccurrences\n";
	for (auto& [key, value] : result)
		std::cout << key << "\t" << value << "\n";

	return 0;
}