diff --git a/.gitignore b/.gitignore index 6a8bc10..a252518 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ .vscode -build \ No newline at end of file +build +.DS_Store +uwu2x-large.sql +uwu2x-large.db \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 5c51623..70c1559 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,7 +28,7 @@ FetchContent_MakeAvailable(sqlite3pp) file(GLOB SOURCES src/*.cpp) add_executable(${PROJECT_NAME} ${SOURCES}) -set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 14) +set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 17) target_include_directories(${PROJECT_NAME} PUBLIC include ${sqlite3pp_SOURCE_DIR}/headeronly_src diff --git a/src/main.cpp b/src/main.cpp index f04cf91..f42a6b3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,33 +1,60 @@ #include +#include +#include #include #include #include #include "sqlite3pp.h" -using namespace std; - int main(int argc, char const *argv[]) { - chrono::steady_clock::time_point begin = std::chrono::steady_clock::now(); + auto begin = std::chrono::steady_clock::now(); sqlite3pp::database db("../uwu2x.db"); + sqlite3pp::query q(db, "SELECT DISTINCT identifier, strftime('%Y-%m-%d', date) FROM interaction ORDER BY date ASC;"); - sqlite3pp::query qry(db, "SELECT identifier FROM interaction;"); + std::vector> interactions; - set identifiers; - - for (auto v : qry) { - string identifier; - v.getter() >> identifier; - identifiers.insert(identifier); + for (auto r : q) + { + std::string identifier, date; + r.getter() >> identifier >> date; + interactions.emplace_back(std::vector{identifier, date}); } - cout << identifiers.size() << " users" << endl; + std::cout << interactions.size() << std::endl; - std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); - - cout << chrono::duration_cast(end - begin).count() << "ms elasped" << endl; + std::set identifiers; + std::map> activity; + + for (size_t i = 0; i < interactions.size(); ++i) + { + const std::string &identifier = interactions[i][0]; + const std::string &date = interactions[i][1]; + + if (activity.find(date) == activity.end()) + { + activity[date]["u"] = 0; + activity[date]["n"] = 0; + } + + activity[date]["u"] += 1; + if (identifiers.find(identifier) == identifiers.end()) + { + activity[date]["n"] += 1; + identifiers.insert(identifier); + } + } + + for (const auto &[key, val] : activity) + { + std::cout << key << " : u=" << val.at("u") << " n=" << val.at("n") << std::endl; + } + + auto end = std::chrono::steady_clock::now(); + + std::cout << std::chrono::duration_cast(end - begin).count() << "ms elapsed" << std::endl; return 0; }