{}
run-icon
main.cpp
// Online C++ compiler to run C++ program online using namespace std; #include <iostream> #include <vector> struct boarditem { float cd; int burn; float remainingcd; bool ray; }; struct SimData { vector<int> binaryval; vector<int> damages; string kek; }; boarditem newitem (float cd, int burn, bool ray){ return {cd, burn, cd, ray}; } boarditem core = newitem(7.0f, 10, true); int enemyburn = 0; int totaldamage = 0; int firstburntick = 70; int coreburninc = 3; int omegarayvalue = 0; vector<boarditem> leftItems; vector<boarditem> rightItems; void omegaray(){ for (auto& elem : leftItems){ if (elem.burn>0){ elem.burn+=omegarayvalue; } } core.burn+=omegarayvalue; for (auto& elem : rightItems){ if (elem.burn>0){ elem.burn+=omegarayvalue; } } } void activatecore(){ for (auto& elem : rightItems){ if (elem.burn>0){ elem.burn+=coreburninc; } } } bool tickitem(boarditem& elem, int i, bool iscore, bool print){ elem.remainingcd-=0.1f; if (elem.remainingcd<=0){ elem.remainingcd = elem.cd-0.1f; if (elem.ray == true){ omegaray(); } if (iscore){ activatecore(); } if (elem.burn>0){ if (enemyburn == 0){ firstburntick = i; } enemyburn += elem.burn; float temptime = i; temptime = temptime/10; if(print){ cout<< "time: "<<temptime<<" burn applied: " <<elem.burn <<endl; } } return true; } return false; } vector<SimData> everybinary(int length) { if (length <= 0) { return {}; } std::vector<SimData> result; result.reserve(1 << length); for (int i = 0; i < (1 << length); ++i) { SimData combo; combo.binaryval.clear(); // Clear the vector before adding new values int temp = i; while (temp > 0) { combo.binaryval.push_back(temp % 2); temp /= 2; } // Add leading zeros if needed while (combo.binaryval.size() < length) { combo.binaryval.push_back(0); } string returnkek; for (auto& elem:combo.binaryval){ if (elem == 0){ returnkek.append("Left"); }else{ returnkek.append("Right"); } } combo.kek = returnkek; result.push_back(combo); } return result; } vector<int> simulate(bool print){ vector<int> returnval; for (int i = 0; i<=300; i++){ if (enemyburn>0){ if ((i - firstburntick)%5 == 0){ totaldamage+=enemyburn; float temptime = i; temptime = temptime/10; if(print){ cout<< " time passed: " <<temptime << " enemy burn: " <<enemyburn <<" total burn damage: " << totaldamage << endl; } enemyburn-=1; } } for (auto& elem : leftItems){ bool temp = tickitem(elem, i, false, print); if (temp){ core.remainingcd-=0.9; tickitem(core,i, true, print); } } bool coretriggercheck = tickitem(core,i, true, print); for (auto& elem : rightItems){ bool temp = tickitem(elem, i, false, print); } if (i%5==0){ returnval.push_back(totaldamage); } } return returnval; } vector<int> SimAndReset(){ vector<boarditem> templeftItems = leftItems; vector<boarditem> temprightItems = rightItems; boarditem originalcore = core; vector<int> returnval = simulate(false); //tbl = total burn left leftItems = templeftItems; rightItems = temprightItems; enemyburn = 0; totaldamage = 0; core = originalcore; return returnval; } void comparesides(vector <boarditem> testitems){ vector <SimData> results = everybinary(testitems.size()); for (auto& col : results){ for (int i = 0; i<col.binaryval.size(); i++){ boarditem compareitem = testitems[i]; int left = 0; int right = 0; if (col.binaryval[i] == 0){ leftItems.push_back(compareitem); left++; }else{ rightItems.push_back(compareitem); right++; } col.damages = SimAndReset(); //tbr = totalburnright for (int i = 0; i < left; i++){ leftItems.pop_back(); } for (int i = 0; i < left; i++){ rightItems.pop_back(); } } } int maxdam; string maxcol; for (int i = 0; i < 61; i++){ maxdam = 0; string tempmaxcol = ""; string printrow = ""; for (int c = 0; c<results.size(); c++){ SimData printcolumn = results[c]; int tempdamage = printcolumn.damages[i]; if (tempdamage>maxdam){ maxdam = tempdamage; tempmaxcol = printcolumn.kek; } printrow.append("\t \t"+ printcolumn.kek + " damage: "+ to_string(tempdamage)); } if (tempmaxcol!=maxcol){ maxcol = tempmaxcol; cout<<maxcol<<" does most damage here"<<endl; } float time = 0.5f * i; cout<<"time = "<<time<<printrow<<endl; } } int main() { int firstburn = 0; leftItems = { newitem(4.0f, 0, false), newitem(4.0f, 0, false), newitem(4.0f, 0, false) }; rightItems = { newitem(3.7f, 0, false), newitem(4.0f, 0, false) }; bool compare = true; if (compare){ vector <boarditem> compareItems = { newitem(5.5f, 4, false), newitem(3.6f, 2, false) }; comparesides(compareItems); }else{ simulate(true); } return 0; }
Output