2024-04
This commit is contained in:
parent
69bed5d6a8
commit
e9b7b4becf
@ -102,17 +102,7 @@ void advent2024day02(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
p1 += part1(a);
|
p1 += part1(a);
|
||||||
//p2 += part2(a);
|
p2 += part2(a);
|
||||||
|
|
||||||
int s = part2(a);
|
|
||||||
if (s) {
|
|
||||||
LL_ITER(a) {
|
|
||||||
int *str = node->data;
|
|
||||||
printf("%d ", *str);
|
|
||||||
}
|
|
||||||
printf("\n");
|
|
||||||
p2 += s;
|
|
||||||
}
|
|
||||||
|
|
||||||
free(sp);
|
free(sp);
|
||||||
ll_destroy(a);
|
ll_destroy(a);
|
||||||
|
@ -1,10 +1,92 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "lfinput.h"
|
#include "lfinput.h"
|
||||||
|
|
||||||
void advent2024day04(void) {
|
#define GRID_SZ 140
|
||||||
char *input = get_input("input/2024/04");
|
char **gd;
|
||||||
printf("Solution for Day 04 of 2024 is not completed yet\n");
|
|
||||||
free(input);
|
static int horz(int x, int y, const char *w) {
|
||||||
|
if (y <= GRID_SZ - 4) {
|
||||||
|
return strncmp(&gd[x][y], w, 4) == 0;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int vert(int x, int y, const char *w) {
|
||||||
|
if (x <= GRID_SZ - 4) {
|
||||||
|
int c = 1;
|
||||||
|
for (int j = 0; j < 4; j++) {
|
||||||
|
if (gd[x + j][y] != w[j]) {
|
||||||
|
c = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int diag_right(int x, int y, const char *w) {
|
||||||
|
if (x <= GRID_SZ - 4 && y >= 3) {
|
||||||
|
int c = 1;
|
||||||
|
for (int j = 0; j < 4; j++) {
|
||||||
|
if (gd[x + j][y - j] != w[j]) {
|
||||||
|
c = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int diag_left(int x, int y, const char *w) {
|
||||||
|
if (x <= GRID_SZ - 4 && y <= GRID_SZ - 4) {
|
||||||
|
int c = 1;
|
||||||
|
for (int j = 0; j < 4; j++) {
|
||||||
|
if (gd[x + j][y + j] != w[j]) {
|
||||||
|
c = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void advent2024day04(void) {
|
||||||
|
int p1 = 0, p2 = 0;
|
||||||
|
size_t sz = GRID_SZ;
|
||||||
|
gd = get_lines("input/2024/04", &sz);
|
||||||
|
|
||||||
|
for (size_t x = 0; x < sz; ++x) {
|
||||||
|
for (size_t y = 0; y < sz; ++y) {
|
||||||
|
p1 += horz(x, y, "XMAS");
|
||||||
|
p1 += horz(x, y, "SAMX");
|
||||||
|
p1 += vert(x, y, "XMAS");
|
||||||
|
p1 += vert(x, y, "SAMX");
|
||||||
|
p1 += diag_left(x, y, "XMAS");
|
||||||
|
p1 += diag_left(x, y, "SAMX");
|
||||||
|
p1 += diag_right(x, y, "XMAS");
|
||||||
|
p1 += diag_right(x, y, "SAMX");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("%d\n", p1);
|
||||||
|
|
||||||
|
for (size_t x = 1; x < sz - 1; ++x) {
|
||||||
|
for (size_t y = 1; y < sz - 1; ++y) {
|
||||||
|
if (gd[x][y] == 'A') {
|
||||||
|
int c = 0;
|
||||||
|
if ((gd[x - 1][y - 1] == 'M' && gd[x + 1][y + 1] == 'S') || (gd[x - 1][y - 1] == 'S' && gd[x + 1][y + 1] == 'M')) {
|
||||||
|
if ((gd[x + 1][y - 1] == 'M' && gd[x - 1][y + 1] == 'S') || (gd[x + 1][y - 1] == 'S' && gd[x - 1][y + 1] == 'M')) {
|
||||||
|
c = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p2 += c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("%d\n", p2);
|
||||||
|
|
||||||
|
del_lines(gd);
|
||||||
}
|
}
|
||||||
|
@ -143,6 +143,7 @@ char **get_matches(char *in, char *pat, size_t *sz, size_t max_matches) {
|
|||||||
printf("PCRE2 match-matching error %d\n", rc);
|
printf("PCRE2 match-matching error %d\n", rc);
|
||||||
pcre2_match_data_free(match_data);
|
pcre2_match_data_free(match_data);
|
||||||
pcre2_code_free(re);
|
pcre2_code_free(re);
|
||||||
|
free_matches(matches, *sz);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user