From fb1f45829f2f8bb90f2e035b19a4e8b29edfcd59 Mon Sep 17 00:00:00 2001 From: mike Date: Sat, 10 Jan 2026 10:16:12 +0100 Subject: [PATCH] introduce bitloops --- src/main/java/puzzle/SwedishGenerator.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/puzzle/SwedishGenerator.java b/src/main/java/puzzle/SwedishGenerator.java index 2fef477..7b1f8bb 100644 --- a/src/main/java/puzzle/SwedishGenerator.java +++ b/src/main/java/puzzle/SwedishGenerator.java @@ -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; }