diff --git a/day3/day3Part2 b/day3/day3Part2 index 64acd59..b67eeac 100755 Binary files a/day3/day3Part2 and b/day3/day3Part2 differ diff --git a/day3/day3Part2.broken.cpp b/day3/day3Part2.broken.cpp deleted file mode 100644 index 63f5931..0000000 --- a/day3/day3Part2.broken.cpp +++ /dev/null @@ -1,190 +0,0 @@ -#include -#include -#include -#include -#include -using namespace std; - -int main (void) -{ - vector> inputValues; - vector> mostCommon; - vector> mostCommonWorking; - vector> leastCommon; - char currentLine[5]; - array currentLineInt; - int mostBitTrue[5] = {}; - int mostBitFalse[5] = {}; - int leastBitTrue[5] = {}; - int leastBitFalse[5] = {}; - int oxygenGenRatingBin[5] = {}; - int coScrubRatingBin[5] = {}; - int oxygenGenRatingDec = 0; - int coScrubRatingDec = 0; - int lifeSupport = 0; - int debugCount = 0; - int vectorSize = 0; - ifstream readFile ("data/testInput.txt", ios::in); - - //file Read - while(readFile >> currentLine) - { - for(int i=0;i<5;i++) - { - if (currentLine[i] == '1') currentLineInt[i] = 1; - else if (currentLine[i] == '0') currentLineInt[i] = 0; - } - inputValues.push_back(currentLineInt); - } - - mostCommon = inputValues; - leastCommon = inputValues; - - - //most Common filter - //Iterate through all bits in line - for(int i=0;i<5;i++) - { - mostCommon = mostCommonWorking; - mostCommonWorking.clear(); - //if there's only one line, leave the loop - if(mostCommon.size() == 1) - { - cout << "Exiting mostCommon loop..." << endl; - break; - } - - //Iterate through all entries in mostCommon, count 1s and 0s - for (int j=0;j mostBitFalse[i]) - { - for(int j=0;j=mostCommon.size();j++) - { - if(mostCommon[j][i] == 1) mostCommonWorking.push_back(mostCommon[i]); - } - } - - //If there are more 0s than 1s, save 0s - if (mostBitFalse[i] > mostBitTrue[i]) - { - for(int j=0;j=mostCommon.size();j++) - { - if(mostCommon[j][i] == 0) mostCommonWorking.push_back(mostCommon[i]); - } - } - cout << "Most Common Working: "; - for(int j=0;j leastBitFalse[i]) - { - for (int j=0;j leastBitTrue[i]) - { - for (int j=0;j +#include +#include +#include +#include +#include +#include +using namespace std; + +int i = 0; +char zeroChar = '0'; + +bool bitIsFalse(string binString) +{ + return (binString[i] == '0'); +} + +bool bitIsTrue(string binString) +{ + return (binString[i] == '1'); +} + +int main (void) +{ + vector inputValues; + vector mostCommonList; + vector::iterator mostCommonListIt; + vector leastCommonList; + vector::iterator leastCommonListIt; + string currentLine; + string mostCommonFinal; + string leastCommonFinal; + int mostBitTrue[5] = {}; + int mostBitFalse[5] = {}; + int leastBitTrue[5] = {}; + int leastBitFalse[5] = {}; + int oxygenGenRatingBin[5] = {}; + int coScrubRatingBin[5] = {}; + int oxygenGenRatingDec = 0; + int coScrubRatingDec = 0; + int lifeSupport = 0; + ifstream readFile ("data/testInput.txt", ios::in); + + //file Read + while(getline(readFile, currentLine)) + { + inputValues.emplace_back(currentLine); + } + + mostCommonList = inputValues; + leastCommonList = inputValues; + + + //most Common filter + //Iterate through all bits in line + for(i=0;i<5;i++) + { + //exit loop if list only has one string + if (mostCommonList.size() == 1) break; + + //iterate through list + for (int j=0;j mostBitFalse[i]) + { + mostCommonListIt = remove_if(mostCommonList.begin(), mostCommonList.end(), bitIsFalse); + } + if (mostBitFalse[i] > mostBitTrue[i]) + { + mostCommonListIt = remove_if(mostCommonList.begin(), mostCommonList.end(), bitIsTrue); + } + } + + mostCommonFinal = *mostCommonList.begin(); + //******************************************************************* + //least Common filter + //Iterate through all bits in line + for(i=0;i<5;i++) + { + //exit loop if list only has one string + if (leastCommonList.size() == 1) break; + + //iterate through list + for (auto it = leastCommonList.begin(); it != leastCommonList.end(); ++it) + { + //make index of list usable + currentLine = *it; + + //increment counter + if (currentLine[i] == 0) leastBitFalse[i]++; + else if (currentLine[i] == 1) leastBitTrue[i]++; + else + { + cout << "Error!" << endl; + return 1; + } + } + + //if same, true has priority + if (mostBitTrue[i] == mostBitFalse[i]) mostBitTrue[i]++; + + if (mostBitTrue[i] > mostBitFalse[i]) + { + mostCommonListIt = remove_if(mostCommonList.begin(), mostCommonList.end(), bitIsFalse); + } + if (mostBitFalse[i] > mostBitTrue[i]) + { + mostCommonListIt = remove_if(mostCommonList.begin(), mostCommonList.end(), bitIsTrue); + } + } + leastCommonFinal = *leastCommonList.begin(); + + for(i=0;i<5;i++) + { + if(mostCommonFinal[i] == 1) oxygenGenRatingBin[i]=1; + else if(mostCommonFinal[i] == 0) oxygenGenRatingBin[i]=0; + else + { + cout << "Error!!!" << endl; + return 3; + } + if(leastCommonFinal[i] == 1) coScrubRatingBin[i]=1; + else if(leastCommonFinal[i] == 0) coScrubRatingBin[i]=0; + else + { + cout << "Error!!!!" << endl; + return 4; + } + } + for(int i=0;i<5;i++) + { + oxygenGenRatingDec += oxygenGenRatingBin[i] * pow(2,04-i); + coScrubRatingDec += coScrubRatingBin[i] * pow(2,04-i); + } + lifeSupport = oxygenGenRatingDec * coScrubRatingDec; + cout << "\nLife Support Rating: " << lifeSupport; + return 0; +}