This commit is contained in:
Evan Burkey 2021-09-18 10:59:09 -07:00
parent fc4cacf492
commit d32ece8e9d
4 changed files with 60 additions and 22 deletions

2
.gitmodules vendored
View File

@ -1,3 +1,3 @@
[submodule "lib/libflint"] [submodule "lib/libflint"]
path = lib/libflint path = lib/libflint
url = git@git.fputs.com:fputs/libflint url = https://fputs.com/fputs/libflint

View File

@ -7,10 +7,15 @@ struct Point {
}; };
struct Point new_Point(int, int); struct Point new_Point(int, int);
struct Point *new_Point_p(int, int);
int same_Point(const struct Point*, const struct Point*);
int same_Point_v(const void*, const void*);
char *md5_str(const char*); struct Point *new_Point_p(int, int);
int same_Point(const struct Point *, const struct Point *);
int same_Point_v(const void *, const void *);
char *md5_str(const char *);
char *capture_system(const char *);
#endif #endif

View File

@ -1,10 +1,16 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include "input.h" #include "advent_utility.h"
void advent2015day05(void) { void advent2015day05(void) {
char *input = get_input("input/2015/05"); /* Sometimes, grep really is the best tool */
printf("Solution for Day 05 of 2015 is not completed yet\n"); char *p1 = capture_system(
free(input); "grep -E \"(.*[aeiou]){3}\" ./input/2015/05 | grep \"\\(.\\)\\1\" | egrep -v \"(ab|cd|pq|xy)\" | wc -l");
char *p2 = capture_system("grep \"\\(..\\).*\\1\" ./input/2015/05 | grep \"\\(.\\).\\1\" | wc -l");
printf("%s%s", p1, p2);
free(p1);
free(p2);
} }

View File

@ -1,7 +1,14 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <stdio.h> #include <stdio.h>
#ifdef __linux__
#include <openssl/md5.h>
#else
#include <md5.h> #include <md5.h>
#endif
#include "advent_utility.h" #include "advent_utility.h"
@ -19,7 +26,7 @@ struct Point *new_Point_p(int x, int y) {
return p; return p;
} }
int same_Point(const struct Point* a, const struct Point* b) { int same_Point(const struct Point *a, const struct Point *b) {
if (a->x == b->x && a->y == b->y) { if (a->x == b->x && a->y == b->y) {
return 1; return 1;
} }
@ -27,18 +34,38 @@ int same_Point(const struct Point* a, const struct Point* b) {
} }
int same_Point_v(const void *a, const void *b) { int same_Point_v(const void *a, const void *b) {
return same_Point((const struct Point *)a, (const struct Point *)b); return same_Point((const struct Point *) a, (const struct Point *) b);
} }
char *md5_str(const char* input) { char *md5_str(const char *input) {
unsigned char digest[16]; unsigned char digest[16];
#ifdef __linux__
MD5_CTX context;
MD5_Init(&context);
MD5_Update(&context, input, strlen(input));
MD5_Final(digest, &context);
#else
struct MD5Context context; struct MD5Context context;
MD5Init(&context); MD5Init(&context);
MD5Update(&context, input, strlen(input)); MD5Update(&context, input, strlen(input));
MD5Final(digest, &context); MD5Final(digest, &context);
#endif
char *md5string = malloc(33); char *md5string = malloc(33);
for(int i = 0; i < 16; ++i) { for (int i = 0; i < 16; ++i) {
sprintf(&md5string[i*2], "%02x", (unsigned int)digest[i]); sprintf(&md5string[i * 2], "%02x", (unsigned int) digest[i]);
} }
return md5string; return md5string;
} }
char *capture_system(const char *cmd) {
char *buf = malloc(256);
FILE *tmp = popen(cmd, "r");
if (tmp == NULL) {
printf("failed to open FILE *tmp\n");
exit(1);
}
fgets(buf, 256, tmp);
return buf;
}