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 p : placed) {
for (var rc : p.cells) { for (var rc : p.cells) {
int rr = rc[0], cc = rc[1]; 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)); 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 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) { record Grid(byte[] g, int H, int W) {
Grid deepCopyGrid() { Grid deepCopyGrid() {
return new Grid(g.clone(), H, W); 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) { boolean isLettercell(int r, int c) {
int offset = getOffset(r, c); return isLetterCell(getCharAt(r,c));
int val = g[offset];
return val;
} }
char getCharAt(int r, int c) { char getCharAt(int r, int c) {
int val = getCellValue(r, c); return (char) (g[getOffset(r, c)] & 0xFF);
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;
} }
void setCharAt(int r, int c, char ch) { void setCharAt(int r, int c, char ch) {
int offset = getOffset(r, c); g[getOffset(r, c)] = (byte) ch;
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;
} }
boolean isLetterAt(int r, int c) { boolean isLetterAt(int r, int c) {
int val = getCellValue(r, c); char ch = getCharAt(r, c);
return val >= 1 && val <= 26; return ch >= 'A' && ch <= 'Z';
} }
boolean isDigitAt(int r, int c) { boolean isDigitAt(int r, int c) {
int val = getCellValue(r, c); char ch = getCharAt(r, c);
return val >= 27 && val <= 32; return ch >= '1' && ch <= '6';
} }
} }
// ---------------- Grid helpers ---------------- // ---------------- Grid helpers ----------------
Grid makeEmptyGrid() { 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); 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 dr = STEPS[di][0], dc = STEPS[di][1];
int rr = r + or, cc = c + oc; int rr = r + or, cc = c + oc;
var run = 0; 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++; run++;
rr += dr; rr += dr;
cc += dc; 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++) { for (var i = 0; i < s.len; i++) {
int r = s.rs[i], c = s.cs[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); var ch = w.charAt(i);
if (val == 0) { // '#' if (cur == '#') {
urs[n] = r; urs[n] = r;
ucs[n] = c; ucs[n] = c;
up[n] = '#'; up[n] = '#';
n++; n++;
grid.setCharAt(r, c, ch); grid.setCharAt(r, c, ch);
} else { } else {
int targetVal = ch - 'A' + 1; if (cur != ch) {
if (val != targetVal) {
// rollback immediate changes // rollback immediate changes
for (var j = 0; j < n; j++) grid.setCharAt(urs[j], ucs[j], up[j]); for (var j = 0; j < n; j++) grid.setCharAt(urs[j], ucs[j], up[j]);
return null; return null;