aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkaiwu <kaiwu2004@gmail.com>2023-01-03 22:35:39 +0800
committerkaiwu <kaiwu2004@gmail.com>2023-01-03 22:35:39 +0800
commiteb059adcdb9796d6fec0b65c613755e1acfe43b6 (patch)
tree2a7acf6169f9a93a4a64303ea57308e621dda583 /src
parent25306ab0a136c351f3880876667a87e9b139539d (diff)
downloadadvent-of-code-eb059adcdb9796d6fec0b65c613755e1acfe43b6.tar.gz
advent-of-code-eb059adcdb9796d6fec0b65c613755e1acfe43b6.zip
2022 day22 part2 input
Diffstat (limited to 'src')
-rw-r--r--src/2022/day22/aoc.cpp199
-rw-r--r--src/2022/day22/aoc.h34
2 files changed, 170 insertions, 63 deletions
diff --git a/src/2022/day22/aoc.cpp b/src/2022/day22/aoc.cpp
index eee9ad7..a6e953c 100644
--- a/src/2022/day22/aoc.cpp
+++ b/src/2022/day22/aoc.cpp
@@ -12,26 +12,20 @@ struct person {
facing f;
};
-static int absolute_x(int x, const monkey_map& r) {
- return r.start + x;
-}
+static int absolute_x(int x, const monkey_map& r) { return r.start + x; }
typedef int (*yf)(int, const std::vector<monkey_map>&);
-int prev_y(int y, const std::vector<monkey_map>& ms) {
- return y == 0 ? ms.size() - 1 : y - 1;
-}
+int prev_y(int y, const std::vector<monkey_map>& ms) { return y == 0 ? ms.size() - 1 : y - 1; }
-int next_y(int y, const std::vector<monkey_map>& ms) {
- return y == (int) ms.size() - 1 ? 0 : y + 1;
-}
+int next_y(int y, const std::vector<monkey_map>& ms) { return y == (int)ms.size() - 1 ? 0 : y + 1; }
int find_next(int x, int y, const std::vector<monkey_map>& ms, yf f) {
auto ax = absolute_x(x, ms[y]);
while (true) {
y = f(y, ms);
const monkey_map& r = ms[y];
- if (ax >= r.start && ax < r.start + (int) r.line.length) {
+ if (ax >= r.start && ax < r.start + (int)r.line.length) {
return y;
}
}
@@ -87,7 +81,7 @@ void go_right(int s, person* p, const std::vector<monkey_map>& ms) {
if (s > 0) {
const monkey_map& m = ms[p->y];
mark(m.start + p->x, p->y, '>');
- int x = p->x + 1 < (int) m.line.length ? p->x + 1 : 0;
+ int x = p->x + 1 < (int)m.line.length ? p->x + 1 : 0;
char c = *(m.line.line + x);
if (c == '.') {
p->x = x;
@@ -120,96 +114,201 @@ void travel(person* p, const std::vector<monkey_map>& ms, const route& r) {
}
}
-std::pair<int64_t, int64_t> day22(line_view file) {
- per_line(file, [](line_view lv) {
- const char* p = lv.line;
- if (*p == ' ' || *p == '.' || *p == '#') {
- maps.emplace_back(p);
- }
- if (*p >= '0' && *p <= '9') {
- facing f = right;
- while (*p != '\n') {
- routes.emplace_back(&p, &f);
- }
- }
- return true;
- });
-
- for(auto&m : maps) {
- tmaps.emplace_back(m);
- }
-
- cube_map cubs[6];
- // sample
+void cube_sample(cube_map cubs[6]) {
// R2L
// D3U 1 R6L
// L4R
cubs[0].x = 2 * cube_map::size;
cubs[0].y = 0;
+ cubs[0].sides[facing::up].m = &cubs[1];
+ cubs[0].sides[facing::up].f = facing::down;
+ cubs[0].sides[facing::left].m = &cubs[2];
+ cubs[0].sides[facing::left].f = facing::down;
cubs[0].sides[facing::right].m = &cubs[5];
cubs[0].sides[facing::right].f = facing::left;
cubs[0].sides[facing::down].m = &cubs[3];
cubs[0].sides[facing::down].f = facing::down;
- cubs[0].sides[facing::left].m = &cubs[2];
- cubs[0].sides[facing::left].f = facing::down;
- cubs[0].sides[facing::up].m = &cubs[1];
- cubs[0].sides[facing::up].f = facing::down;
// R1L
// U6D 2 L3R
// R5L
cubs[1].x = 0;
cubs[1].y = cube_map::size;
+ cubs[1].sides[facing::up].m = &cubs[0];
+ cubs[1].sides[facing::up].f = facing::down;
+ cubs[1].sides[facing::left].m = &cubs[5];
+ cubs[1].sides[facing::left].f = facing::up;
cubs[1].sides[facing::right].m = &cubs[2];
cubs[1].sides[facing::right].f = facing::right;
cubs[1].sides[facing::down].m = &cubs[4];
cubs[1].sides[facing::down].f = facing::up;
- cubs[1].sides[facing::left].m = &cubs[5];
- cubs[1].sides[facing::left].f = facing::up;
- cubs[1].sides[facing::up].m = &cubs[0];
- cubs[1].sides[facing::up].f = facing::down;
// U1D
// L2R 3 L4R
// D5U
+ cubs[2].x = cube_map::size;
+ cubs[2].y = cube_map::size;
+ cubs[2].sides[facing::up].m = &cubs[0];
+ cubs[2].sides[facing::up].f = facing::right;
+ cubs[2].sides[facing::left].m = &cubs[1];
+ cubs[2].sides[facing::left].f = facing::left;
+ cubs[2].sides[facing::right].m = &cubs[3];
+ cubs[2].sides[facing::right].f = facing::right;
+ cubs[2].sides[facing::down].m = &cubs[4];
+ cubs[2].sides[facing::down].f = facing::right;
// L1R
// L3R 4 U6D
// L5R
-
+ cubs[3].x = 2 * cube_map::size;
+ cubs[3].y = cube_map::size;
+ cubs[3].sides[facing::up].m = &cubs[0];
+ cubs[3].sides[facing::up].f = facing::up;
+ cubs[3].sides[facing::left].m = &cubs[2];
+ cubs[3].sides[facing::left].f = facing::down;
+ cubs[3].sides[facing::right].m = &cubs[5];
+ cubs[3].sides[facing::right].f = facing::left;
+ cubs[3].sides[facing::down].m = &cubs[4];
+ cubs[3].sides[facing::down].f = facing::down;
+
// L4R
// U3D 5 L6R
// R2L
+ cubs[4].x = 2 * cube_map::size;
+ cubs[4].y = 2 * cube_map::size;
+ cubs[4].sides[facing::up].m = &cubs[3];
+ cubs[4].sides[facing::up].f = facing::up;
+ cubs[4].sides[facing::left].m = &cubs[2];
+ cubs[4].sides[facing::left].f = facing::up;
+ cubs[4].sides[facing::right].m = &cubs[5];
+ cubs[4].sides[facing::right].f = facing::right;
+ cubs[4].sides[facing::down].m = &cubs[1];
+ cubs[4].sides[facing::down].f = facing::up;
// D4U
// L5R 6 R1L
// D2U
+ cubs[5].x = 3 * cube_map::size;
+ cubs[5].y = 2 * cube_map::size;
+ cubs[5].sides[facing::up].m = &cubs[3];
+ cubs[5].sides[facing::up].f = facing::left;
+ cubs[5].sides[facing::left].m = &cubs[4];
+ cubs[5].sides[facing::left].f = facing::left;
+ cubs[5].sides[facing::right].m = &cubs[0];
+ cubs[5].sides[facing::right].f = facing::left;
+ cubs[5].sides[facing::down].m = &cubs[1];
+ cubs[5].sides[facing::down].f = facing::right;
+}
-
- // input
+void cube_input(cube_map cubs[6]) {
// U6D
// R4L 1 L2R
// L3R
- //
+ cubs[0].x = cube_map::size;
+ cubs[0].y = 0;
+ cubs[0].sides[facing::up].m = &cubs[5];
+ cubs[0].sides[facing::up].f = facing::right;
+ cubs[0].sides[facing::left].m = &cubs[3];
+ cubs[0].sides[facing::left].f = facing::right;
+ cubs[0].sides[facing::right].m = &cubs[1];
+ cubs[0].sides[facing::right].f = facing::right;
+ cubs[0].sides[facing::down].m = &cubs[2];
+ cubs[0].sides[facing::down].f = facing::down;
+
// L6R
// L1R 2 R5L
// U3D
- //
+ cubs[1].x = 2 * cube_map::size;
+ cubs[1].y = 0;
+ cubs[1].sides[facing::up].m = &cubs[5];
+ cubs[1].sides[facing::up].f = facing::up;
+ cubs[1].sides[facing::left].m = &cubs[0];
+ cubs[1].sides[facing::left].f = facing::left;
+ cubs[1].sides[facing::right].m = &cubs[4];
+ cubs[1].sides[facing::right].f = facing::left;
+ cubs[1].sides[facing::down].m = &cubs[2];
+ cubs[1].sides[facing::down].f = facing::left;
+
// L1R
// D4U 3 D2U
// L5R
- //
+ cubs[2].x = cube_map::size;
+ cubs[2].y = cube_map::size;
+ cubs[2].sides[facing::up].m = &cubs[0];
+ cubs[2].sides[facing::up].f = facing::up;
+ cubs[2].sides[facing::left].m = &cubs[3];
+ cubs[2].sides[facing::left].f = facing::down;
+ cubs[2].sides[facing::right].m = &cubs[1];
+ cubs[2].sides[facing::right].f = facing::up;
+ cubs[2].sides[facing::down].m = &cubs[4];
+ cubs[2].sides[facing::down].f = facing::down;
+
// U3D
// R1L 4 L5R
// L6R
- //
+ cubs[3].x = 0;
+ cubs[3].y = 2 * cube_map::size;
+ cubs[3].sides[facing::up].m = &cubs[2];
+ cubs[3].sides[facing::up].f = facing::right;
+ cubs[3].sides[facing::left].m = &cubs[0];
+ cubs[3].sides[facing::left].f = facing::right;
+ cubs[3].sides[facing::right].m = &cubs[4];
+ cubs[3].sides[facing::right].f = facing::right;
+ cubs[3].sides[facing::down].m = &cubs[5];
+ cubs[3].sides[facing::down].f = facing::down;
+
// L3R
// L4R 5 R2L
// U6D
- //
+ cubs[4].x = cube_map::size;
+ cubs[4].y = 2 * cube_map::size;
+ cubs[4].sides[facing::up].m = &cubs[2];
+ cubs[4].sides[facing::up].f = facing::up;
+ cubs[4].sides[facing::left].m = &cubs[3];
+ cubs[4].sides[facing::left].f = facing::left;
+ cubs[4].sides[facing::right].m = &cubs[1];
+ cubs[4].sides[facing::right].f = facing::left;
+ cubs[4].sides[facing::down].m = &cubs[5];
+ cubs[4].sides[facing::down].f = facing::left;
+
// L4R
// D1U 6 D5U
// L2R
+ cubs[5].x = 0;
+ cubs[5].y = 3 * cube_map::size;
+ cubs[5].sides[facing::up].m = &cubs[3];
+ cubs[5].sides[facing::up].f = facing::up;
+ cubs[5].sides[facing::left].m = &cubs[0];
+ cubs[5].sides[facing::left].f = facing::down;
+ cubs[5].sides[facing::right].m = &cubs[4];
+ cubs[5].sides[facing::right].f = facing::up;
+ cubs[5].sides[facing::down].m = &cubs[1];
+ cubs[5].sides[facing::down].f = facing::down;
+
+}
+
+std::pair<int64_t, int64_t> day22(line_view file) {
+ per_line(file, [](line_view lv) {
+ const char* p = lv.line;
+ if (*p == ' ' || *p == '.' || *p == '#') {
+ maps.emplace_back(p);
+ }
+ if (*p >= '0' && *p <= '9') {
+ facing f = right;
+ while (*p != '\n') {
+ routes.emplace_back(&p, &f);
+ }
+ }
+ return true;
+ });
+
+ for (auto& m : maps) {
+ tmaps.emplace_back(m);
+ }
+
+ cube_map cubs[6];
+ cube_sample(cubs);
+ // cube_input(cubs);
// facing f = right;
// for(auto& r: routes) {
@@ -224,11 +323,11 @@ std::pair<int64_t, int64_t> day22(line_view file) {
// for(auto&tm : tmaps) {
// tm.print();
// }
-
+
// char fs[] = {'>', 'v', '<', '^'};
const monkey_map& r = maps[p.y];
// printf("person is at x[%d] y[%d] facing[%c]\n", r.start + p.x + 1, p.y + 1, fs[p.f]);
- int64_t n1 = (p.y + 1) * 1000 + 4 * (r.start + p.x + 1) + (int) p.f;
+ int64_t n1 = (p.y + 1) * 1000 + 4 * (r.start + p.x + 1) + (int)p.f;
return {n1, 0};
}
diff --git a/src/2022/day22/aoc.h b/src/2022/day22/aoc.h
index 32dfb83..7264e1e 100644
--- a/src/2022/day22/aoc.h
+++ b/src/2022/day22/aoc.h
@@ -12,14 +12,14 @@ struct monkey_map {
for (int i = 0; i < start; i++) {
printf(" ");
}
- const char*p = line.line;
+ const char* p = line.line;
for (size_t i = 0; i < line.length; i++) {
printf("%c", *(p + i));
}
printf("\n");
}
- monkey_map(const char *p) {
+ monkey_map(const char* p) {
const char* p0 = p;
while (*p == ' ')
p++;
@@ -32,10 +32,10 @@ struct monkey_map {
};
struct trace_map {
- char *p = nullptr;
+ char* p = nullptr;
trace_map(const monkey_map& m) {
- p = (char*) malloc(m.start + m.line.length + 1);
+ p = (char*)malloc(m.start + m.line.length + 1);
for (int i = 0; i < m.start; i++) {
*(p + i) = ' ';
}
@@ -46,10 +46,11 @@ struct trace_map {
}
void print() const noexcept {
- char *px = p;
+ char* px = p;
while (true) {
printf("%c", *px);
- if (*px == '\n') break;
+ if (*px == '\n')
+ break;
px++;
}
}
@@ -73,13 +74,20 @@ struct route {
void print(facing* f) const noexcept {
if (is_step) {
printf("%d", ins.steps);
- }
- else {
+ } else {
switch (*f) {
- case right: printf("%c", ins.f == up ? 'L' : 'R'); break;
- case down: printf("%c", ins.f == left ? 'R' : 'L'); break;
- case left: printf("%c", ins.f == up ? 'R' : 'L'); break;
- case up: printf("%c", ins.f == left ? 'L' : 'R'); break;
+ case right:
+ printf("%c", ins.f == up ? 'L' : 'R');
+ break;
+ case down:
+ printf("%c", ins.f == left ? 'R' : 'L');
+ break;
+ case left:
+ printf("%c", ins.f == up ? 'R' : 'L');
+ break;
+ case up:
+ printf("%c", ins.f == left ? 'L' : 'R');
+ break;
}
*f = ins.f;
}
@@ -150,7 +158,7 @@ struct cube_map {
cube_map* m;
facing f;
} sides[4]; // right, down, left, up
-
+
int x;
int y;
};