#pragma once #include "common.h" #include namespace aoc2017 { struct scanner { int depth = 0; int range = 0; void get_number(const char** pp, int* d) { const char* p = *pp; while (*p >= '0' && *p <= '9') { *d = *d * 10 + *p - '0'; p++; } *pp = p; } void print() const noexcept { printf("%d %d\n", depth, range); } int at_level(int t) const noexcept { t %= 2 * (range - 1); return t < range ? t : 2 * (range - 1) - t; } scanner(line_view lv) { int* ds[] = {&depth, &range}; int i{0}; const char* p = lv.line; while (p < lv.line + lv.length) { if (*p >= '0' && *p <= '9') { get_number(&p, ds[i++]); } p++; } } }; std::pair day13(line_view); } // namespace aoc2017