introduce bitloops

This commit is contained in:
mike
2026-01-12 04:44:02 +01:00
parent 93628f9b4e
commit ffb8132d8d

View File

@@ -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("?");
}
}