#include <iostream>
#include <random>
#include <unordered_set>
int main()
{
const int start_time = 1452934113;
const int generated_per_second = 1;
std::random_device rd;
unsigned int seed = rd();
std::cout << "Seeding mersenne twister with " << seed << "\n";
std::cout << "Starting at time " << start_time << "\n";
std::cout << "Generating " << generated_per_second << " IDs per second" << "\n\n" << std::flush;
std::mt19937 mt(rd());
std::uniform_real_distribution<float> dist(0, 1.0f);
std::unordered_set<int> generated;
for (int current_time = start_time, total_generated = 0; true; ++current_time) {
for (int gen = 0; gen < generated_per_second; ++gen, ++total_generated) {
int rnd = std::floor(current_time * dist(mt));
auto insert = generated.insert(rnd);
if (!insert.second) {
std::cout << "Found duplicate after " << total_generated << " iterations" << std::endl;
return 0;
}
}
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cmFuZG9tPgojaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KCmludCBtYWluKCkKewogICAgY29uc3QgaW50IHN0YXJ0X3RpbWUgPSAxNDUyOTM0MTEzOwogICAgY29uc3QgaW50IGdlbmVyYXRlZF9wZXJfc2Vjb25kID0gMTsKCiAgICBzdGQ6OnJhbmRvbV9kZXZpY2UgcmQ7CiAgICB1bnNpZ25lZCBpbnQgc2VlZCA9IHJkKCk7CgogICAgc3RkOjpjb3V0IDw8ICJTZWVkaW5nIG1lcnNlbm5lIHR3aXN0ZXIgd2l0aCAiIDw8IHNlZWQgPDwgIlxuIjsKICAgIHN0ZDo6Y291dCA8PCAiU3RhcnRpbmcgYXQgdGltZSAiIDw8IHN0YXJ0X3RpbWUgPDwgIlxuIjsKICAgIHN0ZDo6Y291dCA8PCAiR2VuZXJhdGluZyAiIDw8IGdlbmVyYXRlZF9wZXJfc2Vjb25kIDw8ICIgSURzIHBlciBzZWNvbmQiIDw8ICJcblxuIiA8PCBzdGQ6OmZsdXNoOwoKICAgIHN0ZDo6bXQxOTkzNyBtdChyZCgpKTsKICAgIHN0ZDo6dW5pZm9ybV9yZWFsX2Rpc3RyaWJ1dGlvbjxmbG9hdD4gZGlzdCgwLCAxLjBmKTsKCiAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8aW50PiBnZW5lcmF0ZWQ7CiAgICBmb3IgKGludCBjdXJyZW50X3RpbWUgPSBzdGFydF90aW1lLCB0b3RhbF9nZW5lcmF0ZWQgPSAwOyB0cnVlOyArK2N1cnJlbnRfdGltZSkgewogICAgICAgIGZvciAoaW50IGdlbiA9IDA7IGdlbiA8IGdlbmVyYXRlZF9wZXJfc2Vjb25kOyArK2dlbiwgKyt0b3RhbF9nZW5lcmF0ZWQpIHsKICAgICAgICAgICAgaW50IHJuZCA9IHN0ZDo6Zmxvb3IoY3VycmVudF90aW1lICogZGlzdChtdCkpOwogICAgICAgICAgICBhdXRvIGluc2VydCA9IGdlbmVyYXRlZC5pbnNlcnQocm5kKTsKCiAgICAgICAgICAgIGlmICghaW5zZXJ0LnNlY29uZCkgewogICAgICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICJGb3VuZCBkdXBsaWNhdGUgYWZ0ZXIgIiA8PCB0b3RhbF9nZW5lcmF0ZWQgPDwgIiBpdGVyYXRpb25zIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQo=