2023-01
This commit is contained in:
parent
5df56357c3
commit
3238b8b402
@ -1 +1 @@
|
||||
Subproject commit 92a787a899621aa0290ef746035596ad3485c70e
|
||||
Subproject commit 80ce772c9c9ae5e459c0c10e1fae20738ca2f949
|
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user