#pragma region Hidden Setup Stuff #define OLC_PGE_APPLICATION #include "olcPixelGameEngine.h" using namespace olc; enum Run{ FILE1, FILE2 }; // Override base class with your custom functionality class AoC2023 : public olc::PixelGameEngine { std::vectorlines; bool waitForRender=false; void wait(int pauseMs=0){ waitForRender=true; while(waitForRender); std::this_thread::sleep_for(std::chrono::milliseconds(pauseMs)); } #pragma endregion const int DAY = 7; Run runInput=FILE2; struct Hand{ std::vectorcards; std::mapcardCounts; int bid; }; friend std::ostream&operator<<(std::ostream&rhs,const Hand&hand){ for(int i:hand.cards){ rhs<hands; for(std::string&line:lines){ Hand hand; for(int i=0;i<5;i++){ int cardRank=0; switch(line[i]){ case '2':cardRank=0;break; case '3':cardRank=1;break; case '4':cardRank=2;break; case '5':cardRank=3;break; case '6':cardRank=4;break; case '7':cardRank=5;break; case '8':cardRank=6;break; case '9':cardRank=7;break; case 'T':cardRank=8;break; case 'J':cardRank=9;break; case 'Q':cardRank=10;break; case 'K':cardRank=11;break; case 'A':cardRank=12;break; } hand.cards.push_back(cardRank); hand.cardCounts[cardRank]++; } hand.bid=std::stoi(line.substr(5)); hands.push_back(hand); } std::array,7>handScores{}; //Contains indices in hands vector of the different score pools. for(int counter=0;Hand&hand:hands){ int maxSame=0; int twoOfAKindCount=0; for(auto&[key,value]:hand.cardCounts){ if(value>maxSame)maxSame=value; if(value==2)twoOfAKindCount++; } if(maxSame==5)handScores[FIVE_OF_A_KIND].push_back(counter); else if(maxSame==4)handScores[FOUR_OF_A_KIND].push_back(counter); else if(maxSame==3){ if(twoOfAKindCount>0){handScores[FULL_HOUSE].push_back(counter);}else{ handScores[THREE_OF_A_KIND].push_back(counter); } }else if(maxSame==2){ if(twoOfAKindCount==2){ handScores[TWO_PAIR].push_back(counter); }else{ handScores[ONE_PAIR].push_back(counter); } }else handScores[HIGH_CARD].push_back(counter); counter++; } auto handSort=[&](int h1,int h2){ std::vector&cards1=hands[h1].cards; std::vector&cards2=hands[h2].cards; for(int i=0;i<5;i++){ if(cards1[i]>cards2[i])return true; else if(cards2[i]>cards1[i])return false; } return true; }; for(int i=0;i<=HIGH_CARD;i++){ if(handScores[i].size()>1){ std::sort(handScores[i].begin(),handScores[i].end(),handSort); } } long long score=0; int rank=hands.size(); for(int i=0;i<=HIGH_CARD;i++){ std::cout<<"----------------"<