diff --git a/day_2/main.cpp b/day_2/main.cpp index fd61456..accb368 100644 --- a/day_2/main.cpp +++ b/day_2/main.cpp @@ -2,49 +2,44 @@ #include void part1(std::ifstream& input, std::string& line) { - int num_valid = 0; + int valid_count = 0; + while (std::getline(input, line)) { size_t fp_i = line.find(' '); // Index of the first space in line size_t dash_i = line.find('-'); // Index of the only dash in line - size_t ss_i = line.substr(fp_i + 1).find(' ') + fp_i + 1; // Index of the second space in line - std::string range = line.substr(0, fp_i); // "9-11": the range that we're looking for letter to be in + std::string password = line.substr(line.find(": ") + 2); - std::string password = line.substr(ss_i + 1); char letter = line[fp_i + 1]; - int low = std::stoi(range.substr(0, dash_i)); - int high = std::stoi(range.substr(dash_i + 1)); + int low = std::stoi(line.substr(0, dash_i)); + int high = std::stoi(line.substr(dash_i + 1, fp_i)); int letter_count = std::count(password.cbegin(), password.cend(), letter); - if (letter_count <= high && letter_count >= low) num_valid++; + if (letter_count <= high && letter_count >= low) valid_count++; } - std::cout << num_valid << std::endl; + std::cout << valid_count << std::endl; } void part2(std::ifstream& input, std::string& line) { - int num_valid = 0; + int valid_count = 0; while(std::getline(input, line)) { size_t fp_i = line.find(' '); // Index of the first space in line size_t dash_i = line.find('-'); // Index of the only dash in line - size_t ss_index = line.substr(fp_i + 1).find(' ') + fp_i + 1; // Index of the second space in line - std::string range = line.substr(0, fp_i); // "9-11": We will check indexes 9 and 11 + std::string password = line.substr(line.find(": ") + 2); - std::string password = line.substr(ss_index + 1); char letter = line[fp_i + 1]; - size_t i1 = std::stoi(range.substr(0, dash_i)) - 1; - size_t i2 = std::stoi(range.substr(dash_i + 1)) - 1; + size_t i1 = std::stoi(line.substr(0, dash_i)) - 1; + size_t i2 = std::stoi(line.substr(dash_i + 1, fp_i)) - 1; if (password[i1] == password[i2]) continue; // If they are the same we can skip this line - if (password[i1] == letter || password[i2] == letter) num_valid++; + if (password[i1] == letter || password[i2] == letter) valid_count++; } - std::cout << num_valid << std::endl; + std::cout << valid_count << std::endl; } - - int main() { std::ifstream input("../input.txt"); std::string line; @@ -57,6 +52,4 @@ int main() { part2(input, line); return 0; -} - - +} \ No newline at end of file