#include "robot_name.h" #include #include namespace robot_name { using namespace std; namespace { const size_t alpha_part_size = 2; const size_t digit_part_size = 3; string random_string(size_t size, char from_char, char to_char) { auto random_char = [from_char, to_char]() -> char { return from_char + rand() % (to_char - from_char + 1); }; string result(size, 0); generate_n(result.begin(), size, random_char); return result; }; } robot::robot() { reset(); } void robot::reset() { static set used_names; static const size_t name_capacity = pow('Z' - 'A' + 1, alpha_part_size) * pow('9' - '0' + 1, digit_part_size); string new_name; do { new_name = random_string(alpha_part_size, 'A', 'Z') + random_string(digit_part_size, '0', '9'); } while (used_names.size() < name_capacity && used_names.count(new_name)); used_names.erase(name_); name_ = new_name; used_names.insert(name_); } const name_t &robot::name() const { return name_; } }