Skip to content

Commit a0eee5d

Browse files
committed
Modify generator
1 parent 43c0606 commit a0eee5d

File tree

1 file changed

+61
-21
lines changed

1 file changed

+61
-21
lines changed

battle_royal/tests/generator.cpp

Lines changed: 61 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,41 +6,81 @@
66
#include "constraints.h"
77
using namespace std;
88

9-
double normal(double mu, double sigma) {
10-
const double PI = acos(-1);
11-
double z = sqrt(-2.0*log(rnd.next(1.0))) * sin(2.0 * PI * rnd.next(1.0));
12-
return mu + z * sigma;
9+
vector<int> random_case(int kill_sum, int killers) {
10+
int remain = kill_sum - killers;
11+
vector<int> K(PLAYERS);
12+
for(int i = 0; i < killers; i++) K[i] = 1;
13+
for(int i = 0; i < remain; i++) {
14+
K[rnd.next(killers)]++;
15+
}
16+
shuffle(K.begin(), K.end());
17+
return K;
1318
}
1419

15-
void generate(const string &name, int T) {
16-
ofstream ofs(name);
20+
vector<int> no_kill_case() {
21+
vector<int> K(PLAYERS);
22+
return K;
23+
}
1724

18-
ofs << T << endl;
25+
void write_data_set(const string &name, vector< vector<int> > &data_set) {
26+
int T = data_set.size();
27+
ofstream ofs(name);
28+
ofs << T << "\n";
1929
for(int t = 0; t < T; t++) {
20-
int K[PLAYERS];
21-
int remain = PLAYERS - 1;
22-
double mu = rnd.next(1.0, 5.0);
23-
double sigma = rnd.next(0.0, 5.0);
2430
for(int i = 0; i < PLAYERS; i++) {
25-
K[i] = min(max((int) normal(mu, sigma), 0), remain);
26-
remain -= K[i];
31+
ofs << data_set[t][i] << (i + 1 != PLAYERS ? " " : "\n");
2732
}
33+
}
34+
}
2835

29-
random_device seed_gen;
30-
mt19937 engine(seed_gen());
31-
shuffle(K, K + PLAYERS, engine);
36+
void generate_small() {
37+
vector< vector<int> > data_set;
38+
data_set.push_back(random_case(32, 15));
39+
data_set.push_back(random_case(54, 3));
40+
data_set.push_back(random_case(82, 10));
41+
data_set.push_back(random_case(98, 87));
42+
data_set.push_back(random_case(77, 2));
43+
data_set.push_back(no_kill_case());
44+
write_data_set("small.in", data_set);
45+
}
3246

33-
for(int i = 0; i < PLAYERS; i++) {
34-
ofs << K[i] << (i + 1 != PLAYERS ? " " : "\n");
35-
}
47+
void generate_large() {
48+
vector< vector<int> > data_set;
49+
for(int t = 0; t < 90; t++) {
50+
int kill_sum = rnd.next(PLAYERS - 2) + 1;
51+
int killers = rnd.next(kill_sum) + 1;
52+
data_set.push_back(random_case(kill_sum, killers));
53+
}
54+
data_set.push_back(random_case(32, 15));
55+
data_set.push_back(random_case(54, 3));
56+
data_set.push_back(random_case(82, 10));
57+
data_set.push_back(random_case(98, 87));
58+
data_set.push_back(random_case(77, 2));
59+
data_set.push_back(random_case(99, 99));
60+
data_set.push_back(random_case(99, 1));
61+
data_set.push_back(random_case(5, 4));
62+
data_set.push_back(random_case(42, 7));
63+
data_set.push_back(no_kill_case());
64+
shuffle(data_set.begin(), data_set.end());
65+
write_data_set("large.in", data_set);
66+
}
67+
68+
void generate(const string &name, int T) {
69+
vector< vector<int> > data_set;
70+
for(int t = 0; t < T; t++) {
71+
int kill_sum = rnd.next(PLAYERS - 2) + 1;
72+
int killers = rnd.next(kill_sum) + 1;
73+
data_set.push_back(random_case(kill_sum, killers));
3674
}
75+
shuffle(data_set.begin(), data_set.end());
76+
write_data_set(name, data_set);
3777
}
3878

3979
int main(int argc, char* argv[]) {
4080
registerGen(argc, argv, 1);
4181

42-
generate("small.in", 10);
43-
generate("large.in", MAX_T);
82+
generate_small();
83+
generate_large();
4484

4585
for(int i = 0; i < 10; i++) {
4686
generate("random_test" + to_string(i) + ".in", MAX_T);

0 commit comments

Comments
 (0)