diff --git a/src/main/java/puzzle/SwedishGenerator.java b/src/main/java/puzzle/SwedishGenerator.java index bcc5f9c..2fd57c2 100644 --- a/src/main/java/puzzle/SwedishGenerator.java +++ b/src/main/java/puzzle/SwedishGenerator.java @@ -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("?"); } }