From 287152896a848c68bd6d4d8b4d7f57b01c7af1c4 Mon Sep 17 00:00:00 2001 From: Dmitry Kokorin Date: Sun, 6 Mar 2016 18:31:50 +0300 Subject: [PATCH] robot_name: iteration 2 --- cpp/robot-name/robot_name.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/cpp/robot-name/robot_name.cpp b/cpp/robot-name/robot_name.cpp index fb97ad6..a22660a 100644 --- a/cpp/robot-name/robot_name.cpp +++ b/cpp/robot-name/robot_name.cpp @@ -1,6 +1,7 @@ #include "robot_name.h" #include +#include namespace robot_name { @@ -13,6 +14,7 @@ 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 { @@ -35,8 +37,21 @@ robot::robot() void robot::reset() { - name_ = random_string(alpha_part_size, 'A', 'Z') - + random_string(digit_part_size, '0', '9'); + 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