AdventOfCode/adventofcode/src/main.c
2024-12-01 23:26:50 +01:00

63 lines
No EOL
1.8 KiB
C

/*
main.c
AdventOfCode
Author: thebread (contact@thebread.dev)
Date: 01.12.2024
*/
#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
int main(int argc, char** argv) {
int err = 0;
if(argc == 4) {
int year = strtoimax(argv[1], NULL, 10);
int day = strtoimax(argv[2], NULL, 10);
int part = strtoimax(argv[3], NULL, 10);
// TODO: clean this mess up
if (year != 2024 || (day < 1 || day > 25) || (part < 1 || part > 2)) {
err = 2;
} else {
fprintf(stderr, "Calling year %d day %d part %d\n", year, day, part);
char *template = "lib%d.so";
size_t len = snprintf(NULL, 0, template, year) +1;
char *libname = malloc(len);
snprintf(libname, len, template, year);
void *handle = dlopen(libname, RTLD_LAZY);
if(!handle) {
fprintf(stderr, "Year %s not implemented! (%s)\n", argv[1], libname);
err = 3;
} else {
char *template = "day_%d_part_%d";
size_t len = snprintf(NULL, 0, template, day, part) +1;
char *fname = malloc(len);
snprintf(fname, len, template, day, part);
char *(*part_func)(void) = dlsym(handle, fname);
if(part_func) {
fprintf(stderr, "day %s part %s: %s\n", argv[2], argv[3], part_func());
} else {
fprintf(stderr, "Failed to call %s", fname);
err = 4;
}
free(fname);
dlclose(handle);
}
free(libname);
}
} else {
fprintf(stderr, "Usage: adventofcode <year> <day> <part>\n");
err = 1;
}
return err;
}