Gather data

This commit is contained in:
mike
2026-01-07 23:28:14 +01:00
parent dad1fd69a1
commit efe70fb121
4 changed files with 100 additions and 69 deletions

View File

@@ -1,5 +1,6 @@
package puzzle;
import lombok.Data;
import puzzle.SwedishGenerator.PuzzleResult;
import puzzle.SwedishGenerator.Rng;
@@ -13,6 +14,7 @@ import java.util.*;
import java.util.concurrent.*;
import java.util.stream.Collectors;
import static puzzle.ExportFormat.*;
import static puzzle.SwedishGenerator.*;
import static puzzle.SwedishGenerator.loadWords;
@@ -28,8 +30,8 @@ public class Main {
static final Path OUTPUT_PATH = PUZZLE_DIR.resolve(FILE_NAME);
static final String DATE_STRING = now.toLocalDate().toString();
@Data
public static class Opts {
public int seed = (int) (System.nanoTime() ^ System.currentTimeMillis());
public int pop = 18;
public int gens = 500;
@@ -82,11 +84,11 @@ public class Main {
section("Grid (human)");
System.out.print(indentLines(res.swe().renderHuman(res.filled().grid()), " "));
var exported = ExportFormat.exportFormatFromFilled(res, 1, new ExportFormat.Rewards(50, 2, 1));
var exported = exportFormatFromFilled(res, 1, new Rewards(50, 2, 1));
section("Clues");
info("status : generating...");
info("generatedFor : " + exported.words().size());
info("generatedFor : " + exported.words().length);
info("status : done");
section("Words");
@@ -144,21 +146,20 @@ public class Main {
private static String fmtPoint(int r, int c) { return String.format(Locale.ROOT, "(%d,%d)", r, c); }
private static void printWordsTable(List<ExportFormat.WordOut> words) {
private static void printWordsTable(WordOut[] words) {
System.out.println(" # WORD CX DIR START ARROW CLUE");
var i = 1;
for (var w : words) {
for (int j = 0; j < words.length; j++) {
var w = words[j];
System.out.printf(
Locale.ROOT,
" %-2d %-12s %-4s %-3s %-9s %-9s %s%n",
i++,
j,
safe(w.word(), 12),
safe("" + w.complex(), 4),
safe(w.direction(), 3),
fmtPoint(w.startRow(), w.startCol()),
fmtPoint(w.arrowRow(), w.arrowCol()),
w.clue() == null ? "" : Arrays.toString(w.clue())
);
Arrays.toString(w.lemma().clue().toArray(String[]::new)));
}
}
@@ -168,7 +169,7 @@ public class Main {
return s.substring(0, Math.max(0, max - 1)) + "";
}
static String indentLines(String s, String indent) {
static String indentLines(String s, String indent) {
if (s == null || s.isEmpty()) return "";
var lines = s.split("\\R", -1);
var sb = new StringBuilder();
@@ -330,7 +331,7 @@ public class Main {
// ---------------- Export (unchanged logic) ----------------
private static String toJson(ExportFormat.ExportedPuzzle puzzle, String date, String theme) {
private static String toJson(ExportedPuzzle puzzle, String date, String theme) {
var sb = new StringBuilder();
sb.append("{\n");
sb.append(" \"date\": \"").append(escapeJson(date)).append("\",\n");
@@ -349,21 +350,21 @@ public class Main {
}
sb.append(" ],\n");
sb.append(" \"words\": [\n");
for (var i = 0; i < puzzle.words().size(); i++) {
var w = puzzle.words().get(i);
Arrays.sort(w.clue(), Comparator.comparingInt(String::length));
for (var i = 0; i < puzzle.words().length; i++) {
var w = puzzle.words()[i];
var clues = w. clue().toArray(String[]::new);
Arrays.sort(clues, Comparator.comparingInt(String::length));
sb.append(" {\n");
sb.append(" \"word\": \"").append(escapeJson(w.word())).append("\",\n");
sb.append(" \"clue\": [").append(Arrays.stream(w.clue()).map(ss -> "\"" + escapeJson(ss) + "\"").collect(Collectors.joining(","))).append("],\n");
sb.append(" \"clue\": [").append(Arrays.stream(clues).map(ss -> "\"" + escapeJson(ss) + "\"").collect(Collectors.joining(","))).append("],\n");
sb.append(" \"startRow\": ").append(w.startRow()).append(",\n");
sb.append(" \"startCol\": ").append(w.startCol()).append(",\n");
sb.append(" \"direction\": \"").append(escapeJson(w.direction())).append("\",\n");
sb.append(" \"answer\": \"").append(escapeJson(w.answer())).append("\",\n");
sb.append(" \"arrowRow\": ").append(w.arrowRow()).append(",\n");
sb.append(" \"arrowCol\": ").append(w.arrowCol()).append(",\n");
sb.append(" \"isReversed\": ").append(w.isReversed()).append("\n");
sb.append(" }");
if (i < puzzle.words().size() - 1) sb.append(",");
if (i < puzzle.words().length - 1) sb.append(",");
sb.append("\n");
}
sb.append(" ]\n");