/* main.c AdventOfCode Author: thebread (contact@thebread.dev) Date: 01.12.2024 */ #include #include #include #include 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 \n"); err = 1; } return err; }