From 9649aa630119369e5bf114efac103e9b05710e55 Mon Sep 17 00:00:00 2001 From: lzwdgc Date: Tue, 6 Oct 2015 12:14:36 +0300 Subject: [PATCH] Add simple banlist. --- src/name_generator/name_generator.cpp | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/name_generator/name_generator.cpp b/src/name_generator/name_generator.cpp index 9e9878d..93cedf9 100644 --- a/src/name_generator/name_generator.cpp +++ b/src/name_generator/name_generator.cpp @@ -35,11 +35,12 @@ public: { static const std::string consonants = "bcdfghjklmnpqrstvwxz"; static const std::string vowels = "aeiouy"; - std::uniform_int_distribution<> c_distr(0, consonants.size() - 1); - std::uniform_int_distribution<> v_distr(0, vowels.size() - 1); - std::uniform_int_distribution<> cv_distr(0, 1); - auto n_syllables = std::uniform_int_distribution<>(sylmin, sylmax)(rng); - std::uniform_int_distribution<> let_distr(letmin, letmax); + using dist = std::uniform_int_distribution<>; + dist c_distr(0, consonants.size() - 1); + dist v_distr(0, vowels.size() - 1); + dist cv_distr(0, 1); + dist let_distr(letmin, letmax); + auto n_syllables = dist(sylmin, sylmax)(rng); std::string name; for (int s = 0; s < n_syllables; s++) { @@ -55,21 +56,30 @@ public: } if (n_consonants == n_letters) { - auto pos = std::uniform_int_distribution<>(0, n_letters - 1)(rng); + auto pos = dist(0, n_letters - 1)(rng); syllable[pos] = vowels[v_distr(rng)]; } else if (n_vowels == n_letters) { - auto pos = std::uniform_int_distribution<>(0, n_letters - 1)(rng); + auto pos = dist(0, n_letters - 1)(rng); syllable[pos] = consonants[c_distr(rng)]; } name += syllable; } - return name; + return check_name(name) ? name : generate(sylmin, sylmax); } private: std::mt19937 rng; + + bool check_name(const std::string &name) const + { + auto banned = { "hu", "piz", "eb", "bl", "mu" }; + for (auto &b : banned) + if (name.find(b) != std::string::npos) + return false; + return true; + } }; int main()