diff options
author | kaiwu <kaiwu2004@gmail.com> | 2023-01-03 22:35:39 +0800 |
---|---|---|
committer | kaiwu <kaiwu2004@gmail.com> | 2023-01-03 22:35:39 +0800 |
commit | eb059adcdb9796d6fec0b65c613755e1acfe43b6 (patch) | |
tree | 2a7acf6169f9a93a4a64303ea57308e621dda583 /src | |
parent | 25306ab0a136c351f3880876667a87e9b139539d (diff) | |
download | advent-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.cpp | 199 | ||||
-rw-r--r-- | src/2022/day22/aoc.h | 34 |
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; }; |