From a2cdddccd98946f75727d710f404e3588f00faa3 Mon Sep 17 00:00:00 2001 From: mike Date: Fri, 9 Jan 2026 15:08:52 +0100 Subject: [PATCH] Gather data --- src/main/java/puzzle/SwedishGenerator.java | 56 ++++++++++++++++------ 1 file changed, 42 insertions(+), 14 deletions(-) diff --git a/src/main/java/puzzle/SwedishGenerator.java b/src/main/java/puzzle/SwedishGenerator.java index 43900ff..fb04020 100644 --- a/src/main/java/puzzle/SwedishGenerator.java +++ b/src/main/java/puzzle/SwedishGenerator.java @@ -39,18 +39,22 @@ public record SwedishGenerator(int[] buff) { } } - record rci(int r, int c, int i) { } + record rci(int r, int c, int i, long n1, long n2) { + void forEachSetBit71(java.util.function.IntConsumer consumer) { + long lo = n1, hi = n2; + while (lo != 0L) { + int bit = Long.numberOfTrailingZeros(lo); + consumer.accept(bit); + lo &= (lo - 1); + } + while (hi != 0L) { + int bit = Long.numberOfTrailingZeros(hi); + consumer.accept(64 + bit); + hi &= (hi - 1L); + } + } + } - static final rci[] IT = new rci[]{ - new rci(0, 0, 0), new rci(0, 1, 8), new rci(0, 2, 16), new rci(0, 3, 24), new rci(0, 4, 32), new rci(0, 5, 40), new rci(0, 6, 48), new rci(0, 7, 56), new rci(0, 8, 64), - new rci(1, 0, 1), new rci(1, 1, 9), new rci(1, 2, 17), new rci(1, 3, 25), new rci(1, 4, 33), new rci(1, 5, 41), new rci(1, 6, 49), new rci(1, 7, 57), new rci(1, 8, 65), - new rci(2, 0, 2), new rci(2, 1, 10), new rci(2, 2, 18), new rci(2, 3, 26), new rci(2, 4, 34), new rci(2, 5, 42), new rci(2, 6, 50), new rci(2, 7, 58), new rci(2, 8, 66), - new rci(3, 0, 3), new rci(3, 1, 11), new rci(3, 2, 19), new rci(3, 3, 27), new rci(3, 4, 35), new rci(3, 5, 43), new rci(3, 6, 51), new rci(3, 7, 59), new rci(3, 8, 67), - new rci(4, 0, 4), new rci(4, 1, 12), new rci(4, 2, 20), new rci(4, 3, 28), new rci(4, 4, 36), new rci(4, 5, 44), new rci(4, 6, 52), new rci(4, 7, 60), new rci(4, 8, 68), - new rci(5, 0, 5), new rci(5, 1, 13), new rci(5, 2, 21), new rci(5, 3, 29), new rci(5, 4, 37), new rci(5, 5, 45), new rci(5, 6, 53), new rci(5, 7, 61), new rci(5, 8, 69), - new rci(6, 0, 6), new rci(6, 1, 14), new rci(6, 2, 22), new rci(6, 3, 30), new rci(6, 4, 38), new rci(6, 5, 46), new rci(6, 6, 54), new rci(6, 7, 62), new rci(6, 8, 70), - new rci(7, 0, 7), new rci(7, 1, 15), new rci(7, 2, 23), new rci(7, 3, 31), new rci(7, 4, 39), new rci(7, 5, 47), new rci(7, 6, 55), new rci(7, 7, 63), new rci(7, 8, 71), - }; static final int BAR_LEN = 22; static final int C = Config.PUZZLE_COLS; static final double CROSS_Y = (C - 1) / 2.0; @@ -99,6 +103,25 @@ public record SwedishGenerator(int[] buff) { new nbrs_8(0, 1) }; + static final rci[] IT = new rci[SIZE]; + static { + for (int i = 0; i < SIZE; i++) { + int r = i % R; + int c = i / R; + long n1 = 0, n2 = 0; + for (var d : nbrs4) { + int nr = r + d.r; + int nc = c + d.c; + if (nr >= 0 && nr < R && nc >= 0 && nc < C) { + int nidx = nc * R + nr; + if (nidx < 64) n1 |= (1L << nidx); + else n2 |= (1L << (nidx - 64)); + } + } + IT[i] = new rci(r, c, i, n1, n2); + } + } + static record Context(int[] covH, int[] covV, int[] cellCount, @@ -528,9 +551,15 @@ public record SwedishGenerator(int[] buff) { }); int sp, nr, nc; long size; - int walls, wr, wc; + int walls; // dead-end-ish letter cell (3+ walls) for (var rci : IT) { + if (grid.isDigitAt(rci.i)) continue; + walls = 4 - Long.bitCount(rci.n1) - Long.bitCount(rci.n2); + walls += Long.bitCount(rci.n1 & grid.bo[0]) + Long.bitCount(rci.n2 & grid.bo[1]); + if (walls >= 3) penalty[0] += 400; + } + /*for (var rci : IT) { if (grid.isDigitAt(rci.i)) continue; walls = 0; for (var d : nbrs4) { @@ -539,8 +568,7 @@ public record SwedishGenerator(int[] buff) { if (wr < 0 || wr >= R || wc < 0 || wc >= C || grid.isDigitAt(wr, wc)) walls++; } if (walls >= 3) penalty[0] += 400; - } - + }*/ return penalty[0]; }