Segmented off loop progression

Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
master
parent 78d259dc59
commit 98e1326287
  1. 167
      ChallengeLeaguePointSolver/ChampionsLeaguePointSolver.cpp
  2. 2
      ChallengeLeaguePointSolver/ChampionsLeaguePointSolver.js
  3. BIN
      ChallengeLeaguePointSolver/ChampionsLeaguePointSolver.wasm

@ -51,18 +51,10 @@ class ChampionsLeaguePointSolver : public olc::PixelGameEngine
};
std::vector<ScoreData>dataA,dataB;
std::vector<std::pair<int,int>>player1Score,player2Score,player3Score;
void Evaluate(){
std::vector<TestCase>cases;
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
for(int k=0;k<5;k++){
if(i+j+k==6){
cases.push_back(TestCase{i,j,k});
}
}
}
}
std::vector<TestCase>cases;
std::vector<SongCombinations> bestComboA,bestComboB;
int calculationStep=0;
void Evaluate(int caseInd,bool ASet){
auto ChooseSong = [](SongCombinations&combinations,std::vector<ScoreData>&dat,int index){
if(combinations.remainingA>0&&combinations.p1Picked.count(index)==0&&combinations.p2Picked.count(index)==0&&combinations.p3Picked.count(index)==0){
combinations.remainingA--;
@ -84,13 +76,11 @@ class ChampionsLeaguePointSolver : public olc::PixelGameEngine
}
};
std::vector<SongCombinations> bestComboA,bestComboB;
int caseInd=0;
for(TestCase&_case:cases){
if(ASet){
bestComboA.push_back({});
bestComboA[caseInd].remainingA=_case.p1Amt;
bestComboA[caseInd].remainingB=_case.p2Amt;
bestComboA[caseInd].remainingC=_case.p3Amt;
bestComboA[caseInd].remainingA=cases[caseInd].p1Amt;
bestComboA[caseInd].remainingB=cases[caseInd].p2Amt;
bestComboA[caseInd].remainingC=cases[caseInd].p3Amt;
SongCombinations testCombo=bestComboA[caseInd];
for(int i=0;i<12;i++){
SongCombinations c1=testCombo;
@ -113,7 +103,7 @@ class ChampionsLeaguePointSolver : public olc::PixelGameEngine
if(bestComboA[caseInd].totalEX<c6.totalEX){
bestComboA[caseInd]=c6;
bestComboA[caseInd].totalEX=c6.totalEX;
std::cout<<"New Best Song Combinations found for Case ("<<_case.p1Amt<<","<<_case.p2Amt<<","<<_case.p3Amt<<") - Total EX: "<<bestComboA[caseInd].totalEX<<":"<<std::endl;
std::cout<<"New Best Song Combinations found for Case ("<<cases[caseInd].p1Amt<<","<<cases[caseInd].p2Amt<<","<<cases[caseInd].p3Amt<<") - Total EX: "<<bestComboA[caseInd].totalEX<<":"<<std::endl;
std::cout<<"\t";
for(std::pair<int,int>&p1:bestComboA[caseInd].p1){
std::cout<<"P1["<<p1.first<<"]:"<<p1.second<<" ";
@ -132,15 +122,11 @@ class ChampionsLeaguePointSolver : public olc::PixelGameEngine
}
}
}
caseInd++;
}
caseInd=0;
for(TestCase&_case:cases){
}else{
bestComboB.push_back({});
bestComboB[caseInd].remainingA=_case.p1Amt;
bestComboB[caseInd].remainingB=_case.p2Amt;
bestComboB[caseInd].remainingC=_case.p3Amt;
bestComboB[caseInd].remainingA=cases[caseInd].p1Amt;
bestComboB[caseInd].remainingB=cases[caseInd].p2Amt;
bestComboB[caseInd].remainingC=cases[caseInd].p3Amt;
SongCombinations testCombo=bestComboB[caseInd];
for(int i=0;i<12;i++){
SongCombinations c1=testCombo;
@ -163,7 +149,7 @@ class ChampionsLeaguePointSolver : public olc::PixelGameEngine
if(bestComboB[caseInd].totalEX<c6.totalEX){
bestComboB[caseInd]=c6;
bestComboB[caseInd].totalEX=c6.totalEX;
std::cout<<"New Best Song Combinations found for Case ("<<_case.p1Amt<<","<<_case.p2Amt<<","<<_case.p3Amt<<") - Total EX: "<<bestComboB[caseInd].totalEX<<":"<<std::endl;
std::cout<<"New Best Song Combinations found for Case ("<<cases[caseInd].p1Amt<<","<<cases[caseInd].p2Amt<<","<<cases[caseInd].p3Amt<<") - Total EX: "<<bestComboB[caseInd].totalEX<<":"<<std::endl;
std::cout<<"\t";
for(std::pair<int,int>&p1:bestComboB[caseInd].p1){
std::cout<<"P1["<<p1.first<<"]:"<<p1.second<<" ";
@ -182,43 +168,8 @@ class ChampionsLeaguePointSolver : public olc::PixelGameEngine
}
}
}
caseInd++;
}
int highestEX=0;
SongCombinations picked1,picked2;
for(SongCombinations&A:bestComboA){
for(SongCombinations&B:bestComboB){
if(A.totalEX+B.totalEX>highestEX&&A.p1Picked.size()+B.p1Picked.size()==4&&A.p2Picked.size()+B.p2Picked.size()==4&&A.p3Picked.size()+B.p3Picked.size()==4){
highestEX=A.totalEX+B.totalEX;
picked1=A;
picked2=B;
std::cout<<"New Best Song Combinations found for Final Picks - Total EX: "<<highestEX<<":"<<std::endl;
std::cout<<"\t Set A: ";
for(std::pair<int,int>&p1:picked1.p1){
std::cout<<"P1["<<p1.first<<"]:"<<p1.second<<" ";
}
for(std::pair<int,int>&p2:picked1.p2){
std::cout<<"P2["<<p2.first<<"]:"<<p2.second<<" ";
}
for(std::pair<int,int>&p3:picked1.p3){
std::cout<<"P3["<<p3.first<<"]:"<<p3.second<<" ";
}
std::cout<<std::endl;
std::cout<<"\t Set B: ";
for(std::pair<int,int>&p1:picked2.p1){
std::cout<<"P1["<<p1.first<<"]:"<<p1.second<<" ";
}
for(std::pair<int,int>&p2:picked2.p2){
std::cout<<"P2["<<p2.first<<"]:"<<p2.second<<" ";
}
for(std::pair<int,int>&p3:picked2.p3){
std::cout<<"P3["<<p3.first<<"]:"<<p3.second<<" ";
}
std::cout<<std::endl;
}
}
}
calculationStep++;
}
public:
struct SongElement{
@ -227,6 +178,8 @@ class ChampionsLeaguePointSolver : public olc::PixelGameEngine
p1Score=new QuickGUI::TextBox(manager,"",pos+vf2d{192,0},{36,12});
p2Score=new QuickGUI::TextBox(manager,"",pos+vf2d{192+42*1,0},{36,12});
p3Score=new QuickGUI::TextBox(manager,"",pos+vf2d{192+42*2,0},{36,12});
//NOTE for future Sig: The Text Entry mode has the enter key functionality DISABLED as we use it for tab/enter key navigation. If you need it for some reason you need to go re-enable it.
if(prevTextBox!=nullptr){
prevTextBox->tabNext=p1Score;
}
@ -244,6 +197,12 @@ class ChampionsLeaguePointSolver : public olc::PixelGameEngine
};
QuickGUI::Manager gui;
std::vector<SongElement>songs;
QuickGUI::Label*p1Label;
QuickGUI::Label*p2Label;
QuickGUI::Label*p3Label;
QuickGUI::Button*calculateButton;
int totalCalculationSteps=0;
bool calculating=false;
ChampionsLeaguePointSolver()
{
@ -302,14 +261,94 @@ class ChampionsLeaguePointSolver : public olc::PixelGameEngine
}
std::cout<<"==================="<<std::endl;
p1Label=new QuickGUI::Label(gui,"P1",vf2d{4.f,2.f}+vf2d{192,0},{36,12});
p2Label=new QuickGUI::Label(gui,"P2",vf2d{4.f,2.f}+vf2d{192+42*1,0},{36,12});
p3Label=new QuickGUI::Label(gui,"P3",vf2d{4.f,2.f}+vf2d{192+42*2,0},{36,12});
calculateButton=new QuickGUI::Button(gui,"Calculate",{4,2},{100,16});
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
for(int k=0;k<5;k++){
if(i+j+k==6){
cases.push_back(TestCase{i,j,k});
}
}
}
}
return true;
}
bool OnUserUpdate(float fElapsedTime) override
{
Clear(VERY_DARK_CYAN);
if(calculateButton->bPressed&&!calculating){
calculateButton->Enable(false);
for(SongElement&element:songs){
element.p1Score->Enable(false);
element.p2Score->Enable(false);
element.p3Score->Enable(false);
}
calculating=true;
calculationStep=0;
totalCalculationSteps=cases.size()*2;
bestComboA={};
bestComboB={};
}
gui.Update(this);
gui.Draw(this);
if(calculating){
if(calculationStep<cases.size()){
Evaluate(calculationStep,true);
}else{
Evaluate(calculationStep%cases.size(),false);
}
FillRect({0,ScreenHeight()-12},{ScreenWidth(),12},DARK_GREY);
FillRect({0,ScreenHeight()-12},{int(calculationStep/float(totalCalculationSteps)*ScreenWidth()),12},WHITE);
DrawRect({0,ScreenHeight()-12},{ScreenWidth(),12},BLACK);
if(calculationStep==totalCalculationSteps){
int highestEX=0;
SongCombinations picked1,picked2;
for(SongCombinations&A:bestComboA){
for(SongCombinations&B:bestComboB){
if(A.totalEX+B.totalEX>highestEX&&A.p1Picked.size()+B.p1Picked.size()==4&&A.p2Picked.size()+B.p2Picked.size()==4&&A.p3Picked.size()+B.p3Picked.size()==4){
highestEX=A.totalEX+B.totalEX;
picked1=A;
picked2=B;
std::cout<<"New Best Song Combinations found for Final Picks - Total EX: "<<highestEX<<":"<<std::endl;
std::cout<<"\t Set A: ";
for(std::pair<int,int>&p1:picked1.p1){
std::cout<<"P1["<<p1.first<<"]:"<<p1.second<<" ";
}
for(std::pair<int,int>&p2:picked1.p2){
std::cout<<"P2["<<p2.first<<"]:"<<p2.second<<" ";
}
for(std::pair<int,int>&p3:picked1.p3){
std::cout<<"P3["<<p3.first<<"]:"<<p3.second<<" ";
}
std::cout<<std::endl;
std::cout<<"\t Set B: ";
for(std::pair<int,int>&p1:picked2.p1){
std::cout<<"P1["<<p1.first<<"]:"<<p1.second<<" ";
}
for(std::pair<int,int>&p2:picked2.p2){
std::cout<<"P2["<<p2.first<<"]:"<<p2.second<<" ";
}
for(std::pair<int,int>&p3:picked2.p3){
std::cout<<"P3["<<p3.first<<"]:"<<p3.second<<" ";
}
std::cout<<std::endl;
}
}
}
calculating=false;
calculateButton->bPressed=false;
}
}
return true;
}
};

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save