#include "../aoc.h" #include #include #include #include #include std::vector splitstring(std::string input, char splitter) { std::stringstream splitterstream(input); std::string segment; std::vector splatstring; while (std::getline(splitterstream, segment, splitter)) { splatstring.push_back(segment); } return splatstring; } template bool vectorcontains(const std::vector> &v, const std::tuple &x) { return std::find(v.begin(), v.end(), x) != v.end(); } int y2015_q01_p01(std::string instructions) { int floor = 0; for (const char &c : instructions) { floor += c == '(' ? 1 : -1; } return floor; } int y2015_q01_p02(std::string instructions) { int floor = 0; for (std::size_t i = 0; i < instructions.size(); i++) { floor += instructions[i] == '(' ? 1 : -1; if (floor == -1) return i + 1; } return -1; } int y2015_q02_p01_instance(int l, int w, int h) { return std::min(l * w, std::min(l * h, h * w)) + 2 * l * w + 2 * l * h + 2 * w * h; } int y2015_q02_p01() { int sum = 0; std::string input; getline(std::cin, input); while (input != "-1") { std::vector split = splitstring(input, 'x'); sum += y2015_q02_p01_instance(std::stoi(split[0]), std::stoi(split[1]), std::stoi(split[2])); getline(std::cin, input); } return sum; } int y2015_q02_p02_instance(int l, int w, int h) { return std::min(2 * (l + w), std::min(2 * (l + h), 2 * (w + h))) + l * w * h; } int y2015_q02_p02() { int sum = 0; std::string input; getline(std::cin, input); while (input != "-1") { std::vector split = splitstring(input, 'x'); sum += y2015_q02_p02_instance(std::stoi(split[0]), std::stoi(split[1]), std::stoi(split[2])); getline(std::cin, input); } return sum; } int y2015_q03_p01() { std::string input; getline(std::cin, input); std::set> board; board.insert({0, 0}); int x, y; for (const char &c : input) { switch (c) { case '>': x++; break; case '<': x--; break; case '^': y++; break; case 'v': y--; break; } board.insert({x, y}); } return static_cast(board.size()); } int y2015_q03_p02() { std::string input; std::cout << "Warning! This input might need to be hardcoded depending on " "your terminal's input length limit."; getline(std::cin, input); std::set> board; board.insert({0, 0}); bool bot = false; int x = 0, y = 0, x2 = 0, y2 = 0; for (const char &c : input) { if (bot) { switch (c) { case '>': x2++; break; case '<': x2--; break; case '^': y2++; break; case 'v': y2--; break; } board.insert({x2, y2}); } else { switch (c) { case '>': x++; break; case '<': x--; break; case '^': y++; break; case 'v': y--; break; } board.insert({x, y}); } bot = !bot; } return static_cast(board.size()); }