Add some more averages to the html output

sql-rework
Tomasz Golinski 2020-07-05 23:30:51 +02:00
rodzic 0c511abb5e
commit 37f945c70a
5 zmienionych plików z 55 dodań i 3 usunięć

Wyświetl plik

@ -64,6 +64,10 @@ void Cache::set_date(const std::tm& t) {
std::strftime(tmp, 20, "%F", &date_tm);
date = tmp;
// this function should be run after set_date_hidden()
if (date_hidden_t == 0) throw 1;
age_when_found = (date_t - date_hidden_t) / (60*60*24);
}
void Cache::set_date_hidden(const std::tm& t) {

Wyświetl plik

@ -68,8 +68,8 @@ public:
std::string origin;
std::string owner;
std::string owner_uuid;
std::time_t date_t;
std::time_t date_hidden_t;
std::time_t date_t = 0;
std::time_t date_hidden_t = 0;
std::tm date_tm;
std::tm date_hidden_tm;
std::string year_month;
@ -80,6 +80,7 @@ public:
std::string day_of_week;
std::string date;
std::string date_hidden;
int age_when_found;
void set_date(const std::tm& t);
void set_date_hidden(const std::tm& t);

Wyświetl plik

@ -237,3 +237,29 @@ long int get_num(char c, char* opt) {
std::exit(EXIT_FAILURE);
}
}
void average_html(const Caches& cc, float Cache::*ptr, const std::string& caption) {
std::cout << "<div class=\"basic_stats\">\n";
std::cout << "Average " << caption << ": <span class=\"value\">" << average(cc, ptr) << "</span><br>\n";
std::cout << "</div>\n";
}
void average_html(const Caches& cc, int Cache::*ptr, const std::string& caption) {
std::cout << "<div class=\"basic_stats\">\n";
std::cout << "Average " << caption << ": <span class=\"value\">" << average(cc, ptr) << "</span><br>\n";
std::cout << "</div>\n";
}
float average(const Caches& cc, float Cache::*ptr) {
float count = 0;
for (auto el : cc)
count += el.*ptr;
return count / cc.size();
}
float average(const Caches& cc, int Cache::*ptr) {
int count = 0;
for (auto el : cc)
count += el.*ptr;
return (1.0 * count) / cc.size();
}

Wyświetl plik

@ -11,3 +11,8 @@ void show_nested_histogram(const Caches& cc, std::string Cache::*ptr, std::strin
int find_streak(const std::multimap<std::time_t, const Cache*>& cc, std::tm& start);
long int get_num(char c, char* opt);
void average_html(const Caches& cc, float Cache::*ptr, const std::string& caption);
void average_html(const Caches& cc, int Cache::*ptr, const std::string& caption);
float average(const Caches& cc, float Cache::*ptr);
float average(const Caches& cc, int Cache::*ptr);

Wyświetl plik

@ -504,6 +504,16 @@ int main(int argc, char** argv) {
}
std::cout << "</table>\n";
std::cout << "<div class=\"basic_stats\">\n";
std::cout << "Average age of cache at the moment of finding: <span class=\"value\">" << std::fixed << average(cc, &Cache::age_when_found) / 365 * 12 << "</span> months<br>\n";
std::cout << "Number of caches found within first 24h: <span class=\"value\">" << std::count_if(cc.begin(), cc.end(), [&](auto& a) { return a.age_when_found == 0; }) << "</span><br>\n";
std::cout << "Number of caches found within first 48h: <span class=\"value\">" << std::count_if(cc.begin(), cc.end(), [&](auto& a) { return a.age_when_found <= 1; }) << "</span><br>\n";
std::cout << "Number of caches found during first week: <span class=\"value\">" << std::count_if(cc.begin(), cc.end(), [&](auto& a) { return a.age_when_found < 7; }) << "</span><br>\n";
std::cout << "Number of caches found during first month: <span class=\"value\">" << std::count_if(cc.begin(), cc.end(), [&](auto& a) { return a.age_when_found < 30; }) << "</span><br>\n";
std::cout << "Number of caches found after more than 5 years: <span class=\"value\">" << std::count_if(cc.begin(), cc.end(), [&](auto& a) { return a.age_when_found > 365 * 5; }) << "</span><br>\n";
std::cout << "Number of caches found after more than 10 years: <span class=\"value\">" << std::count_if(cc.begin(), cc.end(), [&](auto& a) { return a.age_when_found > 365 * 10; }) << "</span><br>\n";
std::cout << "</div>\n";
n = 1;
std::cout << "<h2>Caches with most recommendations</h2>\n";
@ -529,6 +539,8 @@ int main(int argc, char** argv) {
}
std::cout << "</table>\n";
average_html(cc, &Cache::fav, "number of recommendations");
n = 1;
std::cout << "<h2>Caches with most recommendations (percentage)</h2>\n";
@ -577,6 +589,8 @@ int main(int argc, char** argv) {
}
std::cout << "</table>\n";
average_html(cc, &Cache::founds, "number of finds");
n = 1;
std::cout << "<h2>Caches with least finds</h2>\n";
@ -627,7 +641,9 @@ int main(int argc, char** argv) {
std::cout << "</table>\n";
std::cout << "<div class=\"basic_stats\">\n";
std::cout << "Total <span class=\"value\">" << n << "</span> combinations found out of 81 (" << std::setprecision(3) << n / 0.81 << "%).\n";
std::cout << "Total <span class=\"value\">" << n << "</span> combinations found out of 81 (" << std::setprecision(3) << n / 0.81 << "%).<br>\n";
std::cout << "Average difficulty: <span class=\"value\">" << average(cc, &Cache::diff) << "</span><br>\n";
std::cout << "Average terrain: <span class=\"value\">" << average(cc, &Cache::terr) << "</span><br>\n";
std::cout << "</div>\n";
// Days matrix