| 18 | #include <iostream> |
| 19 | |
| 20 | std::string |
| 21 | create_random_string(bool is_full) { |
| 22 | const std::vector<std::string> level1 = {"a", "b", "c"}; |
| 23 | const std::vector<std::string> level2 = {"d", "e"}; |
| 24 | const std::vector<std::string> level3 = {"f", "g", "h"}; |
| 25 | |
| 26 | std::random_device rd; |
| 27 | std::mt19937 mt(rd()); |
| 28 | std::uniform_int_distribution<> distr; |
| 29 | |
| 30 | std::vector<std::string> selected_levels; |
| 31 | |
| 32 | if (is_full) { |
| 33 | selected_levels.push_back(level1[distr(mt) % level1.size()]); |
| 34 | selected_levels.push_back(level2[distr(mt) % level2.size()]); |
| 35 | selected_levels.push_back(level3[distr(mt) % level3.size()]); |
| 36 | } else { |
| 37 | std::uniform_int_distribution<> dist(1, 3); |
| 38 | int num_levels = dist(mt); |
| 39 | |
| 40 | if (num_levels >= 1) { |
| 41 | selected_levels.emplace_back(level1[distr(mt) % level1.size()]); |
| 42 | } |
| 43 | if (num_levels >= 2) { |
| 44 | selected_levels.emplace_back(level2[distr(mt) % level2.size()]); |
| 45 | } |
| 46 | if (num_levels == 3) { |
| 47 | selected_levels.emplace_back(level3[distr(mt) % level3.size()]); |
| 48 | } |
| 49 | } |
| 50 | |
| 51 | std::string random_string = selected_levels.empty() ? "" : selected_levels[0]; |
| 52 | for (size_t i = 1; i < selected_levels.size(); ++i) { |
| 53 | random_string += "/" + selected_levels[i]; |
| 54 | } |
| 55 | |
| 56 | return random_string; |
| 57 | } |
| 58 | |
| 59 | int |
| 60 | main(int argc, char** argv) { |