#include <iostream>
#include <unordered_map>
#include <string>
class PrivateMarket
{
public:
int64_t m_troops_cost{ 0 };
int64_t m_jets_cost{ 0 };
int64_t m_turrets_cost{ 0 };
int64_t m_tanks_cost{ 0 };
int64_t m_troops_available{ 0 };
int64_t m_jets_available{ 0 };
int64_t m_turrets_available{ 0 };
int64_t m_tanks_available{ 0 };
PrivateMarket(std::unordered_map<std::string, int64_t>&);
void convertOilToUnits(int64_t);
int64_t bushelsNeededForAvailableUnits();
int64_t calculateNetworth();
};
PrivateMarket::PrivateMarket(std::unordered_map<std::string, int64_t>& units)
: m_troops_cost{ units["troops_cost"] }
, m_jets_cost{ units["jets_cost"] }
, m_turrets_cost{ units["turrets_cost"] }
, m_tanks_cost{ units["tanks_cost"] }
{}
void PrivateMarket::convertOilToUnits(int64_t oil)
{
m_troops_available = (oil/40)*30;
m_jets_available = (oil/40)*25;
m_turrets_available = (oil/40)*25;
m_tanks_available = (oil/40)*10;
}
int64_t PrivateMarket::bushelsNeededForAvailableUnits()
{
int64_t troops_cost{ m_troops_available*m_troops_cost };
int64_t jets_cost{ m_jets_available*m_jets_cost };
int64_t turrets_cost{ m_turrets_available*m_turrets_cost };
int64_t tanks_cost{ m_tanks_available*m_tanks_cost };
return (troops_cost + jets_cost + turrets_cost + tanks_cost) / 35;
}
int64_t PrivateMarket::calculateNetworth()
{
return (m_troops_available*0.5)
+ (m_jets_available*0.6)
+ (m_turrets_available*0.6)
+ (m_tanks_available*2);
}
int main(int argc, char *argv[])
{
if (argc < 6)
{
std::cout << "Error - Provide amount of oil stocked.\n";
std::cout << "Lowest Possible: Troops -> 77 Jets -> 103 Turrets -> 112 Tanks -> 315\n\n";
std::cout << "ie. calculate [STOCKED_OIL] [TROOP_COST] [JET_COST] [TURRET_COST] [TANK_COST]\n";
std::exit(1);
}
int64_t oil_stocked{ std::stoi(argv[1]) };
int64_t troop_cost{ std::stoi(argv[2]) };
int64_t jet_cost{ std::stoi(argv[3]) };
int64_t turret_cost{ std::stoi(argv[4]) };
int64_t tank_cost{ std::stoi(argv[5]) };
// private market prices
std::unordered_map<std::string, int64_t> pm_prices{
{ "troops_cost", troop_cost },
{ "jets_cost", jet_cost },
{ "turrets_cost", turret_cost },
{ "tanks_cost", tank_cost },
};
PrivateMarket pm{ pm_prices };
pm.convertOilToUnits(oil_stocked);
// bushels needed for available units
int64_t bnfau = pm.bushelsNeededForAvailableUnits();
std::cout << "\n------------------------------------\n";
std::cout << "Private Market Generated" << '\n';
std::cout << "Oil stocked: " << oil_stocked << '\n';
std::cout << "------------------------------------\n";
std::cout << "Units Generated" << '\n';
std::cout << "Troops: " << pm.m_troops_available << '\n';
std::cout << "Jets: " << pm.m_jets_available << '\n';
std::cout << "Turrets: " << pm.m_turrets_available << '\n';
std::cout << "Tanks: " << pm.m_tanks_available << '\n';
std::cout << "Bushels required to buy out PM: " << bnfau << '\n';
std::cout << "Increase in Networth: " << pm.calculateNetworth() << '\n';
std::cout << "\n";
}