From 77c36f8e104a9c2e4fab666a763d444cf556732c Mon Sep 17 00:00:00 2001 From: Dmitry Kokorin Date: Sun, 6 Mar 2016 19:38:58 +0300 Subject: [PATCH] robot_name: rand() -> c++11 random --- cpp/robot-name/robot_name.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/cpp/robot-name/robot_name.cpp b/cpp/robot-name/robot_name.cpp index a22660a..5b79010 100644 --- a/cpp/robot-name/robot_name.cpp +++ b/cpp/robot-name/robot_name.cpp @@ -2,6 +2,7 @@ #include #include +#include namespace robot_name { @@ -11,14 +12,18 @@ using namespace std; namespace { +typedef uniform_int_distribution distribution_t; + 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) +string random_string(size_t size, distribution_t &distribution) { - auto random_char = [from_char, to_char]() -> char { - return from_char + rand() % (to_char - from_char + 1); + static default_random_engine engine; + + auto random_char = [&distribution]() -> char { + return distribution(engine); }; string result(size, 0); @@ -40,12 +45,16 @@ 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); + + static distribution_t alpha_distribution('A', 'Z'); + static distribution_t digit_distribution('0', '9'); + string new_name; do { - new_name = random_string(alpha_part_size, 'A', 'Z') - + random_string(digit_part_size, '0', '9'); + new_name = random_string(alpha_part_size, alpha_distribution) + + random_string(digit_part_size, digit_distribution); } while (used_names.size() < name_capacity && used_names.count(new_name));