From da983a93216be3d7d94257f57e0419ce19159366 Mon Sep 17 00:00:00 2001 From: Matthew Gretton-Dann Date: Fri, 17 Dec 2021 11:41:53 +0000 Subject: [PATCH] Add 2017 day 19 puzzles --- 2017/puzzle-19-01.cc | 54 +++++++++++++++++++++++++++++++++++++++++ 2017/puzzle-19-02.cc | 57 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 2017/puzzle-19-01.cc create mode 100644 2017/puzzle-19-02.cc 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; + } +}