From 7faca28009c5efb0ba2b897b34dbdcac47a1a6f3 Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Fri, 25 Apr 2025 10:09:22 +0200 Subject: NISS --- src/solvers/coord/dr.h | 2 +- src/solvers/coord/dreo.h | 2 +- src/solvers/coord/eo.h | 2 +- src/solvers/coord/types_macros.h | 2 +- src/solvers/h48/solve.h | 31 +++++++++++++++---------------- 5 files changed, 19 insertions(+), 20 deletions(-) (limited to 'src/solvers') diff --git a/src/solvers/coord/dr.h b/src/solvers/coord/dr.h index e197f8c..607cc39 100644 --- a/src/solvers/coord/dr.h +++ b/src/solvers/coord/dr.h @@ -24,7 +24,7 @@ STATIC coord_t coordinate_dr = { .gendata = coordinate_dr_gendata, .max = DREOESEP_CLASSES * POW_3_7, .trans_mask = TM_UDFIX, - .moves_mask = MM_ALLMOVES, + .moves_mask = MM18_ALLMOVES, .axistrans = { [AXIS_UD] = TRANS_UFr, [AXIS_RL] = TRANS_RFr, diff --git a/src/solvers/coord/dreo.h b/src/solvers/coord/dreo.h index 2bc8cd1..1cce4e2 100644 --- a/src/solvers/coord/dreo.h +++ b/src/solvers/coord/dreo.h @@ -19,7 +19,7 @@ STATIC coord_t coordinate_dreo = { .gendata = coordinate_dreo_gendata, .max = DRESEP_CLASSES * POW_3_7, .trans_mask = TM_UDRLFIX, - .moves_mask = MM_EO, + .moves_mask = MM18_EO, .axistrans = { [AXIS_UD] = TRANS_UFr, [AXIS_RL] = TRANS_RFr, diff --git a/src/solvers/coord/eo.h b/src/solvers/coord/eo.h index c8faaea..51dfb29 100644 --- a/src/solvers/coord/eo.h +++ b/src/solvers/coord/eo.h @@ -12,7 +12,7 @@ STATIC coord_t coordinate_eo = { .gendata = coordinate_eo_gendata, .max = POW_2_11, .trans_mask = TM_SINGLE(TRANS_UFr), - .moves_mask = MM_ALLMOVES, + .moves_mask = MM18_ALLMOVES, .axistrans = { [AXIS_UD] = TRANS_FDr, [AXIS_RL] = TRANS_URr, diff --git a/src/solvers/coord/types_macros.h b/src/solvers/coord/types_macros.h index 2767dcc..a5ac7f3 100644 --- a/src/solvers/coord/types_macros.h +++ b/src/solvers/coord/types_macros.h @@ -21,7 +21,7 @@ typedef struct { bool (*isnasty)(uint64_t, const unsigned char *); size_t (*gendata)(unsigned char *); uint64_t max; - uint32_t moves_mask; + uint64_t moves_mask; uint64_t trans_mask; uint8_t axistrans[3]; bool (*is_admissible)(const solution_moves_t[static 1]); diff --git a/src/solvers/h48/solve.h b/src/solvers/h48/solve.h index 86c590a..e3ef9b9 100644 --- a/src/solvers/h48/solve.h +++ b/src/solvers/h48/solve.h @@ -25,8 +25,8 @@ typedef struct { const unsigned char *h48data; const unsigned char *h48data_fallback_h0k4; const unsigned char *h48data_fallback_eoesep; - uint32_t movemask_normal; - uint32_t movemask_inverse; + uint64_t movemask_normal; + uint64_t movemask_inverse; int64_t nodes_visited; int64_t table_fallbacks; int64_t table_lookups; @@ -72,7 +72,7 @@ solve_h48_stop(dfsarg_solve_h48_t arg[static 1]) arg->solution_settings->optimal) return true; - arg->movemask_normal = arg->movemask_inverse = MM_ALLMOVES; + arg->movemask_normal = arg->movemask_inverse = MM18_ALLMOVES; arg->nodes_visited++; /* Preliminary probing using last computed bound, if possible */ @@ -113,7 +113,7 @@ solve_h48_stop(dfsarg_solve_h48_t arg[static 1]) if (arg->lb_inverse > target) return true; nh = arg->lb_inverse == target; - arg->movemask_normal = nh * MM_NOHALFTURNS + (1-nh) * MM_ALLMOVES; + arg->movemask_normal = nh * MM18_NOHALFTURNS + (1-nh) * MM18_ALLMOVES; /* Normal probing */ @@ -141,7 +141,7 @@ solve_h48_stop(dfsarg_solve_h48_t arg[static 1]) if (arg->lb_normal > target) return true; nh = arg->lb_normal == target; - arg->movemask_inverse = nh * MM_NOHALFTURNS + (1-nh) * MM_ALLMOVES; + arg->movemask_inverse = nh * MM18_NOHALFTURNS + (1-nh) * MM18_ALLMOVES; return false; } @@ -151,7 +151,7 @@ solve_h48_dfs(dfsarg_solve_h48_t arg[static 1]) { int64_t ret, n; uint8_t m, nm, lbn, lbi; - uint32_t mm_normal, mm_inverse; + uint64_t mm_normal, mm_inverse; bool ulbi, ulbn; cube_t backup_cube, backup_inverse; @@ -191,7 +191,7 @@ solve_h48_dfs(dfsarg_solve_h48_t arg[static 1]) if (popcount_u32(mm_normal) <= popcount_u32(mm_inverse)) { arg->solution_moves->nmoves++; for (m = 0; m < 18; m++) { - if (!(mm_normal & (UINT32_C(1) << (uint32_t)m))) + if (!(mm_normal & MM_SINGLE(m))) continue; arg->solution_moves->moves[ arg->solution_moves->nmoves-1] = m; @@ -209,7 +209,7 @@ solve_h48_dfs(dfsarg_solve_h48_t arg[static 1]) } else { arg->solution_moves->npremoves++; for (m = 0; m < 18; m++) { - if(!(mm_inverse & (UINT32_C(1) << (uint32_t)m))) + if(!(mm_inverse & MM_SINGLE(m))) continue; arg->solution_moves->premoves[ arg->solution_moves->npremoves-1] = m; @@ -258,8 +258,8 @@ solve_h48_runthread(void *arg) dfsarg->lb_inverse = 0; dfsarg->use_lb_normal = false; dfsarg->use_lb_inverse = false; - dfsarg->movemask_normal = MM_ALLMOVES; - dfsarg->movemask_inverse = MM_ALLMOVES; + dfsarg->movemask_normal = MM18_ALLMOVES; + dfsarg->movemask_inverse = MM18_ALLMOVES; solve_h48_dfs(dfsarg); } @@ -278,7 +278,7 @@ solve_h48_maketasks( int r; int64_t appret; uint8_t m, t; - uint32_t mm; + uint64_t mm; cube_t backup_cube; solution_moves_t moves; @@ -308,7 +308,7 @@ solve_h48_maketasks( } if (maketasks_arg->nmoves == 0) { - mm = MM_ALLMOVES; + mm = MM18_ALLMOVES; } else { m = maketasks_arg->moves[maketasks_arg->nmoves-1]; mm = allowedmask[movebase(m)]; @@ -317,7 +317,7 @@ solve_h48_maketasks( maketasks_arg->nmoves++; backup_cube = maketasks_arg->cube; for (m = 0; m < 18; m++) { - if (!(mm & (1 << m))) + if (!(mm & MM_SINGLE(m))) continue; maketasks_arg->moves[maketasks_arg->nmoves-1] = m; maketasks_arg->cube = move(backup_cube, m); @@ -330,9 +330,8 @@ solve_h48_maketasks( if (maketasks_arg->nmoves == 1) for (t = 0; t < NTRANS; t++) if (solve_arg->solution_settings->tmask & - (UINT64_C(1) << (uint64_t)t)) - mm &= ~(UINT32_C(1) << - (uint32_t)transform_move(m, t)); + TM_SINGLE(t)) + mm &= ~MM_SINGLE(transform_move(m, t)); } maketasks_arg->nmoves--; maketasks_arg->cube = backup_cube; -- cgit v1.3