63 lines
No EOL
1.8 KiB
C
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;
|
|
} |