Gather data

This commit is contained in:
mike
2026-01-06 08:14:50 +01:00
parent ac81bc6032
commit ee86be5659
2 changed files with 16 additions and 30 deletions

View File

@@ -81,7 +81,7 @@ public final class ExportFormat {
for (var p : placed) {
for (var rc : p.cells) {
int rr = rc[0], cc = rc[1];
if (inBounds(H, W, rr, cc) && isLetter(g.getCharAt(rr, cc))) {
if (inBounds(H, W, rr, cc) && g.isLetterAt(rr, cc)) {
letterAt.put(pack(rr, cc), g.getCharAt(rr, cc));
}
}

View File

@@ -82,52 +82,39 @@ public record SwedishGenerator(int W, int H, int SIZE, int MAX_LEN) {
static int clamp(int x, int a, int b) { return Math.max(a, Math.min(b, x)); }
static final int BITS_PER_CELL = 1;
record Grid(byte[] g, int H, int W) {
Grid deepCopyGrid() {
return new Grid(g.clone(), H, W);
}
int getOffset(int r, int c) { return (r * W + c) * BITS_PER_CELL; }
int getOffset(int r, int c) { return r * W + c; }
int getCellValue(int r, int c) {
int offset = getOffset(r, c);
int val = g[offset];
return val;
boolean isLettercell(int r, int c) {
return isLetterCell(getCharAt(r,c));
}
char getCharAt(int r, int c) {
int val = getCellValue(r, c);
if (val == 0) return '#';
if (val >= 1 && val <= 26) return (char) ('A' + val - 1);
if (val >= 27 && val <= 32) return (char) ('1' + val - 27);
return 0;
return (char) (g[getOffset(r, c)] & 0xFF);
}
void setCharAt(int r, int c, char ch) {
int offset = getOffset(r, c);
int val = 0;
if (ch >= 'A' && ch <= 'Z') val = ch - 'A' + 1;
else if (ch == '#') val = 0;
else if (ch >= '1' && ch <= '6') val = ch - '1' + 27;
g[offset] = (byte) val;
g[getOffset(r, c)] = (byte) ch;
}
boolean isLetterAt(int r, int c) {
int val = getCellValue(r, c);
return val >= 1 && val <= 26;
char ch = getCharAt(r, c);
return ch >= 'A' && ch <= 'Z';
}
boolean isDigitAt(int r, int c) {
int val = getCellValue(r, c);
return val >= 27 && val <= 32;
char ch = getCharAt(r, c);
return ch >= '1' && ch <= '6';
}
}
// ---------------- Grid helpers ----------------
Grid makeEmptyGrid() {
var g = new byte[H * W];// * BITS_PER_CELL);
var g = new byte[H * W];
Arrays.fill(g, (byte) '#');
return new Grid(g, H, W);
}
@@ -374,7 +361,7 @@ public record SwedishGenerator(int W, int H, int SIZE, int MAX_LEN) {
int dr = STEPS[di][0], dc = STEPS[di][1];
int rr = r + or, cc = c + oc;
var run = 0;
while (rr >= 0 && rr < H && cc >= 0 && cc < W && isLetterCell(grid.getCharAt(rr, cc)) && run < MAX_LEN) {
while (rr >= 0 && rr < H && cc >= 0 && cc < W && (grid.isLettercell(rr, cc)) && run < MAX_LEN) {
run++;
rr += dr;
cc += dc;
@@ -684,17 +671,16 @@ public record SwedishGenerator(int W, int H, int SIZE, int MAX_LEN) {
for (var i = 0; i < s.len; i++) {
int r = s.rs[i], c = s.cs[i];
int val = grid.getCellValue(r, c);
char cur = grid.getCharAt(r, c);
var ch = w.charAt(i);
if (val == 0) { // '#'
if (cur == '#') {
urs[n] = r;
ucs[n] = c;
up[n] = '#';
n++;
grid.setCharAt(r, c, ch);
} else {
int targetVal = ch - 'A' + 1;
if (val != targetVal) {
if (cur != ch) {
// rollback immediate changes
for (var j = 0; j < n; j++) grid.setCharAt(urs[j], ucs[j], up[j]);
return null;