Gather data

This commit is contained in:
mike
2026-01-10 00:06:29 +01:00
parent 25f7c920e6
commit 4f42c613a0
3 changed files with 16 additions and 15 deletions

View File

@@ -100,7 +100,7 @@ public record Export() {
public String[] clue() { return lemma.clue(); }
}
public record ExportedPuzzle(List<String> gridv2, WordOut[] words, int difficulty, Rewards rewards) { }
public record ExportedPuzzle(String[] gridv2, WordOut[] words, int difficulty, Rewards rewards) { }
public record PuzzleResult(SwedishGenerator swe, Dict dict, Gridded mask, FillResult filled) {
@@ -154,13 +154,14 @@ public record Export() {
// If nothing placed: return full grid mapped to letters/# only
if (placed.isEmpty()) {
var gridv2 = new ArrayList<String>(R);
var gridv2 = new String[R];
for (var r = 0; r < R; r++) {
var sb = new StringBuilder(C);
for (var c = 0; c < C; c++) {
sb.append(g.isLetterSet(r, c) ? (char) g.byteAt(Grid.offset(r, c)) : '#');
int idx = Grid.offset(r, c);
sb.append(g.isLetterSet(idx) ? (char) g.byteAt(idx) : '#');
}
gridv2.add(sb.toString());
gridv2[r] = sb.toString();
}
return new ExportedPuzzle(gridv2, new WordOut[0], difficulty, rewards);
}
@@ -187,8 +188,8 @@ public record Export() {
var letterAt = new HashMap<Long, Character>();
for (var p : placed) {
for (var c : p.cells) {
int rr = Grid.r(c), cc = Grid.c(c);
int idx = Grid.offset(rr,cc);
int rr = Grid.r(c), cc = Grid.c(c);
int idx = Grid.offset(rr, cc);
if (inBounds(rr, cc) && g.isLetterSet(idx)) {
letterAt.put(Bit.pack(rr, cc), (char) g.byteAt(idx));
}
@@ -196,13 +197,13 @@ public record Export() {
}
// 4) render gridv2 over cropped bounds (out-of-bounds become '#')
var gridv2 = new ArrayList<String>(Math.max(0, maxR - minR + 1));
for (var r = minR; r <= maxR; r++) {
var gridv2 = new String[Math.max(0, maxR - minR + 1)];
for (int r = minR, i = 0; r <= maxR; r++, i++) {
var row = new StringBuilder(Math.max(0, maxC - minC + 1));
for (var c = minC; c <= maxC; c++) {
row.append(letterAt.getOrDefault(Bit.pack(r, c), '#'));
}
gridv2.add(row.toString());
gridv2[i] = row.toString();
}
// 5) words output with cropped coordinates

View File

@@ -387,9 +387,9 @@ public class Main {
sb.append(" \"hints\": ").append(puzzle.rewards().hints()).append("\n");
sb.append(" },\n");
sb.append(" \"gridv2\": [\n");
for (var i = 0; i < puzzle.gridv2().size(); i++) {
sb.append(" \"").append(escapeJson(puzzle.gridv2().get(i))).append("\"");
if (i < puzzle.gridv2().size() - 1) sb.append(",");
for (var i = 0; i < puzzle.gridv2().length; i++) {
sb.append(" \"").append(escapeJson(puzzle.gridv2()[i])).append("\"");
if (i < puzzle.gridv2().length - 1) sb.append(",");
sb.append("\n");
}
sb.append(" ],\n");

View File

@@ -71,8 +71,8 @@ public class ExportFormatTest {
// letterAt only contains letters from placed words.
// arrow cells are NOT in letterAt unless they are also part of a word (unlikely).
// So (0,0) should be '#'
assertEquals(1, exported.gridv2().size());
assertEquals("#TEST", exported.gridv2().get(0));
assertEquals(1, exported.gridv2().length);
assertEquals("#TEST", exported.gridv2()[0]);
}
@Test
@@ -87,7 +87,7 @@ public class ExportFormatTest {
assertNotNull(exported);
assertEquals(0, exported.words().length);
// Should return full grid with '#'
assertEquals(R, exported.gridv2().size());
assertEquals(R, exported.gridv2().length);
for (var row : exported.gridv2()) {
assertEquals(C, row.length());
assertTrue(row.matches("#+"));