kopia lustrzana https://gitlab.com/tomaszg/geostat
Add some more averages to the html output
rodzic
0c511abb5e
commit
37f945c70a
|
@ -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) {
|
||||
|
|
5
cache.h
5
cache.h
|
@ -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);
|
||||
|
|
26
common.cpp
26
common.cpp
|
@ -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();
|
||||
}
|
||||
|
|
5
common.h
5
common.h
|
@ -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);
|
||||
|
|
18
geostat.cpp
18
geostat.cpp
|
@ -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
|
||||
|
|
Ładowanie…
Reference in New Issue