From 684ced86cfeaad3f72a62feb262905416a039f03 Mon Sep 17 00:00:00 2001 From: mike Date: Wed, 7 Jan 2026 03:40:48 +0100 Subject: [PATCH] Gather data --- src/main/java/puzzle/SwedishGenerator.java | 9 ++---- .../java/puzzle/SwedishGeneratorTest.java | 31 +++++++++++++++++++ 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/src/main/java/puzzle/SwedishGenerator.java b/src/main/java/puzzle/SwedishGenerator.java index bc54662..3d6b144 100644 --- a/src/main/java/puzzle/SwedishGenerator.java +++ b/src/main/java/puzzle/SwedishGenerator.java @@ -816,9 +816,9 @@ public record SwedishGenerator(int W, int H, int SIZE, int MAX_LEN, int[] buff) stats.lastMRV = pick.info.count; renderProgress.run(); - var s = pick.slot; - var k = s.key(); - var entry = dictIndex[s.len()]; + var s = pick.slot; + var k = s.key(); + var entry = dictIndex[s.len()]; var pat = new char[s.len()]; patternForSlot(grid, s, pat); @@ -827,10 +827,7 @@ public record SwedishGenerator(int W, int H, int SIZE, int MAX_LEN, int[] buff) var L = idxs.length; var tries = Math.min(MAX_TRIES_PER_SLOT, L); - // When picking words from sorted indices, we want to favor the beginning - // (lower difficulty) but still have some randomness. for (var t = 0; t < tries; t++) { - // Bias strongly towards lower indices (simpler words) using r^3 double r = rng.nextFloat(); int idxInArray = (int) (r * r * r * L); var idx = idxs[idxInArray]; diff --git a/src/test/java/puzzle/SwedishGeneratorTest.java b/src/test/java/puzzle/SwedishGeneratorTest.java index ffd753f..dc4c3c4 100644 --- a/src/test/java/puzzle/SwedishGeneratorTest.java +++ b/src/test/java/puzzle/SwedishGeneratorTest.java @@ -29,4 +29,35 @@ class SwedishGeneratorTest { assertEquals(0, s.r(1)); assertEquals(2, s.c(1)); } + + @Test + void testStaticSlotMethods() { + // Test static r and c extraction + // packedRs: 1 at index 0, 2 at index 1 + long packedRs = (1L << 0) | (2L << 4); + assertEquals(1, Slot.r(packedRs, 0)); + assertEquals(2, Slot.r(packedRs, 1)); + + // Test static horiz + // dir 2 (right) is horizontal + assertTrue(Slot.horiz(2)); + // dir 3 (down) is vertical + assertTrue(!Slot.horiz(3)); + } + + @Test + void testForEachSlot() { + SwedishGenerator generator = new SwedishGenerator(3, 3); + Grid grid = generator.makeEmptyGrid(); + grid.setCharAt(0, 0, '2'); // right + + java.util.concurrent.atomic.AtomicInteger count = new java.util.concurrent.atomic.AtomicInteger(0); + generator.forEachSlot(grid, (key, rs, cs, len) -> { + count.incrementAndGet(); + assertEquals(2, len); + assertEquals(0, Slot.r(rs, 0)); + assertEquals(1, Slot.c(cs, 0)); + }); + assertEquals(1, count.get()); + } } \ No newline at end of file