Compare commits
2 Commits
55b25e6b64
...
e8010222bd
Author | SHA1 | Date | |
---|---|---|---|
e8010222bd | |||
0e83033a4a |
@ -184,34 +184,26 @@ void day6_render(const struct font * font,
|
||||
0xff'ff0000,
|
||||
};
|
||||
|
||||
if (day6_state.part == 2) {
|
||||
if (day6_state.visited != NULL) {
|
||||
for (int y = 0; y < day6_state.height; y++) {
|
||||
for (int x = 0; x < day6_state.width; x++) {
|
||||
int ix = y * day6_state.width + x;
|
||||
unsigned char c = day6_state.visited[ix];
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
if (c & (1 << i)) {
|
||||
arrow(x,
|
||||
y,
|
||||
i,
|
||||
0xff'222222);
|
||||
}
|
||||
}
|
||||
for (int y = 0; y < day6_state.height; y++) {
|
||||
for (int x = 0; x < day6_state.width; x++) {
|
||||
int ix = y * day6_state.width + x;
|
||||
unsigned char c = day6_state.visited[ix];
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
if (c & (1 << i)) {
|
||||
arrow(x,
|
||||
y,
|
||||
i,
|
||||
0xff'005555);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
arrow(day6_state.guard[1].position.x,
|
||||
day6_state.guard[1].position.y,
|
||||
day6_state.guard[1].facing,
|
||||
base_color[1]);
|
||||
}
|
||||
|
||||
arrow(day6_state.guard[0].position.x,
|
||||
day6_state.guard[0].position.y,
|
||||
day6_state.guard[0].facing,
|
||||
arrow(day6_state.guard[0]->position.x,
|
||||
day6_state.guard[0]->position.y,
|
||||
day6_state.guard[0]->facing,
|
||||
base_color[0]);
|
||||
|
||||
// render text
|
||||
|
@ -118,7 +118,8 @@ void state_init(int part,
|
||||
int stride,
|
||||
int width,
|
||||
int height,
|
||||
unsigned char * visited)
|
||||
unsigned char * visited,
|
||||
struct guard * guard)
|
||||
{
|
||||
day6_state.part = part;
|
||||
day6_state.input = input;
|
||||
@ -126,6 +127,7 @@ void state_init(int part,
|
||||
day6_state.width = width;
|
||||
day6_state.height = height;
|
||||
day6_state.visited = visited;
|
||||
day6_state.guard[0] = guard;
|
||||
}
|
||||
|
||||
int64_t day6_part1(const char * input, int length)
|
||||
@ -141,8 +143,14 @@ int64_t day6_part1(const char * input, int length)
|
||||
guard.facing = UP;
|
||||
guard.position = find_guard(input, length, stride);
|
||||
|
||||
state_init(1, input, stride, width, height, visited);
|
||||
state_init(1, input, stride, width, height, visited, &guard);
|
||||
while (true) {
|
||||
/*
|
||||
if (!day6_state.step)
|
||||
continue;
|
||||
day6_state.step = false;
|
||||
*/
|
||||
|
||||
bool guard_inside_map = position_inside_map(width, height,
|
||||
guard.position.x, guard.position.y);
|
||||
if (!guard_inside_map)
|
||||
@ -211,7 +219,7 @@ int64_t day6_part2(const char * input, int length)
|
||||
guard.facing = UP;
|
||||
guard.position = origin;
|
||||
|
||||
state_init(2, input, stride, width, height, visited);
|
||||
state_init(2, input, stride, width, height, visited, &guard);
|
||||
|
||||
unsigned char obstacles[height * width];
|
||||
for (int i = 0; i < width * height; i++) obstacles[i] = 0;
|
||||
|
@ -30,7 +30,7 @@ struct solution_state {
|
||||
int stride;
|
||||
int width;
|
||||
int height;
|
||||
struct guard guard[2];
|
||||
struct guard * guard[2];
|
||||
unsigned char * visited;
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user