Gather data
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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("#+"));
|
||||
|
||||
Reference in New Issue
Block a user