diff --git a/aoc/04.cpp b/aoc/04.cpp new file mode 100644 index 0000000..88449cd --- /dev/null +++ b/aoc/04.cpp @@ -0,0 +1,67 @@ +#include +#include +#include + +using namespace std; + +// Advent of Code 2023, Day 4 + +int main() { + ifstream input("input.txt"); + + int sums; + for (string line; getline(input, line);) { + regex e("Card\\s*[0-9]+: (.*)"); + smatch m; + + if (!regex_search(line, m, e) && m.size() <= 1) continue; + + string set = m.str(1) + " "; + + string currentNumber; + vector winning; + vector guesses; + + bool buildMode = false; + bool guessing = false; + for (char current : set) { + if (current == '|') { + guessing = true; + continue; + } + + if (isdigit(current)) { + currentNumber.push_back(current); + buildMode = true; + continue; + } + + if (buildMode && current == ' ') { + if (guessing) { + guesses.push_back(stoi(currentNumber)); + } else { + winning.push_back(stoi(currentNumber)); + } + currentNumber = ""; + buildMode = false; + } + } + + int winningNums = 0; + for (auto item : winning) { + if (std::find(guesses.begin(), guesses.end(), item) != guesses.end()) { + if (winningNums == 0) { + winningNums = 1; + continue; + } + winningNums *= 2; + } + } + + cout << line << " [" << winningNums << "]" << endl; + + sums += winningNums; + } + + cout << endl << "Sum: " << sums; +} \ No newline at end of file