introduce bitloops
This commit is contained in:
@@ -388,23 +388,6 @@ public record SwedishGenerator(Rng rng) {
|
|||||||
return slots;
|
return slots;
|
||||||
}
|
}
|
||||||
|
|
||||||
static long fitting(Grid grid, int clueIdx, int[] covH, int[] covV) {
|
|
||||||
var d = grid.digitAt(clueIdx);
|
|
||||||
var nbrs16 = OFFSETS[d];
|
|
||||||
long packed = nbrs16.path()[clueIdx];
|
|
||||||
int n = (int) (packed >>> 56) * 7, k, idx;
|
|
||||||
var horiz = Slot.horiz(d) ? covH : covV;
|
|
||||||
for (k = 0; k < n; k += 7) {
|
|
||||||
idx = (int) ((packed >>> (k)) & 0x7F);
|
|
||||||
if (grid.isClue(idx)) break;
|
|
||||||
horiz[idx] += 1;
|
|
||||||
}
|
|
||||||
if (k > 0) {
|
|
||||||
if (k < MIN_LEN7) return 8001L;
|
|
||||||
return 1L;
|
|
||||||
}
|
|
||||||
return 0L;
|
|
||||||
}
|
|
||||||
|
|
||||||
long maskFitness(Grid grid) {
|
long maskFitness(Grid grid) {
|
||||||
var ctx = CTX.get();
|
var ctx = CTX.get();
|
||||||
@@ -460,8 +443,8 @@ public record SwedishGenerator(Rng rng) {
|
|||||||
stack[sp++] = clueIdx;
|
stack[sp++] = clueIdx;
|
||||||
|
|
||||||
// mark seen
|
// mark seen
|
||||||
if (clueIdx < 64) seenLo |= 1L << clueIdx;
|
if ((clueIdx & 64) == 0) seenLo |= 1L << clueIdx;
|
||||||
else seenHi |= 1L << (clueIdx - 64);
|
else seenHi |= 1L << (clueIdx & 63);
|
||||||
|
|
||||||
// flood fill / bfs
|
// flood fill / bfs
|
||||||
while (sp > 0) {
|
while (sp > 0) {
|
||||||
@@ -490,7 +473,7 @@ public record SwedishGenerator(Rng rng) {
|
|||||||
// push hi-neighbors
|
// push hi-neighbors
|
||||||
while (nHi != 0L) {
|
while (nHi != 0L) {
|
||||||
long lsb = nHi & -nHi;
|
long lsb = nHi & -nHi;
|
||||||
int nidx = 64 + Long.numberOfTrailingZeros(nHi); // 64..127
|
int nidx = 64 | Long.numberOfTrailingZeros(nHi); // 64..127
|
||||||
seenHi |= lsb;
|
seenHi |= lsb;
|
||||||
|
|
||||||
stack[sp++] = nidx;
|
stack[sp++] = nidx;
|
||||||
@@ -733,8 +716,6 @@ public record SwedishGenerator(Rng rng) {
|
|||||||
int val = (int) ((pattern >>> (i * 5)) & 31);
|
int val = (int) ((pattern >>> (i * 5)) & 31);
|
||||||
if (val != 0) {
|
if (val != 0) {
|
||||||
listBuffer[listCount++] = entry.pos[i][val - 1];
|
listBuffer[listCount++] = entry.pos[i][val - 1];
|
||||||
} else {
|
|
||||||
//System.out.println("?");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user