Gather data

This commit is contained in:
mike
2026-01-09 23:58:41 +01:00
parent 5275ac60ff
commit 25f7c920e6
4 changed files with 23 additions and 19 deletions

View File

@@ -158,7 +158,7 @@ public record Export() {
for (var r = 0; r < R; r++) { for (var r = 0; r < R; r++) {
var sb = new StringBuilder(C); var sb = new StringBuilder(C);
for (var c = 0; c < C; c++) { for (var c = 0; c < C; c++) {
sb.append(g.isLetterAt(r,c) ? (char) g.byteAt(Grid.offset(r, c)) : '#'); sb.append(g.isLetterSet(r, c) ? (char) g.byteAt(Grid.offset(r, c)) : '#');
} }
gridv2.add(sb.toString()); gridv2.add(sb.toString());
} }
@@ -189,7 +189,7 @@ public record Export() {
for (var c : p.cells) { for (var c : p.cells) {
int rr = Grid.r(c), cc = Grid.c(c); int rr = Grid.r(c), cc = Grid.c(c);
int idx = Grid.offset(rr,cc); int idx = Grid.offset(rr,cc);
if (inBounds(rr, cc) && g.isLetterAt(idx)) { if (inBounds(rr, cc) && g.isLetterSet(idx)) {
letterAt.put(Bit.pack(rr, cc), (char) g.byteAt(idx)); letterAt.put(Bit.pack(rr, cc), (char) g.byteAt(idx));
} }
} }

View File

@@ -224,12 +224,16 @@ public record SwedishGenerator(Rng rng) {
if (idx < 64) bo[0] &= ~(1L << idx); if (idx < 64) bo[0] &= ~(1L << idx);
else bo[1] &= ~(1L << (idx & 63)); else bo[1] &= ~(1L << (idx & 63));
} }
boolean isDigitAt(int r, int c) { return (g[offset(r, c)] & 48) == 48; } static boolean isDigit(byte b) { return (b & 48) == 48; }
boolean isDigitAt(int index) { return (g[index] & 48) == 48; } boolean isDigitAt(int r, int c) { return isDigit(g[offset(r, c)]); }
static boolean isDigit(byte b) { return (b & 48) == 48; } boolean isDigitAt(int index) { return isDigit(g[index]); }
boolean isLettercell(int r, int c) { return (g[offset(r, c)] & 48) != 48; } static boolean isLetter(byte b) { return (b & 64) != 0; }
public boolean isLetterAt(int r, int c) { return ((g[offset(r, c)] & 64) != 0); } public boolean isLetterSet(int r, int c) { return isLetter(g[offset(r, c)]); }
public boolean isLetterAt(int index) { return (g[index] & 48) != 48; } public boolean isLetterSet(int idx) { return isLetter(g[idx]); }
static boolean notDigit(byte b) { return (b & 48) != 48; }
public boolean isLetterAt(int r, int c) { return notDigit(g[offset(r, c)]); }
public boolean isLetterAt(int index) { return notDigit(g[index]); }
public double similarity(Grid b) { public double similarity(Grid b) {
var same = 0; var same = 0;
for (int i = 0; i < SIZE; i++) if (g[i] == b.g[i]) same++; for (int i = 0; i < SIZE; i++) if (g[i] == b.g[i]) same++;
@@ -392,7 +396,7 @@ public record SwedishGenerator(Rng rng) {
long packedPos = 0; long packedPos = 0;
var n = 0; var n = 0;
while (rr >= 0 && rr < R && cc >= 0 && cc < C && grid.isLettercell(rr, cc) && n < MAX_WORD_LENGTH) { while (rr >= 0 && rr < R && cc >= 0 && cc < C && grid.isLetterAt(rr, cc) && n < MAX_WORD_LENGTH) {
packedPos |= (long) Grid.offset(rr, cc) << (n * 7); packedPos |= (long) Grid.offset(rr, cc) << (n * 7);
n++; n++;
rr += nbrs16.dr; rr += nbrs16.dr;
@@ -411,7 +415,7 @@ public record SwedishGenerator(Rng rng) {
boolean hasRoomForClue(Grid grid, int idx, nbrs_16 nbrs16) { boolean hasRoomForClue(Grid grid, int idx, nbrs_16 nbrs16) {
int rr = Grid.r(idx) + nbrs16.r, cc = Grid.c(idx) + nbrs16.c; int rr = Grid.r(idx) + nbrs16.r, cc = Grid.c(idx) + nbrs16.c;
var run = 0; var run = 0;
while (rr >= 0 && rr < R && cc >= 0 && cc < C && (grid.isLettercell(rr, cc)) && run < MAX_WORD_LENGTH) { while (rr >= 0 && rr < R && cc >= 0 && cc < C && (grid.isLetterAt(rr, cc)) && run < MAX_WORD_LENGTH) {
run++; run++;
rr += nbrs16.dr; rr += nbrs16.dr;
cc += nbrs16.dc; cc += nbrs16.dc;

View File

@@ -87,10 +87,10 @@ public class MainTest {
Assertions.assertEquals(DASH, grid.byteAt(Grid.offset(1, 1))); Assertions.assertEquals(DASH, grid.byteAt(Grid.offset(1, 1)));
// Test isLetterAt // Test isLetterAt
Assertions.assertTrue(grid.isLetterAt(0, 0)); Assertions.assertTrue(grid.isLetterSet(0, 0));
Assertions.assertFalse(grid.isLetterAt(1, 2)); Assertions.assertFalse(grid.isLetterSet(1, 2));
Assertions.assertTrue(grid.isLetterAt(2, 3)); Assertions.assertTrue(grid.isLetterSet(2, 3));
Assertions.assertFalse(grid.isLetterAt(1, 1)); Assertions.assertFalse(grid.isLetterSet(1, 1));
// Test isDigitAt // Test isDigitAt
Assertions.assertFalse(grid.isDigitAt(0)); Assertions.assertFalse(grid.isDigitAt(0));
@@ -100,9 +100,9 @@ public class MainTest {
Assertions.assertFalse(grid.isDigitAt(Grid.offset(1, 1))); Assertions.assertFalse(grid.isDigitAt(Grid.offset(1, 1)));
// Test isLettercell // Test isLettercell
Assertions.assertTrue(grid.isLettercell(0, 0)); // 'A' is letter Assertions.assertTrue(grid.isLetterAt(0, 0)); // 'A' is letter
Assertions.assertFalse(grid.isLettercell(1, 2)); // '5' is digit Assertions.assertFalse(grid.isLetterAt(1, 2)); // '5' is digit
Assertions.assertTrue(grid.isLettercell(1, 1)); // '#' is lettercell Assertions.assertTrue(grid.isLetterAt(1, 1)); // '#' is lettercell
} }
@Test @Test

View File

@@ -79,8 +79,8 @@ public class SwedishGeneratorTest {
assertFalse(grid.isDigitAt(0)); assertFalse(grid.isDigitAt(0));
assertTrue(grid.isDigitAt(Grid.offset(0, 1))); assertTrue(grid.isDigitAt(Grid.offset(0, 1)));
assertFalse(grid.isLetterAt(Grid.offset(0, 1))); assertFalse(grid.isLetterAt(Grid.offset(0, 1)));
assertTrue(grid.isLettercell(0, 0)); assertTrue(grid.isLetterAt(0, 0));
assertFalse(grid.isLettercell(0, 1)); assertFalse(grid.isLetterAt(0, 1));
var copy = grid.deepCopyGrid(); var copy = grid.deepCopyGrid();
assertEquals('A', copy.byteAt(0, 0)); assertEquals('A', copy.byteAt(0, 0));