#include #include #include const std::string symbols = "ABCDEFGHIJKLMNOPQRSTUVWXYZ!?@*"; int main(int argc, char *argv[]) { if (argc != 5) { std::cerr << "Usage: " << argv[0] << " n min max seed" << std::endl; return 1; } unsigned n = atoi(argv[1]); int min = atoi(argv[2]); int max = atoi(argv[3]); int seed = atoi(argv[4]) * n; std::mt19937 twister(seed); std::uniform_int_distribution values(min, max); std::uniform_int_distribution chars(0, n - 1); std::vector used(n); for (unsigned i = 0; i < n; ++i) { int index; do { index = chars(twister); } while (used[index]); used[index] = true; std::cout << symbols[index]; } std::cout << "\n"; for (unsigned row = 0; row < n; ++row) { for (unsigned col = row; col < n; ++col) { if (col != row) std::cout << " "; std::cout << values(twister); } std::cout << "\n"; } return 0; }