37 return boyHapp + girlHapp;
50 if (giftsList.empty())
return;
73 for (
auto it = giftsList.begin(); it != giftsList.end() && expenseLimit > 0; it++) {
74 expenseLimit -= (*it).price;
84 logger->
log(
"Budget",
boy->
name+
" raised his budget to "+ std::to_string(
boy->
budget),
true);
92 if (! giftsList.empty())
93 gifts.push_back(giftsList[0]);
103 if (giftsList.empty())
return;
111 std::vector<Gift> essentialGifts (giftsList.size());
112 std::vector<Gift> luxuryGifts (giftsList.size());
113 std::vector<Gift> utilityGifts (giftsList.size());
115 auto it = std::copy_if (giftsList.begin(), giftsList.end(), essentialGifts.begin(), [](
Gift g) {
return (g.type !=
luxury) && (g.type !=
utility); });
116 essentialGifts.resize(std::distance(essentialGifts.begin(), it));
117 it = std::copy_if (giftsList.begin(), giftsList.end(), luxuryGifts.begin(), [](
Gift g) {
return (g.type !=
essential) && (g.type !=
utility); });
118 luxuryGifts.resize(std::distance(luxuryGifts.begin(), it));
119 it = std::copy_if (giftsList.begin(), giftsList.end(), utilityGifts.begin(), [](
Gift g) {
return (g.type !=
luxury) && (g.type !=
essential); });
120 utilityGifts.resize(std::distance(utilityGifts.begin(), it));
122 if (essentialGifts.size() == 1 || luxuryGifts.size() == 1 || utilityGifts.size() == 1) {
123 logger->
log(
"critical",
"There is one gift possible for each type",
true);
127 gifts.push_back(essentialGifts[0]);
gifts.push_back(luxuryGifts[0]);
gifts.push_back(utilityGifts[0]);
128 logger->
log(
"Gift",
boy->
name+
" has money of value "+std::to_string(expenseLimit),
true);
129 logger->
log(
"Gift",
boy->
name+
" gifted "+ essentialGifts[0].name +
" & " + luxuryGifts[0].name +
" & " + utilityGifts[0].name +
" to "+
girl->
name,
true);
131 expenseLimit -= g.price;
133 logger->
log(
"Gift",
boy->
name+
" is left with "+std::to_string(expenseLimit),
true);
136 int ess_pos = 1, lux_pos = 1, uti_pos = 1;
137 int ess_last = essentialGifts.size(), lux_last = luxuryGifts.size(), uti_last = utilityGifts.size();
138 while (expenseLimit > 0) {
139 if (ess_pos < ess_last) {
140 gifts.push_back(essentialGifts[ess_pos]);
141 expenseLimit -= essentialGifts[ess_pos].price;
142 logger->
log(
"Gift",
boy->
name+
" gifted "+ essentialGifts[ess_pos].name +
" to "+
girl->
name,
true);
145 }
else if (lux_pos < lux_last) {
146 gifts.push_back(luxuryGifts[lux_pos]);
147 expenseLimit -= luxuryGifts[lux_pos].price;
148 logger->
log(
"Gift",
boy->
name+
" gifted "+ luxuryGifts[lux_pos].name +
" to "+
girl->
name,
true);
151 }
else if (uti_pos < uti_last) {
152 gifts.push_back(utilityGifts[uti_pos]);
153 expenseLimit -= utilityGifts[uti_pos].price;
154 logger->
log(
"Gift",
boy->
name+
" gifted " + utilityGifts[uti_pos].name +
" to "+
girl->
name,
true);
void makeCouple(Girl *girl)
void makeGiftBasket(std::vector< Gift > giftlist, Logger *logger)
void log(const std::string type, const std::string msg, bool print=false)
float findCompatibility()
virtual float getHappiness()=0
bool compareOnPriceAsc(Gift g1, Gift g2)
virtual float getHappiness()=0
void makeCouple(Boy *boy)
void makeGiftBasket2(std::vector< Gift > giftlist, Logger *logger)
virtual BoyNature getNature()=0
bool compareOnPriceDesc(Gift g1, Gift g2)
std::vector< Gift > gifts
void setGiftBasket(std::vector< Gift > *gifts)
void setGiftBasket(std::vector< Gift > *gifts)
bool giftRemovalPred(Gift g)
bool compareOnHappiness(Couple c1, Couple c2)
bool compareOnCompatibility(Couple c1, Couple c2)