fork download
  1. #include <iostream>
  2. #include <random>
  3. #include <unordered_set>
  4.  
  5. int main()
  6. {
  7. const int start_time = 1452934113;
  8. const int generated_per_second = 1;
  9.  
  10. std::random_device rd;
  11. unsigned int seed = rd();
  12.  
  13. std::cout << "Seeding mersenne twister with " << seed << "\n";
  14. std::cout << "Starting at time " << start_time << "\n";
  15. std::cout << "Generating " << generated_per_second << " IDs per second" << "\n\n" << std::flush;
  16.  
  17. std::mt19937 mt(rd());
  18. std::uniform_real_distribution<float> dist(0, 1.0f);
  19.  
  20. std::unordered_set<int> generated;
  21. for (int current_time = start_time, total_generated = 0; true; ++current_time) {
  22. for (int gen = 0; gen < generated_per_second; ++gen, ++total_generated) {
  23. int rnd = std::floor(current_time * dist(mt));
  24. auto insert = generated.insert(rnd);
  25.  
  26. if (!insert.second) {
  27. std::cout << "Found duplicate after " << total_generated << " iterations" << std::endl;
  28. return 0;
  29. }
  30. }
  31. }
  32. }
  33.  
Success #stdin #stdout 0s 3460KB
stdin
Standard input is empty
stdout
Seeding mersenne twister with 2979278733
Starting at time 1452934113
Generating 1 IDs per second

Found duplicate after 4080 iterations