-
Notifications
You must be signed in to change notification settings - Fork 0
/
leitor_resultados.cpp
121 lines (97 loc) · 4.06 KB
/
leitor_resultados.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include <iostream>
#include <fstream>
#include <string>
#include <experimental/filesystem>
namespace fs = std::experimental::filesystem;
using namespace std;
// Compilar com -std=c++17 -lstdc++fs
int main(int argc, char *argv[])
{
string prefix = argv[1];
string path = argv[2];
string log_path = argv[3];
for (int i = 1; i <= 7; i++)
{
for (int j = 1; j <= 3; j++)
{
string ins_name = "prvr-" + to_string(i) + "-" + to_string(j) + ".ins";
string curr_ins = "prvr-" + to_string(i) + "-" + to_string(j) + "_" + prefix;
string nome_arquivo;
for (const auto &p : fs::directory_iterator(path))
{
nome_arquivo = p.path();
float tempo;
int custo;
if (nome_arquivo.find(curr_ins) != string::npos)
{
std::ifstream arquivo(nome_arquivo, ios::in);
int best_custo = INT32_MAX;
int sum_custo = 0;
float best_tempo = INT32_MAX;
float sum_tempo = 0;
float count = 0;
while (arquivo >> tempo)
{
arquivo >> custo;
if (tempo < best_tempo)
best_tempo = tempo;
if (custo < best_custo)
best_custo = custo;
count += 1;
sum_custo += custo;
sum_tempo += tempo;
}
// Para gerar coluna de tabela em LaTeX
// cout << "\\hline" << endl;
// cout << ins_name << " & " << best_custo << " & " << best_tempo << " & " << sum_custo / count << " & " << sum_tempo / count << "\\\\" << endl;
// cout << " & " << sum_custo / count << " & " << sum_tempo / count << endl;
cout << "============================" << endl;
cout << "Melhor custo:\t\t" << best_custo << endl;
cout << "Custo médio:\t\t" << sum_custo / count << endl;
cout << "Melhor tempo:\t\t" << best_tempo << endl;
cout << "Tempo médio:\t\t" << sum_tempo / count << endl;
arquivo.close();
}
}
int maior_intervalo = -1;
int maior_iteracao = -1;
int sum_intervalos = 0;
float count_intervalos = 0;
for (const auto &log : fs::directory_iterator(log_path))
{
int last_iter;
int curr_iter = -1;
float _tempo;
int _valor;
string nome_log = log.path();
if (nome_log.find(curr_ins) != string::npos)
{
std::ifstream arquivo_log(nome_log, ios::in);
last_iter = -1;
while (arquivo_log >> curr_iter)
{
arquivo_log >> _tempo;
arquivo_log >> _valor;
if (curr_iter > maior_iteracao)
maior_iteracao = curr_iter;
if (last_iter > 0)
{
count_intervalos += 1;
int diferenca = curr_iter - last_iter;
sum_intervalos += diferenca;
if (diferenca > maior_intervalo)
maior_intervalo = diferenca;
}
last_iter = curr_iter;
}
arquivo_log.close();
}
}
// Quando útil
// cout << "Maior iteração:\t\t" << maior_iteracao << endl;
// cout << "Maior intervalo:\t" << maior_intervalo << endl;
// cout << "Média intervalo:\t" << sum_intervalos / count_intervalos << endl;
}
}
return EXIT_SUCCESS;
}