aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkaiwu <kaiwu2004@gmail.com>2023-01-13 09:34:46 +0800
committerkaiwu <kaiwu2004@gmail.com>2023-01-13 09:34:46 +0800
commit7009f3ed3c6f9938f6a6b80785e4df9d38d4ec03 (patch)
tree19d4836e85ae3c22a579a30f12d9c2027080b87e
parent7c0030e147d303f55ec7e47a5ac4c1c81501e4f6 (diff)
downloadadvent-of-code-7009f3ed3c6f9938f6a6b80785e4df9d38d4ec03.tar.gz
advent-of-code-7009f3ed3c6f9938f6a6b80785e4df9d38d4ec03.zip
2022 day19 part1 parse
-rw-r--r--src/2022/day19/aoc.cpp15
-rw-r--r--src/2022/day19/aoc.h38
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