PPL Assignment
IRM2015006
q7.cpp
Go to the documentation of this file.
1 
5 #include "../boys/allboys.h"
6 #include "../girls/allgirls.h"
7 #include "../gifts/gift.h"
8 #include "../couples/couple.h"
9 #include "../utils/read_data.h"
10 #include "../utils/couple_utils.h"
11 #include "../search/all_search.h"
12 #include "../utils/logger/logger.h"
13 
14 #include "../configs.h"
15 
16 #include <cstdlib>
17 #include <ctime>
18 
19 std::vector<std::string> getNamesToSearch(int nNames, int nBoys);
20 
21 int main(int argc, char **argv)
22 {
23  /* Search Methods:
24  * 1: linear search
25  * 2: binary search
26  * 3: hash search
27  */
28  int searchMethod = 1;
29  if (argc >= 2)
30  searchMethod = atoi(argv[1]);
31  Logger logger(LOG_FILE);
32 
33  std::vector<Boy*> boys = readAllBoys (BOY_FILE);
34  std::vector<Girl*> girls = readAllGirls(GIRL_FILE);
35  std::vector<Gift> gifts = readAllGifts(GIFT_FILE);
36 
37  logger.info("Processing for question 5", true);
38  logger.log("boys", std::to_string(boys.size()) + " record read", true);
39  logger.log("girls", std::to_string(girls.size()) + " record read", true);
40  logger.log("gifts", std::to_string(gifts.size()) + " record read", true);
41 
42  std::vector<Couple> couples = makeCouples(boys, girls, &logger);
43 
44  logger.log("couples", std::to_string(couples.size()) + " formed", true);
45 
46  Search *search;
47  switch (searchMethod) {
48  case 2:
49  search = new BinarySearch(boys);
50  break;
51  case 3:
52  search = new HashSearch(boys);
53  break;
54  case 1:
55  default:
56  search = new ArraySearch(boys);
57  break;
58  }
59 
60  int nBoys = boys.size();
61  std::vector<std::string> namelist = getNamesToSearch(nBoys/2, nBoys*1.5);
62  logger.info("Created list of boys to search for", true);
63 
64  for (auto name : namelist) {
65  std::cout << name << ' ';
66  }
67  std::cout << std::endl;
68 
69  search->findGirlfriends(namelist, &logger);
70 
71  return 0;
72 }
73 
75 std::vector<std::string> getNamesToSearch(int size, int nBoys)
76 {
77  std::vector< std::string > randomNames;
78  randomNames.clear();
79  std::srand(std::time(0));
80 
81  while (size--) {
82  randomNames.push_back("boy-"+std::to_string( std::rand()%nBoys ));
83  }
84  return randomNames;
85 }
Definition: search.h:11
int main(int argc, char **argv)
Definition: q7.cpp:21
std::vector< Gift > readAllGifts(std::string filename)
Definition: read_data.h:86
void info(const std::string msg, bool print=false)
Definition: logger.cpp:18
void log(const std::string type, const std::string msg, bool print=false)
Definition: logger.cpp:27
Definition: logger.h:8
#define BOY_FILE
Definition: configs.h:2
std::vector< Girl * > readAllGirls(std::string filename)
Definition: read_data.h:50
std::vector< std::string > getNamesToSearch(int nNames, int nBoys)
Definition: q7.cpp:75
std::vector< Boy * > readAllBoys(std::string filename)
Definition: read_data.h:14
#define LOG_FILE
Definition: configs.h:11
std::vector< Couple > makeCouples(int k, std::vector< Boy * >, std::vector< Girl * >, Logger *logger)
Definition: q10.cpp:51
#define GIFT_FILE
Definition: configs.h:8
#define GIRL_FILE
Definition: configs.h:5
virtual void findGirlfriends(std::vector< std::string > namelist, Logger *logger)=0