fork download
  1. #include <random>
  2. #include <map>
  3. #include <iostream>
  4. #include <algorithm>
  5.  
  6.  
  7. std::map<int, int> runLength(int range, int iterations)
  8. {
  9. std::mt19937 rng(0);
  10. auto seed = std::random_device{}();
  11. rng.seed(seed);
  12.  
  13. std::uniform_int_distribution<int> dist(0, range - 1);
  14.  
  15. int run = 0;
  16. int prev = -1;
  17. std::map<int, int> runLengthCount;
  18.  
  19. for (int i = 0; i < iterations; i++)
  20. {
  21. int val = dist(rng);
  22. if (val == prev)
  23. ++run;
  24. else
  25. {
  26. ++runLengthCount[run];
  27. run = 0;
  28. }
  29.  
  30. prev = val;
  31. }
  32.  
  33. return runLengthCount;
  34. }
  35.  
  36. int main(int argc, char** argv)
  37. {
  38. int range = 2;
  39. int iterations = 100000;
  40.  
  41. if (argc > 1)
  42. range = atoi(argv[1]);
  43. if (argc > 2)
  44. iterations = atoi(argv[2]);
  45.  
  46. auto result = runLength(range, iterations);
  47.  
  48. std::cout << "Length\tOccurrences\n";
  49. for (auto& [key, value] : result)
  50. std::cout << key << "\t" << value << "\n";
  51.  
  52. return 0;
  53. }
Success #stdin #stdout 0s 4432KB
stdin
Standard input is empty
stdout
Length	Occurrences
0	25037
1	12404
2	6166
3	3169
4	1610
5	763
6	394
7	189
8	99
9	54
10	27
11	11
12	9
13	5
16	1
18	1