introduce bitloops
This commit is contained in:
@@ -388,23 +388,6 @@ public record SwedishGenerator(Rng rng) {
|
||||
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) {
|
||||
var ctx = CTX.get();
|
||||
@@ -460,8 +443,8 @@ public record SwedishGenerator(Rng rng) {
|
||||
stack[sp++] = clueIdx;
|
||||
|
||||
// mark seen
|
||||
if (clueIdx < 64) seenLo |= 1L << clueIdx;
|
||||
else seenHi |= 1L << (clueIdx - 64);
|
||||
if ((clueIdx & 64) == 0) seenLo |= 1L << clueIdx;
|
||||
else seenHi |= 1L << (clueIdx & 63);
|
||||
|
||||
// flood fill / bfs
|
||||
while (sp > 0) {
|
||||
@@ -490,7 +473,7 @@ public record SwedishGenerator(Rng rng) {
|
||||
// push hi-neighbors
|
||||
while (nHi != 0L) {
|
||||
long lsb = nHi & -nHi;
|
||||
int nidx = 64 + Long.numberOfTrailingZeros(nHi); // 64..127
|
||||
int nidx = 64 | Long.numberOfTrailingZeros(nHi); // 64..127
|
||||
seenHi |= lsb;
|
||||
|
||||
stack[sp++] = nidx;
|
||||
@@ -733,8 +716,6 @@ public record SwedishGenerator(Rng rng) {
|
||||
int val = (int) ((pattern >>> (i * 5)) & 31);
|
||||
if (val != 0) {
|
||||
listBuffer[listCount++] = entry.pos[i][val - 1];
|
||||
} else {
|
||||
//System.out.println("?");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user