From 0c2ac4d5f0be24026f97448ca8fab655e9901070 Mon Sep 17 00:00:00 2001 From: Matthew Gretton-Dann Date: Wed, 12 Jan 2022 14:28:00 +0000 Subject: [PATCH] Add 2020 puzzle 1 --- 2017/puzzle-20-01.cc | 50 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 2017/puzzle-20-01.cc diff --git a/2017/puzzle-20-01.cc b/2017/puzzle-20-01.cc new file mode 100644 index 0000000..d346a6a --- /dev/null +++ b/2017/puzzle-20-01.cc @@ -0,0 +1,50 @@ +#include +#include +#include +#include + +auto manhatten_distance(long x, long y, long z) { return std::abs(x) + std::abs(y) + std::abs(z); } + +auto main() -> int +{ + static std::regex re{"p=<(-?\\d+),(-?\\d+),(-?\\d+)>, v=<(-?\\d+),(-?\\d+),(-?\\d+)>, " + "a=<(-?\\d+),(-?\\d+),(-?\\d+)>"}; + + unsigned closest{0}; + unsigned dist_min{std::numeric_limits::max()}; + unsigned ddist_min{std::numeric_limits::max()}; + unsigned d2dist_min{std::numeric_limits::max()}; + std::string line; + unsigned i{0}; + + while (std::getline(std::cin, line) && !line.empty()) { + std::smatch m; + if (!std::regex_search(line, m, re)) { + std::cerr << "Unable to interpret: " << line << '\n'; + } + auto x{std::stol(m.str(1))}; + auto y{std::stol(m.str(2))}; + auto z{std::stol(m.str(3))}; + auto dx{std::stol(m.str(4))}; + auto dy{std::stol(m.str(5))}; + auto dz{std::stol(m.str(6))}; + auto d2x{std::stol(m.str(7))}; + auto d2y{std::stol(m.str(8))}; + auto d2z{std::stol(m.str(9))}; + + auto dist{manhatten_distance(x, y, z)}; + auto ddist{manhatten_distance(dx, dy, dz)}; + auto d2dist{manhatten_distance(d2x, d2y, d2z)}; + if (d2dist < d2dist_min || (d2dist == d2dist_min && ddist < ddist_min) || + (d2dist == d2dist_min && ddist == ddist_min && dist < dist_min)) { + d2dist_min = d2dist; + ddist_min = ddist; + dist_min = dist; + closest = i; + } + ++i; + } + + std::cout << "Closest: " << closest << '\n'; + return 0; +}