c 2024 3 part 2
This commit is contained in:
parent
99f7f21611
commit
d7fc4fb192
@ -11,58 +11,63 @@ int main() {
|
|||||||
char *line;
|
char *line;
|
||||||
|
|
||||||
int sum = 0;
|
int sum = 0;
|
||||||
|
int cond_sum = 0;
|
||||||
|
|
||||||
char d1[10], d2[10];
|
char d1[10], d2[10];
|
||||||
int d1_index, d2_index;
|
int d1_index, d2_index;
|
||||||
|
|
||||||
while ((line = aoc_read_line()) != NULL) {
|
enum State state = M;
|
||||||
enum State state = M;
|
bool do_mult = true;
|
||||||
char *c = line;
|
char *c = aoc_read_input();
|
||||||
while(*c != '\0') {
|
|
||||||
switch (state) {
|
while(*c != '\0') {
|
||||||
case M:
|
if (memcmp(c, "do()", 4) == 0) do_mult = true;
|
||||||
if (*c == 'm') state = U;
|
else if (memcmp(c, "don't()", 7) == 0) do_mult = false;
|
||||||
break;
|
|
||||||
case U:
|
switch (state) {
|
||||||
if (*c == 'u') state = L;
|
case M:
|
||||||
else state = M;
|
if (*c == 'm') state = U;
|
||||||
break;
|
break;
|
||||||
case L:
|
case U:
|
||||||
if (*c == 'l') state = OPEN;
|
if (*c == 'u') state = L;
|
||||||
else state = M;
|
else state = M;
|
||||||
break;
|
break;
|
||||||
case OPEN:
|
case L:
|
||||||
d1_index = 0;
|
if (*c == 'l') state = OPEN;
|
||||||
d2_index = 0;
|
else state = M;
|
||||||
if (*c == '(') state = D1;
|
break;
|
||||||
else state = M;
|
case OPEN:
|
||||||
break;
|
d1_index = 0;
|
||||||
case D1:
|
d2_index = 0;
|
||||||
if (*c >= '0' && *c <= '9') {
|
if (*c == '(') state = D1;
|
||||||
d1[d1_index++] = *c;
|
else state = M;
|
||||||
}
|
break;
|
||||||
else if(*c == ',') state = D2;
|
case D1:
|
||||||
else state = M;
|
if (*c >= '0' && *c <= '9') {
|
||||||
break;
|
d1[d1_index++] = *c;
|
||||||
case D2:
|
|
||||||
if (*c >= '0' && *c <= '9') {
|
|
||||||
d2[d2_index++] = *c;
|
|
||||||
}
|
|
||||||
else if(*c == ')') {
|
|
||||||
d1[d1_index] = '\0';
|
|
||||||
d2[d2_index] = '\0';
|
|
||||||
sum += atoi(d1) * atoi(d2);
|
|
||||||
state = M;
|
|
||||||
}
|
|
||||||
else state = M;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
c++;
|
else if(*c == ',') state = D2;
|
||||||
|
else state = M;
|
||||||
|
break;
|
||||||
|
case D2:
|
||||||
|
if (*c >= '0' && *c <= '9') {
|
||||||
|
d2[d2_index++] = *c;
|
||||||
|
}
|
||||||
|
else if(*c == ')') {
|
||||||
|
d1[d1_index] = '\0';
|
||||||
|
d2[d2_index] = '\0';
|
||||||
|
sum += atoi(d1) * atoi(d2);
|
||||||
|
if (do_mult) cond_sum += atoi(d1) * atoi(d2);
|
||||||
|
state = M;
|
||||||
|
}
|
||||||
|
else state = M;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
c++;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("Part 1: %d\n", sum);
|
printf("Part 1: %d\n", sum);
|
||||||
// printf("Part 2: %d\n", safe_skip_report_count);
|
printf("Part 2: %d\n", cond_sum);
|
||||||
|
|
||||||
aoc_free();
|
aoc_free();
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user