1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include "aocdailies.h"
#include "aocutils.h"
struct House {
int row, col;
};
#ifndef MAX_HOUSES
# define MAX_HOUSES 2400
#else
# error MAX_HOUSES already defined
#endif
void aoc201503(char *data, size_t len) {
(void)len; // unused argument
struct House house[MAX_HOUSES] = {0};
unsigned nhouse = 1; // house at [0, 0] visited
int x = 0, y = 0;
while (*data) {
switch (*data) {
default: break;
case '^': y++; break;
|
>
>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "aocdailies.h"
#include "aocutils.h"
struct House {
int row, col;
};
#ifndef MAX_HOUSES
# define MAX_HOUSES 2400
#else
# error MAX_HOUSES already defined
#endif
void aoc201503(char *data, size_t len) {
(void)len; // unused argument
char *data2 = data; // save it
struct House house[MAX_HOUSES] = {0};
unsigned nhouse = 1; // house at [0, 0] visited
int x = 0, y = 0;
while (*data) {
switch (*data) {
default: break;
case '^': y++; break;
|
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
}
house[nhouse].row = x;
house[nhouse].col = y;
nhouse += 1;
}
}
printf("Santa delivered at least 1 present to %u houses.\n", nhouse);
}
#undef MAX_HOUSES
void aoc201502(char *data, size_t len) {
(void)len; // unused argument
unsigned sqf = 0, f = 0;
for (;;) {
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
}
house[nhouse].row = x;
house[nhouse].col = y;
nhouse += 1;
}
}
printf("Santa delivered at least 1 present to %u houses.\n", nhouse);
memset(house, 0, sizeof house);
nhouse = 1;
struct House p[2] = {0};
int who = 1; // 0: santa; 1: santa bot
// go around from the beginning
while (*data2) {
who = 1 - who; // santa; bot; santa; bot; ..., ..., ...
switch (*data2) {
default: break;
case '^': p[who].row++; break;
case 'v': p[who].row--; break;
case '>': p[who].col++; break;
case '<': p[who].col--; break;
}
data2++;
bool visited = false;
for (size_t k = 0; k < nhouse; k++) {
if ((house[k].row == p[who].row) && (house[k].col == p[who].col)) {
visited = true;
break;
}
}
if (!visited) {
if (nhouse == MAX_HOUSES) {
fprintf(stderr, "Need more houses in aoc201503()\n");
exit(EXIT_FAILURE);
}
house[nhouse].row = p[who].row;
house[nhouse].col = p[who].col;
nhouse += 1;
}
}
printf("Santa and santa bot delivered at least 1 present to %u houses.\n", nhouse);
}
#undef MAX_HOUSES
void aoc201502(char *data, size_t len) {
(void)len; // unused argument
unsigned sqf = 0, f = 0;
for (;;) {
|