robot_name: iteration 2
This commit is contained in:
parent
7339e6a8bc
commit
287152896a
1 changed files with 17 additions and 2 deletions
|
|
@ -1,6 +1,7 @@
|
||||||
#include "robot_name.h"
|
#include "robot_name.h"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <set>
|
||||||
|
|
||||||
|
|
||||||
namespace robot_name {
|
namespace robot_name {
|
||||||
|
|
@ -13,6 +14,7 @@ namespace {
|
||||||
const size_t alpha_part_size = 2;
|
const size_t alpha_part_size = 2;
|
||||||
const size_t digit_part_size = 3;
|
const size_t digit_part_size = 3;
|
||||||
|
|
||||||
|
|
||||||
string random_string(size_t size, char from_char, char to_char)
|
string random_string(size_t size, char from_char, char to_char)
|
||||||
{
|
{
|
||||||
auto random_char = [from_char, to_char]() -> char {
|
auto random_char = [from_char, to_char]() -> char {
|
||||||
|
|
@ -35,8 +37,21 @@ robot::robot()
|
||||||
|
|
||||||
void robot::reset()
|
void robot::reset()
|
||||||
{
|
{
|
||||||
name_ = random_string(alpha_part_size, 'A', 'Z')
|
static set<name_t> 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');
|
+ 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
|
const name_t &robot::name() const
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue