Skip to content

Commit

Permalink
Better labels.
Browse files Browse the repository at this point in the history
  • Loading branch information
rokicki committed Aug 12, 2023
1 parent 56442cf commit fb864c8
Showing 1 changed file with 48 additions and 50 deletions.
98 changes: 48 additions & 50 deletions src/cpp/solve.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,67 +69,65 @@ int solveworker::possibsolution(const puzdef &pd, int sp) {
int solveworker::solveiter(const puzdef &pd, prunetable &pt, int togo, int sp, int st) {
int v, mi, m ;
ull mask, skipbase ;
top:
lookups++ ;
v = pt.lookup(posns[sp], looktmp) ;
if (v > togo + 1) {
v = -1 ;
} else if (v > togo) {
v = 0 ;
} else if (v == 0 && togo == 1 && didprepass && pd.comparepos(posns[sp], pd.solved) == 0) {
v = 0 ;
} else if (v == 0 && togo > 0 && noearlysolutions && pd.comparepos(posns[sp], pd.solved) == 0) {
v = 0 ;
} else if (togo == 0) {
v = possibsolution(pd, sp) ;
} else {
mask = canonmask[st] ;
skipbase = 0 ;
mi = -1 ;
goto topm ;
}
returnval:
if (solvestates.size() == 0)
return v ;
{
auto &ss = solvestates[solvestates.size()-1] ;
togo++ ;
sp-- ;
st = ss.st ;
mi = ss.mi ;
mask = ss.mask ;
skipbase = ss.skipbase ;
}
solvestates.pop_back() ;
if (v == 1)
goto returnval ;
if (!quarter && v == -1) {
while (1) {
lookups++ ;
v = pt.lookup(posns[sp], looktmp) ;
if (v > togo + 1) {
v = -1 ;
} else if (v > togo) {
v = 0 ;
} else if (v == 0 && togo == 1 && didprepass && pd.comparepos(posns[sp], pd.solved) == 0) {
v = 0 ;
} else if (v == 0 && togo > 0 && noearlysolutions && pd.comparepos(posns[sp], pd.solved) == 0) {
v = 0 ;
} else if (togo == 0) {
v = possibsolution(pd, sp) ;
} else {
mask = canonmask[st] ;
skipbase = 0 ;
mi = -1 ;
goto downstack ;
}
upstack:
if (solvestates.size() == 0)
return v ;
{
auto &ss = solvestates[solvestates.size()-1] ;
togo++ ;
sp-- ;
st = ss.st ;
mi = ss.mi ;
mask = ss.mask ;
skipbase = ss.skipbase ;
}
solvestates.pop_back() ;
if (v == 1)
goto upstack ;
if (!quarter && v == -1) {
m = randomstart ? randomized[togo][mi] : mi ;
if (pd.moves[m].base < 64)
skipbase |= 1LL << pd.moves[m].base ;
}
downstack:
mi++ ;
if (mi >= (int)pd.moves.size()) {
v = 0 ;
goto upstack ;
}
m = randomstart ? randomized[togo][mi] : mi ;
if (pd.moves[m].base < 64)
skipbase |= 1LL << pd.moves[m].base ;
}
topm:
mi++ ;
if (mi >= (int)pd.moves.size()) {
v = 0 ;
goto returnval ;
}
m = randomstart ? randomized[togo][mi] : mi ;
{
const moove &mv = pd.moves[m] ;
if (!quarter && mv.base < 64 && ((skipbase >> mv.base) & 1))
goto topm ;
goto downstack ;
if ((mask >> mv.cs) & 1)
goto topm ;
goto downstack ;
pd.mul(posns[sp], mv.pos, posns[sp+1]) ;
if (!pd.legalstate(posns[sp+1]))
goto topm ;
goto downstack ;
movehist[sp] = m ;
solvestates.push_back({st, mi, mask, skipbase}) ;
togo-- ;
sp++ ;
st = canonnext[st][mv.cs] ;
goto top ;
}
}
int solveworker::solvestart(const puzdef &pd, prunetable &pt, int w) {
Expand Down

0 comments on commit fb864c8

Please sign in to comment.