From 643e5f7c88348ae19136e101d0b9a3214c1ebd3d Mon Sep 17 00:00:00 2001 From: Luca Lombardo Date: Sun, 18 Dec 2022 00:36:47 +0100 Subject: [PATCH] deprecated, found a new solution since C++ is not ammissible for the exam --- bob | Bin 0 -> 104200 bytes ...e_builder.cpp => create_checkins_graph.cpp | 54 +++++++++--------- 2 files changed, 26 insertions(+), 28 deletions(-) create mode 100755 bob rename bob_the_builder.cpp => create_checkins_graph.cpp (74%) diff --git a/bob b/bob new file mode 100755 index 0000000000000000000000000000000000000000..cc0ba9e325412f6e6733686afb07a172d53e68e2 GIT binary patch literal 104200 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≥0i>`WH`(_rg-nr}x7!)Mg02a)rRAK;HI*Q)<6 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 createDictFromFile(string filename) { // Return the dictionary return dict; - } +} // void create_tsv_multi(unordered_map> dict, mutex& dict_mutex) { // // Create an output stream to write the file @@ -67,15 +67,14 @@ unordered_map> createDictFromFile(string filename) { // } // } -void create_tsv(unordered_map> dict) { +void create_tsv(const unordered_map>& dict, string outfilename) { // Create an output stream to write the file - ofstream out_file("data/foursquare/foursquareTKY_checkins_graph.tsv"); + ofstream out_file(outfilename); // Loop over all the key-value pairs in the map unsigned long long i = 0; for (const auto& kv1 : dict) { - i++; - if (i%100 == 0) cout << (((double)i) * 100 / dict.size()) << "%" << "\r" << flush; + if (!((++i) & 127)) cout << (((double)i) * 100 / dict.size()) << "%\r" << flush; for (const auto& kv2 : dict) { // Check if the keys are the same @@ -95,30 +94,29 @@ void create_tsv(unordered_map> dict) { } void print_help() { - cout << "Usage: ./main [IN_FILE] [OUT_FILE]" << endl; -} - -int main() { - unordered_map> dict = createDictFromFile("data/foursquare/foursquare_checkins_TKY.txt"); - create_tsv(dict); + cout << "Usage: ./main IN_FILE_PATH OUT_FILE_PATH" << endl; + cout << "Suggested options: \n\t./main data/brightkite/brightkite_checkins.txt data/brightkite/brightkite_checkins_graph.tsv \n\t./main data/gowalla/gowalla_checkins.txt data/gowalla/gowalla_checkins_graph.tsv \n\t./main data/foursquare/foursquare_checkins.txt data/foursquare/foursquare_checkins_graph.tsv" << endl; } - - -// int main(int argc, const char* argv[]) { - -// if (argc == 3) { -// string in_file = argv[1]; -// string out_file = argv[2]; -// if (in_file == "-h" || in_file == "--help" || out_file == "-h" || out_file == "--help") { -// print_help(); -// return 0; -// } -// } else { -// print_help(); -// return 0; -// } -// unordered_map> dict = createDictFromFile("test.txt"); +// int main() { +// unordered_map> dict = createDictFromFile("data/foursquare/foursquare_checkins_TKY.txt"); // create_tsv(dict); - // } + +int main(int argc, const char* argv[]) { + + if (argc == 3) { + string in_file = argv[1]; + string out_file = argv[2]; + if (in_file == "-h" || in_file == "--help" || out_file == "-h" || out_file == "--help") { + print_help(); + return 0; + } + unordered_map> dict = createDictFromFile(in_file); + create_tsv(dict, out_file); + return 0; + } else { + print_help(); + return 0; + } +}