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 <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
#include "lfinput.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) {
|
void advent2023day01(void) {
|
||||||
size_t sz = 0;
|
size_t sz = 0;
|
||||||
char **lines = get_lines("input/2023/01", &sz);
|
char **lines = get_lines("input/2023/01", &sz);
|
||||||
|
printf("%d\n%d\n", part_one(lines, sz), part_two(lines, sz));
|
||||||
|
|
||||||
|
|
||||||
del_lines(lines);
|
del_lines(lines);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user