aboutsummaryrefslogtreecommitdiff
path: root/src/2022/day22/aoc.cpp
diff options
context:
space:
mode:
authorkaiwu <kaiwu2004@gmail.com>2023-01-04 15:37:54 +0800
committerkaiwu <kaiwu2004@gmail.com>2023-01-04 15:37:54 +0800
commite337fcaae99ad418ddb8df719b32227f6d671d62 (patch)
tree2864f521b01721e5e7fcbba23fc41ccb9abff349 /src/2022/day22/aoc.cpp
parent571273ce8198fe9309374a4d34d67974033693ee (diff)
downloadadvent-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.cpp48
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};
}