nissy-core

The "engine" of nissy, including the H48 optimal solver.
git clone https://git.tronto.net/nissy-core
Download | Log | Files | Refs | README | LICENSE

commit d1747a694ea65a463d6e9b6f7408ae969a8bfff5
parent 22282840b74d434b79e87d82e4ea075baa82a51c
Author: Sebastiano Tronto <sebastiano@tronto.net>
Date:   Thu,  7 Aug 2025 17:13:49 +0200

Added solver aliases

Diffstat:
Msrc/nissy.c | 28++++++++++++++--------------
Msrc/solvers/dispatch.h | 46+++++++++++++++++++++++++++++++++++++++-------
Mtools/401_solvetest_EO_FB/solvetest.c | 2+-
Mtools/402_solvetest_EO_RL/solvetest.c | 2+-
Mtools/403_solvetest_EO_UD/solvetest.c | 2+-
Mtools/404_solvetest_DR_UD/solvetest.c | 2+-
Mtools/405_solvetest_DR_RL/solvetest.c | 2+-
Mtools/406_solvetest_DR_FB/solvetest.c | 2+-
Mtools/407_solvetest_DRSLICE_UD/solvetest.c | 2+-
Mtools/408_solvetest_DRSLICE_RL/solvetest.c | 2+-
Mtools/409_solvetest_DRSLICE_FB/solvetest.c | 2+-
Mtools/410_solvetest_DREO_UD_from_FB/solvetest.c | 2+-
Mtools/411_solvetest_DREO_RL_from_FB/solvetest.c | 2+-
Mtools/412_solvetest_DREO_UD_from_RL/solvetest.c | 2+-
Mtools/413_solvetest_DREO_FB_from_RL/solvetest.c | 2+-
Mtools/414_solvetest_DREO_RL_from_UD/solvetest.c | 2+-
Mtools/415_solvetest_DREO_FB_from_UD/solvetest.c | 2+-
Mtools/416_solvetest_DRFIN_UD/solvetest.c | 2+-
Mtools/417_solvetest_DRFIN_RL/solvetest.c | 2+-
Mtools/418_solvetest_DRFIN_FB/solvetest.c | 2+-
Mtools/419_solvetest_HTR_from_UD/solvetest.c | 2+-
21 files changed, 72 insertions(+), 40 deletions(-)

diff --git a/src/nissy.c b/src/nissy.c @@ -213,15 +213,15 @@ nissy_getcube( STATIC long long nissy_dataid(const char *solver, char dataid[static NISSY_SIZE_DATAID]) { - solver_dispatch_t *dispatch; + solver_dispatch_t dispatch; dispatch = match_solver(solver); - if (dispatch == NULL) { + if (dispatch.prefix == NULL) { LOG("[dataid] Unknown solver %s\n", solver); return NISSY_ERROR_INVALID_SOLVER; } - return dispatch->dataid(solver, dataid); + return dispatch.dataid(dispatch.solvername, dataid); } long long @@ -255,7 +255,7 @@ nissy_gendata_unsafe( unsigned char *data ) { - solver_dispatch_t *dispatch; + solver_dispatch_t dispatch; if (solver == NULL) { LOG("[gendata] Error: 'solver' argument is NULL\n"); @@ -268,12 +268,12 @@ nissy_gendata_unsafe( } dispatch = match_solver(solver); - if (dispatch == NULL) { + if (dispatch.prefix == NULL) { LOG("[gendata] Unknown solver %s\n", solver); return NISSY_ERROR_INVALID_SOLVER; } - return dispatch->gendata(solver, data_size, data); + return dispatch.gendata(dispatch.solvername, data_size, data); } long long @@ -283,15 +283,15 @@ nissy_checkdata( const unsigned char *data ) { - solver_dispatch_t *dispatch; + solver_dispatch_t dispatch; dispatch = match_solver(solver); - if (dispatch == NULL) { + if (dispatch.prefix == NULL) { LOG("[checkdata] Unknown solver %s\n", solver); return NISSY_ERROR_INVALID_SOLVER; } - return dispatch->checkdata(solver, data_size, data); + return dispatch.checkdata(dispatch.solvername, data_size, data); } long long @@ -315,7 +315,7 @@ nissy_solve( { oriented_cube_t oc; int t; - solver_dispatch_t *dispatch; + solver_dispatch_t dispatch; if (solver == NULL) { LOG("[solve] Error: 'solver' argument is NULL\n"); @@ -359,13 +359,13 @@ nissy_solve( } dispatch = match_solver(solver); - if (dispatch == NULL) { + if (dispatch.prefix == NULL) { LOG("[solve] Error: unknown solver '%s'\n", solver); return NISSY_ERROR_INVALID_SOLVER; } - return dispatch->solve(oc, solver, nissflag, minmoves, maxmoves, - maxsols, optimal, t, data_size, data, sols_size, sols, stats, - poll_status, poll_status_data); + return dispatch.solve(oc, dispatch.solvername, nissflag, minmoves, + maxmoves, maxsols, optimal, t, data_size, data, sols_size, sols, + stats, poll_status, poll_status_data); } long long diff --git a/src/solvers/dispatch.h b/src/solvers/dispatch.h @@ -1,4 +1,5 @@ typedef struct { + const char *solvername; const char *prefix; long long (*dataid)(const char *, char [static NISSY_SIZE_DATAID]); long long (*gendata)( @@ -12,7 +13,7 @@ typedef struct { int (*)(void *), void *); } solver_dispatch_t; -STATIC solver_dispatch_t *match_solver(const char *); +STATIC solver_dispatch_t match_solver(const char *); solver_dispatch_t solver_dispatchers[] = { { @@ -41,20 +42,51 @@ solver_dispatch_t solver_dispatchers[] = { } }; -STATIC solver_dispatch_t * +const char *solver_aliases[][2] = { + { "optimal", "h48h7k2" }, + { "eofb", "coord_EO_UF" }, + { "eorl", "coord_EO_UR" }, + { "eoud", "coord_EO_FD" }, + { "drud", "coord_DR_UF" }, + { "drrl", "coord_DR_RF" }, + { "drfb", "coord_DR_FD" }, + { "drudslice", "coord_DRSLICE_UF" }, + { "drrlslice", "coord_DRSLICE_LF" }, + { "drfbslice", "coord_DRSLICE_BU" }, + { "drud-eofb", "coord_DREO_UF" }, + { "drrl-eofb", "coord_DREO_RF" }, + { "drud-eorl", "coord_DREO_UR" }, + { "drfb-eorl", "coord_DREO_RU" }, + { "drrl-eoud", "coord_DREO_FR" }, + { "drfb-eoud", "coord_DREO_FD" }, + { "drudfin", "mcoord_DRFIN_UF" }, + { "drrlfin", "mcoord_DRFIN_LF" }, + { "drfbfin", "mcoord_DRFIN_BU" }, + { "htr-drud", "coord_HTR_UF" }, + { "htr-drrl", "coord_HTR_LF" }, + { "htr-drfb", "coord_HTR_BU" }, + { NULL, NULL } +}; + +STATIC solver_dispatch_t match_solver(const char *name) { const char *prefix; + solver_dispatch_t ret; int i; - if (name == NULL) - return NULL; + for (i = 0; solver_aliases[i][0] != NULL; i++) + if (!strcmp(name, solver_aliases[i][0])) + return match_solver(solver_aliases[i][1]); for (i = 0; solver_dispatchers[i].prefix != NULL; i++) { prefix = solver_dispatchers[i].prefix; - if (!strncmp(name, prefix, strlen(prefix))) - return &solver_dispatchers[i]; + if (!strncmp(name, prefix, strlen(prefix))) { + ret = solver_dispatchers[i]; + ret.solvername = name; + return ret; + } } - return NULL; + return solver_dispatchers[i]; } diff --git a/tools/401_solvetest_EO_FB/solvetest.c b/tools/401_solvetest_EO_FB/solvetest.c @@ -1,4 +1,4 @@ -#define SOLVER "coord_EO_UF" +#define SOLVER "eofb" #define NISSFLAG NISSY_NISSFLAG_ALL #define MINMOVES 0 #define MAXMOVES 20 diff --git a/tools/402_solvetest_EO_RL/solvetest.c b/tools/402_solvetest_EO_RL/solvetest.c @@ -1,4 +1,4 @@ -#define SOLVER "coord_EO_UR" +#define SOLVER "eorl" #define NISSFLAG NISSY_NISSFLAG_ALL #define MINMOVES 0 #define MAXMOVES 20 diff --git a/tools/403_solvetest_EO_UD/solvetest.c b/tools/403_solvetest_EO_UD/solvetest.c @@ -1,4 +1,4 @@ -#define SOLVER "coord_EO_FD" +#define SOLVER "eoud" #define NISSFLAG NISSY_NISSFLAG_ALL #define MINMOVES 0 #define MAXMOVES 20 diff --git a/tools/404_solvetest_DR_UD/solvetest.c b/tools/404_solvetest_DR_UD/solvetest.c @@ -1,4 +1,4 @@ -#define SOLVER "coord_DR_UF" +#define SOLVER "drud" #define NISSFLAG NISSY_NISSFLAG_LINEAR #define MINMOVES 0 #define MAXMOVES 20 diff --git a/tools/405_solvetest_DR_RL/solvetest.c b/tools/405_solvetest_DR_RL/solvetest.c @@ -1,4 +1,4 @@ -#define SOLVER "coord_DR_RF" +#define SOLVER "drrl" #define NISSFLAG NISSY_NISSFLAG_LINEAR #define MINMOVES 0 #define MAXMOVES 20 diff --git a/tools/406_solvetest_DR_FB/solvetest.c b/tools/406_solvetest_DR_FB/solvetest.c @@ -1,4 +1,4 @@ -#define SOLVER "coord_DR_FD" +#define SOLVER "drfb" #define NISSFLAG NISSY_NISSFLAG_LINEAR #define MINMOVES 0 #define MAXMOVES 20 diff --git a/tools/407_solvetest_DRSLICE_UD/solvetest.c b/tools/407_solvetest_DRSLICE_UD/solvetest.c @@ -1,4 +1,4 @@ -#define SOLVER "coord_DRSLICE_UF" +#define SOLVER "drudslice" #define NISSFLAG NISSY_NISSFLAG_NORMAL #define MINMOVES 0 #define MAXMOVES 20 diff --git a/tools/408_solvetest_DRSLICE_RL/solvetest.c b/tools/408_solvetest_DRSLICE_RL/solvetest.c @@ -1,4 +1,4 @@ -#define SOLVER "coord_DRSLICE_LF" +#define SOLVER "drrlslice" #define NISSFLAG NISSY_NISSFLAG_NORMAL #define MINMOVES 0 #define MAXMOVES 20 diff --git a/tools/409_solvetest_DRSLICE_FB/solvetest.c b/tools/409_solvetest_DRSLICE_FB/solvetest.c @@ -1,4 +1,4 @@ -#define SOLVER "coord_DRSLICE_BU" +#define SOLVER "drfbslice" #define NISSFLAG NISSY_NISSFLAG_NORMAL #define MINMOVES 0 #define MAXMOVES 20 diff --git a/tools/410_solvetest_DREO_UD_from_FB/solvetest.c b/tools/410_solvetest_DREO_UD_from_FB/solvetest.c @@ -1,4 +1,4 @@ -#define SOLVER "coord_DREO_UF" +#define SOLVER "drud-eofb" #define NISSFLAG NISSY_NISSFLAG_LINEAR #define MINMOVES 0 #define MAXMOVES 20 diff --git a/tools/411_solvetest_DREO_RL_from_FB/solvetest.c b/tools/411_solvetest_DREO_RL_from_FB/solvetest.c @@ -1,4 +1,4 @@ -#define SOLVER "coord_DREO_RF" +#define SOLVER "drrl-eofb" #define NISSFLAG NISSY_NISSFLAG_LINEAR #define MINMOVES 0 #define MAXMOVES 20 diff --git a/tools/412_solvetest_DREO_UD_from_RL/solvetest.c b/tools/412_solvetest_DREO_UD_from_RL/solvetest.c @@ -1,4 +1,4 @@ -#define SOLVER "coord_DREO_UR" +#define SOLVER "drud-eorl" #define NISSFLAG NISSY_NISSFLAG_LINEAR #define MINMOVES 0 #define MAXMOVES 20 diff --git a/tools/413_solvetest_DREO_FB_from_RL/solvetest.c b/tools/413_solvetest_DREO_FB_from_RL/solvetest.c @@ -1,4 +1,4 @@ -#define SOLVER "coord_DREO_RU" +#define SOLVER "drfb-eorl" #define NISSFLAG NISSY_NISSFLAG_LINEAR #define MINMOVES 0 #define MAXMOVES 20 diff --git a/tools/414_solvetest_DREO_RL_from_UD/solvetest.c b/tools/414_solvetest_DREO_RL_from_UD/solvetest.c @@ -1,4 +1,4 @@ -#define SOLVER "coord_DREO_FR" +#define SOLVER "drrl-eoud" #define NISSFLAG NISSY_NISSFLAG_LINEAR #define MINMOVES 0 #define MAXMOVES 20 diff --git a/tools/415_solvetest_DREO_FB_from_UD/solvetest.c b/tools/415_solvetest_DREO_FB_from_UD/solvetest.c @@ -1,4 +1,4 @@ -#define SOLVER "coord_DREO_FD" +#define SOLVER "drfb-eoud" #define NISSFLAG NISSY_NISSFLAG_LINEAR #define MINMOVES 0 #define MAXMOVES 20 diff --git a/tools/416_solvetest_DRFIN_UD/solvetest.c b/tools/416_solvetest_DRFIN_UD/solvetest.c @@ -1,4 +1,4 @@ -#define SOLVER "mcoord_DRFIN_UF" +#define SOLVER "drudfin" #define NISSFLAG NISSY_NISSFLAG_NORMAL #define MINMOVES 0 #define MAXMOVES 20 diff --git a/tools/417_solvetest_DRFIN_RL/solvetest.c b/tools/417_solvetest_DRFIN_RL/solvetest.c @@ -1,4 +1,4 @@ -#define SOLVER "mcoord_DRFIN_LF" +#define SOLVER "drrlfin" #define NISSFLAG NISSY_NISSFLAG_NORMAL #define MINMOVES 0 #define MAXMOVES 20 diff --git a/tools/418_solvetest_DRFIN_FB/solvetest.c b/tools/418_solvetest_DRFIN_FB/solvetest.c @@ -1,4 +1,4 @@ -#define SOLVER "mcoord_DRFIN_BU" +#define SOLVER "drfbfin" #define NISSFLAG NISSY_NISSFLAG_NORMAL #define MINMOVES 0 #define MAXMOVES 20 diff --git a/tools/419_solvetest_HTR_from_UD/solvetest.c b/tools/419_solvetest_HTR_from_UD/solvetest.c @@ -1,4 +1,4 @@ -#define SOLVER "coord_HTR_UF" +#define SOLVER "htr-drud" #define NISSFLAG NISSY_NISSFLAG_ALL #define MINMOVES 0 #define MAXMOVES 20