diff --git a/2017/puzzle-19-01.cc b/2017/puzzle-19-01.cc new file mode 100644 index 0000000..b5204d0 --- /dev/null +++ b/2017/puzzle-19-01.cc @@ -0,0 +1,54 @@ +#include +#include +#include +#include + +using Map = std::vector; + +auto main() -> int +{ + std::string line; + Map map; + std::size_t len{0}; + while (std::getline(std::cin, line) && !line.empty()) { + len = std::max(line.size() + 1, len); + map.push_back(line); + } + for (auto& l : map) { + l.resize(len, ' '); + } + map.push_back(std::string(len, ' ')); + + int dx{0}; + int dy{1}; + auto x{map[0].find('|')}; + decltype(x) y{0}; + assert(x != std::string::npos); + std::string letters; + + while (true) { + switch (map[y][x]) { + case '|': + case '-': + break; + case ' ': + std::cout << "Letters: " << letters << '\n'; + return 0; + case '+': + if (dx != 0) { + dx = 0; + dy = (map[y + 1][x] != ' ') ? 1 : -1; + } + else { + dy = 0; + dx = (map[y][x + 1] != ' ') ? 1 : -1; + } + break; + default: + letters += map[y][x]; + break; + } + x += dx; + y += dy; + } +} diff --git a/2017/puzzle-19-02.cc b/2017/puzzle-19-02.cc new file mode 100644 index 0000000..d536347 --- /dev/null +++ b/2017/puzzle-19-02.cc @@ -0,0 +1,57 @@ +#include +#include +#include +#include + +using Map = std::vector; + +auto main() -> int +{ + std::string line; + Map map; + std::size_t len{0}; + while (std::getline(std::cin, line) && !line.empty()) { + len = std::max(line.size() + 1, len); + map.push_back(line); + } + for (auto& l : map) { + l.resize(len, ' '); + } + map.push_back(std::string(len, ' ')); + + int dx{0}; + int dy{1}; + auto x{map[0].find('|')}; + decltype(x) y{0}; + assert(x != std::string::npos); + std::string letters; + std::size_t moves{0}; + + while (true) { + switch (map[y][x]) { + case '|': + case '-': + break; + case ' ': + std::cout << "Letters: " << letters << '\n'; + std::cout << "Moves: " << moves << '\n'; + return 0; + case '+': + if (dx != 0) { + dx = 0; + dy = (map[y + 1][x] != ' ') ? 1 : -1; + } + else { + dy = 0; + dx = (map[y][x + 1] != ' ') ? 1 : -1; + } + break; + default: + letters += map[y][x]; + break; + } + x += dx; + y += dy; + ++moves; + } +}