Gather data

This commit is contained in:
mike
2026-01-09 15:08:52 +01:00
parent add9a5db7a
commit a2cdddccd9

View File

@@ -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];
}