From 100b893f9ee67c8a26dfd038785b59bede7fcf5a Mon Sep 17 00:00:00 2001 From: roy Date: Tue, 14 Jul 2026 10:15:08 +0300 Subject: Solved 2015 question 3. --- years/2015.cpp | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 100 insertions(+), 12 deletions(-) (limited to 'years/2015.cpp') diff --git a/years/2015.cpp b/years/2015.cpp index 67fe1a6..b894d55 100644 --- a/years/2015.cpp +++ b/years/2015.cpp @@ -1,8 +1,28 @@ #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; @@ -25,18 +45,6 @@ int y2015_q01_p02(std::string instructions) { return -1; } -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; -} - 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; @@ -79,3 +87,83 @@ int y2015_q02_p02() { 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()); +} -- cgit v1.3.1