This commit is contained in:
Evan Burkey 2023-12-05 10:32:07 -08:00
parent 5df56357c3
commit 3238b8b402
2 changed files with 88 additions and 4 deletions

@ -1 +1 @@
Subproject commit 92a787a899621aa0290ef746035596ad3485c70e
Subproject commit 80ce772c9c9ae5e459c0c10e1fae20738ca2f949

View File

@ -1,13 +1,97 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "lfinput.h"
#include "lfstring.h"
static int part_one(char **lines, size_t sz) {
int p1 = 0;
int first = 0, last = 0;
for (size_t i = 0; i < sz; ++i) {
for (size_t j = 0; j < strlen(lines[i]); ++j) {
if (isdigit(lines[i][j])) {
first = lines[i][j] - '0';
break;
}
}
for (int j = (int)strlen(lines[i]) - 1; j >= 0; --j) {
if (isdigit(lines[i][j])) {
last = lines[i][j] - '0';
p1 += first * 10 + last;
break;
}
}
}
return p1;
}
#define numwords_sz 9
static char *numwords[numwords_sz] = {
"one",
"two",
"three",
"four",
"five",
"six",
"seven",
"eight",
"nine"
};
static int part_two(char **lines, size_t sz) {
int p2 = 0;
int first = 0, last = 0;
for (size_t i = 0; i < sz; ++i) {
for (size_t j = 0; j < strlen(lines[i]); ++j) {
if (isdigit(lines[i][j])) {
first = lines[i][j] - '0';
goto LAST_LOOP;
}
for (size_t k = 0; k < numwords_sz; ++k) {
const char *s = substr(lines[i], j, strlen(numwords[k]));
if (s != NULL && strcmp(s, numwords[k]) == 0) {
first = (int)k + 1;
free(s);
goto LAST_LOOP;
}
free(s);
}
}
LAST_LOOP:
for (int j = (int)strlen(lines[i]) - 1; j >= 0; --j) {
if (isdigit(lines[i][j])) {
last = lines[i][j] - '0';
goto NEXT_LINE;
}
for (size_t k = 0; k < numwords_sz; ++k) {
const char *s = substr(lines[i], j, strlen(numwords[k]));
if (s != NULL && strcmp(s, numwords[k]) == 0) {
last = (int)k + 1;
free(s);
goto NEXT_LINE;
}
free(s);
}
}
NEXT_LINE:
p2 += first * 10 + last;
}
return p2;
}
void advent2023day01(void) {
size_t sz = 0;
char **lines = get_lines("input/2023/01", &sz);
printf("%d\n%d\n", part_one(lines, sz), part_two(lines, sz));
del_lines(lines);
}