#include #include #include #include #include #include #include "Structures.h" #include "ParseTest.h" #include "util.h" #include "Algorithms.h" using namespace std; class GenerateProbeRatings { public: GenerateProbeRatings() { } void initialize(vector& entries, bool isProbe) { } void processMovieRatings(int movieId, vector& entries) { std::copy(entries.begin(), entries.end(), back_inserter(entriesMap[movieId])); entries.clear(); } char getRating(const Entry& e) { vector::const_iterator it; it = std::find_if(entriesMap[e.getMovieId()].begin(), entriesMap[e.getMovieId()].end(), ResultComparator(e)); if (it != entriesMap[e.getMovieId()].end()) { return it->getRating(); } else { cout << "Couldn't find entry for " << e << endl; abort(); } } void postProcess(vector& entries) { ofstream outFile(probeResultsFileName.c_str()); ifstream inFile(probeFileName.c_str()); string line; getline(inFile, line); int movieId; bool changedId; while (!inFile.eof()) { Entry e = parseChallengeLine(line, movieId, changedId, false); if (changedId) { outFile << movieId << ":" << endl; } else { outFile << (int) getRating(e) << endl; } getline(inFile, line); } } std::map > entriesMap; }; int main() { vector entries; bool doProbe = true; ProcessorWrapper processor(entries, doProbe); cout << "sizeof(Entry) is " << sizeof(Entry) << endl; //entries.reserve(100480507); std::map > probeEntriesMap; if (doProbe) { appendEntriesFromProbeFile(probeEntriesMap); } for (int i = 1; i <= numMovies; i++) { if (i % 250 == 0) { cout << "Working on movie " << i << " - got " << entries.size() << " entries so far" << endl; } appendEntriesFromMovieFile(i, entries, true); if (doProbe) { filterEntries(entries, probeEntriesMap); } processor.processMovieRatings(i, entries); } processor.postProcess(entries); return 0; }