PPL Assignment
IRM2015006
q6.cpp
Go to the documentation of this file.
1 
4 #include "../boys/allboys.h"
5 #include "../girls/allgirls.h"
6 #include "../gifts/gift.h"
7 #include "../couples/couple.h"
8 #include "../utils/read_data.h"
9 #include "../utils/couple_utils.h"
10 #include "../utils/logger/logger.h"
11 
12 #include "../configs.h"
13 
14 
15 int main(int argc, char **argv)
16 {
17  int t = T;
18  if (argc >= 2)
19  t = atoi(argv[1]);
20  Logger logger(LOG_FILE);
21 
22  std::vector<Boy*> boys = readAllBoys(BOY_FILE);
23  std::vector<Girl*> girls = readAllGirls(GIRL_FILE);
24  std::vector<Gift> gifts = readAllGifts(GIFT_FILE);
25 
26  logger.info("Processing for question 6", true);
27  logger.log("boys", std::to_string(boys.size()) + " record read", true);
28  logger.log("girls", std::to_string(girls.size()) + " record read", true);
29  logger.log("gifts", std::to_string(gifts.size()) + " record read", true);
30 
31  std::vector<Couple> couples = makeCouples(boys, girls, &logger);
32 
33  logger.log("couples", std::to_string(couples.size()) + " formed", true);
34 
35  logger.info("Couples list", true);
36  for (int i = 0; i < (int)couples.size(); i++)
37  logger.log("couple"+std::to_string(i+1),
38  couples[i].boy->name+" and "+couples[i].girl->name, true);
39 
40  for (int i = 0; i < t; i++) {
41  logger.info("Performing breakup for t = "+std::to_string(i+1), true);
42  performGifting(&couples, &gifts, &logger);
43  std::vector<Couple> unhappyOnes = getCouplesWithHappinessLessThan(couples, t);
44  performBreakupOnHappinessAndPairAgain(unhappyOnes, &couples, &boys, &girls, t, &logger);
45  logger.info("couples with happiness less than "+std::to_string(t), true);
46  for (int i = 0; i < (int)unhappyOnes.size(); i++)
47  logger.log("couple"+std::to_string(i+1),
48  unhappyOnes[i].boy->name+" and "+unhappyOnes[i].girl->name, true);
49  }
50 
51  return 0;
52 }
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
const int T
Definition: configs.h:17
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
void performBreakupOnHappinessAndPairAgain(std::vector< Couple > sadCouples, std::vector< Couple > *couples, std::vector< Boy * > *boys, std::vector< Girl * > *girls, int t, Logger *logger)
Definition: couple_utils.h:252
std::vector< Girl * > readAllGirls(std::string filename)
Definition: read_data.h:50
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
void performGifting(int k, std::vector< Couple > *couples, std::vector< Gift > *giftlist, Logger *logger)
Definition: q10.cpp:94
#define GIRL_FILE
Definition: configs.h:5
std::vector< Couple > getCouplesWithHappinessLessThan(std::vector< Couple >couples, int t)
Definition: couple_utils.h:178
int main(int argc, char **argv)
Definition: q6.cpp:15