Test generator

Revision en3, by rustam-cpp, 2024-03-14 16:31:48

Hello, CodeForces!

Information

I have written a test generator in C++. It is very simple, it contains 2 functions: "generate a random number between $$$a$$$ and $$$b$$$, so that this random number is a multiple of $$$k$$$" (function: genint(a, b, k, add), where add is whether to "add" this number to the test) and "generate of a random string". There's something to be written here.

  • Generates a string of random length between $$$a$$$ and $$$b$$$, so that it is a multiple of $$$k$$$.
  • Consisting of the given characters. You can set characters in two ways: write the interval ("a-f", "x-z") or a individual character ("m", "o"). (function: genstr(a, b, k, pattern, add), where pattern is an array of given intervals or individual characters).

Usage

Есть такая задача: Вам дана строка состоящая из $$$n (n \le 10^5)$$$ символов. Вам требуется процент содержания (с точностью до $$$10^{-5}$$$) каждого символа, который есть в строке. Пример ввода и вывода:

Example

Вам требуется обработать $$$t$$$ наборов входных данных

Для нас, участников соревнования, эта задача очень проста, но для составителей надо написать такие тесты, в которых будут и крайние и обычные случаи. Писать это вручную — плохой вариант. Тем более, что $$$n \le 10^5$$$

С помощью моего генератора можно сделать хорошие тесты в несколько строк:

const int mintestcases = 5;
const int maxtestcases = 8;
const int minlength = 10;
const int maxlength = 20;
for (int i = 0; i < 5; i++) { // generates 5 tests
  string test = "";
  int t = genint(mintestcases, maxtestcases, 1, true);
  test += '\n';
  for (int j = 0; j < t; j++) {
    int n = genint(minlength, maxlength, 5, true);
    test += '\n';
    genstr(n, n, 1, {"a-z"}, true);
    test += '\n';
  }
}
Tests

Чтобы сделать большие тесты надо увеличить значения mintestcases, maxtestcases, minlength, maxlength. Для претестов можно взять по 1-2 тесту каждого "размера".

Можно генерировать строки состоящие из заглавных букв: genstr(10, 20, 5, {"A-D"}, true), результат: DCABACCCABBBDBD

Можно и сгенерировать строку состоящую из строчных и заглавных букв: genstr(10, 20, 5, {"A-D", "a-d"}, true), результат: DcaBaccCABBBDBD

Заключение

Этот генератор подойдет и для стресс тестирования. Генерировать тесты в задаче обычно не очень сложно. Подойдет он и для взломов. Можно очень легко сгенерировать "максимальный" тест.

Всем удачных раундов и высокого рейтинга, пока!

Tags test generator

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
ru10 Russian rustam-cpp 2024-03-14 17:56:58 22 Мелкая правка: 'in() {\n // gen' -> 'in() {\n srand(time(NULL));\n // gen'
en10 English rustam-cpp 2024-03-14 17:56:42 22 Tiny change: 'in() {\n // gen' -> 'in() {\n srand(time(NULL));\n // gen'
en9 English rustam-cpp 2024-03-14 17:31:34 2 Tiny change: 'generator in C++. It ' -> 'generator on C++. It '
en8 English rustam-cpp 2024-03-14 17:30:47 9 Tiny change: 'on**\n\nI have written a test ge' -> 'on**\n\nI wrote a test ge'
ru9 Russian rustam-cpp 2024-03-14 17:27:52 0 (опубликовано)
en7 English rustam-cpp 2024-03-14 17:27:34 0 (published)
en6 English rustam-cpp 2024-03-14 17:27:04 7
ru8 Russian rustam-cpp 2024-03-14 17:26:57 7
en5 English rustam-cpp 2024-03-14 17:21:58 1012
ru7 Russian rustam-cpp 2024-03-14 17:21:31 1011
en4 English rustam-cpp 2024-03-14 17:03:03 1751
en3 English rustam-cpp 2024-03-14 16:31:48 13 Tiny change: ' summary="Пример">\n\n~~~~' -> ' summary="Example">\n\n~~~~'
en2 English rustam-cpp 2024-03-14 16:29:54 914
en1 English rustam-cpp 2024-03-14 16:29:28 3377 Initial revision for English translation (saved to drafts)
ru6 Russian rustam-cpp 2024-03-14 16:26:59 182
ru5 Russian rustam-cpp 2024-03-14 16:21:36 353
ru4 Russian rustam-cpp 2024-03-14 16:11:38 824
ru3 Russian rustam-cpp 2024-03-14 16:06:11 1898 Мелкая правка: 'ью до $10^-3$) каждого' -> 'ью до $10^{-3}$) каждого'
ru2 Russian rustam-cpp 2024-03-14 15:52:01 83 Мелкая правка: '======\n\nЯ написал свой генератор тестов.\n\n**Всем' -> '======\n\n\n\n**Всем'
ru1 Russian rustam-cpp 2024-03-14 15:49:08 55 Первая редакция (сохранено в черновиках)