From e3108647e28d336e3814821d338ec3a841a8343c Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Tue, 14 Dec 2021 08:27:58 +0100 Subject: random attempts --- src/steps.c | 56 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 29 insertions(+), 27 deletions(-) (limited to 'src') diff --git a/src/steps.c b/src/steps.c index ccf33df..7d1823e 100644 --- a/src/steps.c +++ b/src/steps.c @@ -1162,74 +1162,76 @@ static int estimate_optimal_HTM(DfsArg *arg) { int target, ret; - Move lbase; + Move bl1; Cube aux; - target = arg->d - arg->current_alg->len; - ret = -1; - arg->inverse = (Cube){0}; + ret = -1; + target = arg->d - arg->current_alg->len; + bl1 = base_move(arg->last1); + arg->inverse = (Cube){0}; arg->badmovesinv = 0; - arg->badmoves = 0; + arg->badmoves = 0; + /* Corners */ arg->ed->corners = ptableval(&pd_corners_HTM, arg->cube); UPDATECHECKSTOP(ret, arg->ed->corners, target); + /* Normal probing */ arg->ed->normal_ud = ptableval(&pd_khuge_HTM, arg->cube); UPDATECHECKSTOP(ret, arg->ed->normal_ud, target); - if (arg->ed->normal_ud == target) { - arg->badmovesinv |= (1<cube); arg->ed->normal_fb = ptableval(&pd_khuge_HTM, aux); UPDATECHECKSTOP(ret, arg->ed->normal_fb, target); - if (arg->ed->normal_fb == target) { - arg->badmovesinv |= (1<cube); arg->ed->normal_rl = ptableval(&pd_khuge_HTM, aux); UPDATECHECKSTOP(ret, arg->ed->normal_rl, target); - if (arg->ed->normal_rl == target) { - arg->badmovesinv |= (1<ed->normal_ud == arg->ed->normal_fb && arg->ed->normal_fb == arg->ed->normal_rl) UPDATECHECKSTOP(ret, arg->ed->normal_ud + 1, target); - /* TODO: avoid computation of inverse if unnecessary */ - lbase = base_move(arg->last1); + /* Inverse probing */ arg->inverse = inverse_cube(arg->cube); - - if ((lbase != U && lbase != D) || (arg->ed->inverse_ud == -1)) { + if ((bl1 != U && bl1 != D) || (arg->ed->inverse_ud == -1)) { arg->ed->inverse_ud = ptableval(&pd_khuge_HTM, arg->inverse); } UPDATECHECKSTOP(ret, arg->ed->inverse_ud, target); - - if ((lbase != F && lbase != B) || (arg->ed->inverse_fb == -1)) { + if ((bl1 != F && bl1 != B) || (arg->ed->inverse_fb == -1)) { aux = apply_trans(fd, arg->inverse); arg->ed->inverse_fb = ptableval(&pd_khuge_HTM, aux); } UPDATECHECKSTOP(ret, arg->ed->inverse_fb, target); - - if ((lbase != R && lbase != L) || (arg->ed->inverse_rl == -1)) { + if ((bl1 != R && bl1 != L) || (arg->ed->inverse_rl == -1)) { aux = apply_trans(rf, arg->inverse); arg->ed->inverse_rl = ptableval(&pd_khuge_HTM, aux); } UPDATECHECKSTOP(ret, arg->ed->inverse_rl, target); + /* Michel de Bondt's trick*/ if (arg->ed->inverse_ud == arg->ed->inverse_fb && arg->ed->inverse_fb == arg->ed->inverse_rl) { UPDATECHECKSTOP(ret, arg->ed->inverse_ud + 1, target); } + /* nxopt trick */ + if (arg->ed->normal_ud == target) { + arg->badmovesinv |= (1<ed->normal_fb == target) { + arg->badmovesinv |= (1<ed->normal_rl == target) { + arg->badmovesinv |= (1<ed->inverse_ud == target) { arg->badmoves |= (1<