diff options
author | kaiwu <kaiwu2004@gmail.com> | 2023-01-13 09:34:46 +0800 |
---|---|---|
committer | kaiwu <kaiwu2004@gmail.com> | 2023-01-13 09:34:46 +0800 |
commit | 7009f3ed3c6f9938f6a6b80785e4df9d38d4ec03 (patch) | |
tree | 19d4836e85ae3c22a579a30f12d9c2027080b87e | |
parent | 7c0030e147d303f55ec7e47a5ac4c1c81501e4f6 (diff) | |
download | advent-of-code-7009f3ed3c6f9938f6a6b80785e4df9d38d4ec03.tar.gz advent-of-code-7009f3ed3c6f9938f6a6b80785e4df9d38d4ec03.zip |
2022 day19 part1 parse
-rw-r--r-- | src/2022/day19/aoc.cpp | 15 | ||||
-rw-r--r-- | src/2022/day19/aoc.h | 38 |
2 files changed, 49 insertions, 4 deletions
diff --git a/src/2022/day19/aoc.cpp b/src/2022/day19/aoc.cpp index 2b3a56e..60acb2b 100644 --- a/src/2022/day19/aoc.cpp +++ b/src/2022/day19/aoc.cpp @@ -2,8 +2,17 @@ namespace aoc2022 { -std::pair<int, int> day19(line_view) { +std::pair<int, int> day19(line_view file) { + std::vector<blueprint> bs; + per_line(file, [&bs](line_view lv) { + bs.emplace_back(lv); + return true; + }); + + for (auto& b : bs) { + b.print(); + } + return {0, 0}; } -} - +} // namespace aoc2022 diff --git a/src/2022/day19/aoc.h b/src/2022/day19/aoc.h index dfa4e9d..f2b2b8b 100644 --- a/src/2022/day19/aoc.h +++ b/src/2022/day19/aoc.h @@ -3,5 +3,41 @@ namespace aoc2022 { +// which blueprint would maximize the number of opened geodes after 24 minutes +// by figuring out which robots to build and when to build them. +struct blueprint { + int idx = 0; + int c_ore_r = 0; // ore + int c_clay_r = 0; // ore + int c_obsi_r[2] = {0, 0}; // ore + clay + int c_geod_r[2] = {0, 0}; // ore + obsidian + + 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 %d [%d,%d] [%d,%d]\n", idx, c_ore_r, c_clay_r, c_obsi_r[0], c_obsi_r[1], c_geod_r[0], c_geod_r[1]); + } + + blueprint(line_view lv) { + const char* p = lv.line; + int i{0}; + int* ps[7] = {&idx, &c_ore_r, &c_clay_r, c_obsi_r, c_obsi_r + 1, c_geod_r, c_geod_r + 1}; + + while (p < lv.line + lv.length) { + if (*p >= '0' && *p <= '9') { + get_number(&p, ps[i++]); + } + p++; + } + } +}; + std::pair<int, int> day19(line_view); -} +} // namespace aoc2022 |