diff options
author | kaiwu <kaiwu2004@gmail.com> | 2023-01-04 15:37:54 +0800 |
---|---|---|
committer | kaiwu <kaiwu2004@gmail.com> | 2023-01-04 15:37:54 +0800 |
commit | e337fcaae99ad418ddb8df719b32227f6d671d62 (patch) | |
tree | 2864f521b01721e5e7fcbba23fc41ccb9abff349 /src/2022/day22/aoc.cpp | |
parent | 571273ce8198fe9309374a4d34d67974033693ee (diff) | |
download | advent-of-code-e337fcaae99ad418ddb8df719b32227f6d671d62.tar.gz advent-of-code-e337fcaae99ad418ddb8df719b32227f6d671d62.zip |
2022 day22 part2
Diffstat (limited to 'src/2022/day22/aoc.cpp')
-rw-r--r-- | src/2022/day22/aoc.cpp | 48 |
1 files changed, 29 insertions, 19 deletions
diff --git a/src/2022/day22/aoc.cpp b/src/2022/day22/aoc.cpp index fc8589c..91c1957 100644 --- a/src/2022/day22/aoc.cpp +++ b/src/2022/day22/aoc.cpp @@ -195,8 +195,8 @@ void cube_up(int s, person* p, cube_map** pcm) { facing f = (*pcm)->sides[facing::up].f; person p0 = wrap(p, pcm, cm, f); - char fs[] = {'>', 'v', '<', '^'}; - printf("wrap up p0[%d, %d, %c]\n", p0.x, p0.y, fs[p0.f]); + // char fs[] = {'>', 'v', '<', '^'}; + // printf("wrap up p0[%d, %d, %c]\n", p0.x, p0.y, fs[p0.f]); if (cube_get(&p0, cm) == '.') { *p = p0; @@ -227,8 +227,8 @@ void cube_down(int s, person* p, cube_map** pcm) { facing f = (*pcm)->sides[facing::down].f; person p0 = wrap(p, pcm, cm, f); - char fs[] = {'>', 'v', '<', '^'}; - printf("wrap down p0[%d, %d, %c]\n", p0.x, p0.y, fs[p0.f]); + // char fs[] = {'>', 'v', '<', '^'}; + // printf("wrap down p0[%d, %d, %c]\n", p0.x, p0.y, fs[p0.f]); if (cube_get(&p0, cm) == '.') { *p = p0; @@ -259,8 +259,8 @@ void cube_left(int s, person* p, cube_map** pcm) { facing f = (*pcm)->sides[facing::left].f; person p0 = wrap(p, pcm, cm, f); - char fs[] = {'>', 'v', '<', '^'}; - printf("wrap left p0[%d, %d, %c]\n", p0.x, p0.y, fs[p0.f]); + // char fs[] = {'>', 'v', '<', '^'}; + // printf("wrap left p0[%d, %d, %c]\n", p0.x, p0.y, fs[p0.f]); if (cube_get(&p0, cm) == '.') { *p = p0; @@ -291,8 +291,8 @@ void cube_right(int s, person* p, cube_map** pcm) { facing f = (*pcm)->sides[facing::right].f; person p0 = wrap(p, pcm, cm, f); - char fs[] = {'>', 'v', '<', '^'}; - printf("wrap right p0[%d, %d, %c]\n", p0.x, p0.y, fs[p0.f]); + // char fs[] = {'>', 'v', '<', '^'}; + // printf("wrap right p0[%d, %d, %c]\n", p0.x, p0.y, fs[p0.f]); if (cube_get(&p0, cm) == '.') { *p = p0; @@ -308,13 +308,23 @@ void cube_right(int s, person* p, cube_map** pcm) { } } +facing wrap_facing(facing f, char lr) { + switch(f) { + case right: return lr == 'L' ? up : down; + case down: return lr == 'L' ? right : left; + case left: return lr == 'L' ? down : up; + case up: return lr == 'L' ? left : right; + } + return f; +} + void travel_cube(person* p, cube_map** pcm, const route& r) { - char fs[] = {'>', 'v', '<', '^'}; + // char fs[] = {'>', 'v', '<', '^'}; if (r.is_step == false) { - printf("%c", fs[r.ins.f]); - p->f = r.ins.f; + // printf("%c", fs[r.ins.f]); + p->f = wrap_facing(p->f, r.lr); } else { - printf("%d\n", r.ins.steps); + // printf("%d\n", r.ins.steps); switch (p->f) { case up: cube_up(r.ins.steps, p, pcm); @@ -525,8 +535,8 @@ std::pair<int64_t, int64_t> day22(line_view file) { } cube_map cubs[6]; - cube_sample(cubs); - // cube_input(cubs); + // cube_sample(cubs); + cube_input(cubs); // facing f = right; // for(auto& r: routes) { @@ -546,12 +556,12 @@ std::pair<int64_t, int64_t> day22(line_view file) { travel_cube(&pc, &cm, r); } int64_t n2 = (cm->y + pc.y + 1) * 1000 + 4 * (cm->x + pc.x + 1) + (int)pc.f; - char fs[] = {'>', 'v', '<', '^'}; - printf("person is at x[%d %d] y[%d %d] facing[%c]\n", cm->x, pc.x, cm->y, pc.y, fs[pc.f]); + // char fs[] = {'>', 'v', '<', '^'}; + // printf("person is at x[%d %d] y[%d %d] facing[%c]\n", cm->x, pc.x, cm->y, pc.y, fs[pc.f]); - for(auto&tm : tmaps) { - tm.print(); - } + // for(auto&tm : tmaps) { + // tm.print(); + // } return {n1, n2}; } |