fork download
  1. #include <deque>
  2. #include <random>
  3. #include <algorithm>
  4. #include <cmath>
  5. #include <iostream>
  6.  
  7. int countTo24(std::mt19937& gen, std::uniform_int_distribution<>& dist)
  8. {
  9. bool found[24] = {0};
  10. int remaining = 24;
  11. int attempts;
  12. for (attempts = 0; remaining != 0; attempts++)
  13. {
  14. int random = dist(gen);
  15. if (!found[random])
  16. {
  17. found[random] = true;
  18. remaining--;
  19. }
  20. }
  21. return attempts;
  22. }
  23.  
  24. int main()
  25. {
  26. int randomState[16];
  27. std::seed_seq seed(std::begin(randomState), std::end(randomState));
  28. std::mt19937 gen(seed);
  29. std::uniform_int_distribution<> dist(0, 23);
  30.  
  31. std::deque<int> counts;
  32. for (int i = 0; i < 100000; i++)
  33. {
  34. counts.push_back(countTo24(gen, dist));
  35. }
  36.  
  37. long long averageAcc = 0;
  38. for (int count : counts) averageAcc += count;
  39. double average = averageAcc / (double)counts.size();
  40.  
  41. long long varianceAcc = 0;
  42. for (int count : counts)
  43. {
  44. int diff = count - average;
  45. varianceAcc += diff * diff;
  46. }
  47. double variance = varianceAcc / (double)counts.size();
  48. double stdDev = sqrt(variance);
  49.  
  50. std::cout << "avg: " << average << std::endl;
  51. std::cout << "stddev: " << stdDev << std::endl;
  52. }
Success #stdin #stdout 0.53s 3476KB
stdin
Standard input is empty
stdout
avg: 90.6073
stddev: 28.4351