Gather data
This commit is contained in:
@@ -100,7 +100,7 @@ public record Export() {
|
|||||||
public String[] clue() { return lemma.clue(); }
|
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) {
|
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 nothing placed: return full grid mapped to letters/# only
|
||||||
if (placed.isEmpty()) {
|
if (placed.isEmpty()) {
|
||||||
var gridv2 = new ArrayList<String>(R);
|
var gridv2 = new String[R];
|
||||||
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.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);
|
return new ExportedPuzzle(gridv2, new WordOut[0], difficulty, rewards);
|
||||||
}
|
}
|
||||||
@@ -187,8 +188,8 @@ public record Export() {
|
|||||||
var letterAt = new HashMap<Long, Character>();
|
var letterAt = new HashMap<Long, Character>();
|
||||||
for (var p : placed) {
|
for (var p : placed) {
|
||||||
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.isLetterSet(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));
|
||||||
}
|
}
|
||||||
@@ -196,13 +197,13 @@ public record Export() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 4) render gridv2 over cropped bounds (out-of-bounds become '#')
|
// 4) render gridv2 over cropped bounds (out-of-bounds become '#')
|
||||||
var gridv2 = new ArrayList<String>(Math.max(0, maxR - minR + 1));
|
var gridv2 = new String[Math.max(0, maxR - minR + 1)];
|
||||||
for (var r = minR; r <= maxR; r++) {
|
for (int r = minR, i = 0; r <= maxR; r++, i++) {
|
||||||
var row = new StringBuilder(Math.max(0, maxC - minC + 1));
|
var row = new StringBuilder(Math.max(0, maxC - minC + 1));
|
||||||
for (var c = minC; c <= maxC; c++) {
|
for (var c = minC; c <= maxC; c++) {
|
||||||
row.append(letterAt.getOrDefault(Bit.pack(r, c), '#'));
|
row.append(letterAt.getOrDefault(Bit.pack(r, c), '#'));
|
||||||
}
|
}
|
||||||
gridv2.add(row.toString());
|
gridv2[i] = row.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 5) words output with cropped coordinates
|
// 5) words output with cropped coordinates
|
||||||
|
|||||||
@@ -387,9 +387,9 @@ public class Main {
|
|||||||
sb.append(" \"hints\": ").append(puzzle.rewards().hints()).append("\n");
|
sb.append(" \"hints\": ").append(puzzle.rewards().hints()).append("\n");
|
||||||
sb.append(" },\n");
|
sb.append(" },\n");
|
||||||
sb.append(" \"gridv2\": [\n");
|
sb.append(" \"gridv2\": [\n");
|
||||||
for (var i = 0; i < puzzle.gridv2().size(); i++) {
|
for (var i = 0; i < puzzle.gridv2().length; i++) {
|
||||||
sb.append(" \"").append(escapeJson(puzzle.gridv2().get(i))).append("\"");
|
sb.append(" \"").append(escapeJson(puzzle.gridv2()[i])).append("\"");
|
||||||
if (i < puzzle.gridv2().size() - 1) sb.append(",");
|
if (i < puzzle.gridv2().length - 1) sb.append(",");
|
||||||
sb.append("\n");
|
sb.append("\n");
|
||||||
}
|
}
|
||||||
sb.append(" ],\n");
|
sb.append(" ],\n");
|
||||||
|
|||||||
@@ -71,8 +71,8 @@ public class ExportFormatTest {
|
|||||||
// letterAt only contains letters from placed words.
|
// letterAt only contains letters from placed words.
|
||||||
// arrow cells are NOT in letterAt unless they are also part of a word (unlikely).
|
// arrow cells are NOT in letterAt unless they are also part of a word (unlikely).
|
||||||
// So (0,0) should be '#'
|
// So (0,0) should be '#'
|
||||||
assertEquals(1, exported.gridv2().size());
|
assertEquals(1, exported.gridv2().length);
|
||||||
assertEquals("#TEST", exported.gridv2().get(0));
|
assertEquals("#TEST", exported.gridv2()[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -87,7 +87,7 @@ public class ExportFormatTest {
|
|||||||
assertNotNull(exported);
|
assertNotNull(exported);
|
||||||
assertEquals(0, exported.words().length);
|
assertEquals(0, exported.words().length);
|
||||||
// Should return full grid with '#'
|
// Should return full grid with '#'
|
||||||
assertEquals(R, exported.gridv2().size());
|
assertEquals(R, exported.gridv2().length);
|
||||||
for (var row : exported.gridv2()) {
|
for (var row : exported.gridv2()) {
|
||||||
assertEquals(C, row.length());
|
assertEquals(C, row.length());
|
||||||
assertTrue(row.matches("#+"));
|
assertTrue(row.matches("#+"));
|
||||||
|
|||||||
Reference in New Issue
Block a user