introduce bitloops

This commit is contained in:
mike
2026-01-10 10:16:12 +01:00
parent 00c6f387a2
commit fb1f45829f

View File

@@ -221,8 +221,8 @@ public record SwedishGenerator(Rng rng) {
int clueCount() { return Long.bitCount(bo[0]) + Long.bitCount(bo[1]); }
void forEachSlot(SlotVisitor visitor) {
for (var lo = bo[0]; lo != 0; lo &= lo - 1) processSlot(this, visitor, Long.numberOfTrailingZeros(lo));
for (var hi = bo[1]; hi != 0; hi &= hi - 1) processSlot(this, visitor, 64 + Long.numberOfTrailingZeros(hi));
for (var lo = bo[0]; lo != 0L; lo &= lo - 1) processSlot(this, visitor, Long.numberOfTrailingZeros(lo));
for (var hi = bo[1]; hi != 0L; hi &= hi - 1) processSlot(this, visitor, 64 + Long.numberOfTrailingZeros(hi));
}
}
@@ -384,9 +384,10 @@ public record SwedishGenerator(Rng rng) {
return slots;
}
static boolean hasRoomForClue(Grid grid, long packed) {
for (int n = (int) (packed >>> 56), k = 0; k < n && k < MAX_WORD_LENGTH; ) {
if (grid.isClue((int) ((packed >>> (k * 7)) & 0x7F))) break;
if (++k >= MIN_LEN) return true;
for (int n = (int) (packed >>> 56) * 7, k = 0; k < n && k < MAX_WORD_LENGTH7; ) {
if (grid.isClue((int) ((packed >>> k) & 0x7F))) break;
k += 7;
if (k >= MIN_LEN7) return true;
}
return false;
}