Add simple banlist.

This commit is contained in:
lzwdgc 2015-10-06 12:14:36 +03:00
parent 795a9a374c
commit 9649aa6301

View file

@ -35,11 +35,12 @@ public:
{ {
static const std::string consonants = "bcdfghjklmnpqrstvwxz"; static const std::string consonants = "bcdfghjklmnpqrstvwxz";
static const std::string vowels = "aeiouy"; static const std::string vowels = "aeiouy";
std::uniform_int_distribution<> c_distr(0, consonants.size() - 1); using dist = std::uniform_int_distribution<>;
std::uniform_int_distribution<> v_distr(0, vowels.size() - 1); dist c_distr(0, consonants.size() - 1);
std::uniform_int_distribution<> cv_distr(0, 1); dist v_distr(0, vowels.size() - 1);
auto n_syllables = std::uniform_int_distribution<>(sylmin, sylmax)(rng); dist cv_distr(0, 1);
std::uniform_int_distribution<> let_distr(letmin, letmax); dist let_distr(letmin, letmax);
auto n_syllables = dist(sylmin, sylmax)(rng);
std::string name; std::string name;
for (int s = 0; s < n_syllables; s++) for (int s = 0; s < n_syllables; s++)
{ {
@ -55,21 +56,30 @@ public:
} }
if (n_consonants == n_letters) 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)]; syllable[pos] = vowels[v_distr(rng)];
} }
else if (n_vowels == n_letters) 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)]; syllable[pos] = consonants[c_distr(rng)];
} }
name += syllable; name += syllable;
} }
return name; return check_name(name) ? name : generate(sylmin, sylmax);
} }
private: private:
std::mt19937 rng; 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() int main()