From 6d388b068b097738d8b083e606dd4da7af8708c4 Mon Sep 17 00:00:00 2001 From: Bert Peters Date: Sat, 14 Dec 2019 19:50:56 +0100 Subject: [PATCH] Small input utility. --- 2019/src/day12.cpp | 15 +++------------ 2019/src/utils.hpp | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/2019/src/day12.cpp b/2019/src/day12.cpp index aaae2e3..f1340bf 100644 --- a/2019/src/day12.cpp +++ b/2019/src/day12.cpp @@ -1,7 +1,6 @@ #include #include #include -#include #include "days.hpp" #include "point.hpp" @@ -12,18 +11,10 @@ namespace { std::vector read_moons(std::istream &input) { std::vector moons; - std::regex regex(R"(^$)"); - std::smatch results; + point_t moon; - for (std::string buffer; std::getline(input, buffer);) { - if (!std::regex_match(buffer, results, regex)) { - throw std::domain_error(buffer); - } - - point_t moon; - for (int i = 0; i < 3; ++i) from_chars(results[i + 1].str(), moon[i]); - - moons.emplace_back(moon); + while (aoc2019::read_line_numbers_and_garbage(input, moon.begin())) { + moons.push_back(moon); } return moons; diff --git a/2019/src/utils.hpp b/2019/src/utils.hpp index d39ed4e..38b3992 100644 --- a/2019/src/utils.hpp +++ b/2019/src/utils.hpp @@ -21,6 +21,25 @@ namespace aoc2019 { seed ^= hash(o) + 0x9e3779b9 + (seed << 6) + (seed >> 2); } + template + std::istream &read_line_numbers_and_garbage(std::istream &input, OutputIt output) { + ValueType v; + char c; + while (input && (c = input.peek()) != '\n') { + if (c == '-' || std::isdigit(c)) { + input >> v; + *output = v; + ++output; + } else { + input.ignore(); + } + } + + input.get(); + + return input; + } + std::string_view strtok(std::string_view &str, char token = ','); std::deque run_intcode(std::vector program, std::deque inputs = {});