Gather data

This commit is contained in:
mike
2026-01-09 02:58:41 +01:00
parent df981d8601
commit 5ae1e7f6a1

View File

@@ -540,17 +540,16 @@ public record SwedishGenerator(int[] buff) {
return penalty;
}
// ---------------- Mask generation ----------------
Grid randomMask2(Rng rng) {
var g = makeEmptyGrid();
int placed = 0, guard = 0;
Grid randomMask(Rng rng) {
var g = makeEmptyGrid();
int placed = 0, guard = 0;
while (placed < TARGET_CLUES && guard++ < 4000) {
var idx = rng.randint(0, SIZE - 1);
var idx = Grid.offset(rng.randint(0, R - 1),
rng.randint(0, C - 1));
if (g.isDigitAt(idx)) continue;
var d = OFFSETS[rng.randbyte(1, 4)];
g.setByteAt(idx, d.dbyte);
if (!hasRoomForClue(g, idx, d)) {
g.clear(idx);
@@ -560,27 +559,7 @@ public record SwedishGenerator(int[] buff) {
}
return g;
}
Grid randomMask(Rng rng) {
var g = makeEmptyGrid();
var targetClues = (int) Math.round(SIZE * 0.25);
int placed = 0, guard = 0;
while (placed < targetClues && guard++ < 4000) {
var r = rng.randint(0, R - 1);
var c = rng.randint(0, C - 1);
if (g.isDigitAt(r, c)) continue;
var d = (char) ('0' + rng.randint(1, c == 0 ? CLUE_SIZE : 4));
g.setCharAt(r, c, d);
if (!hasRoomForClue(g, r, c, d)) {
g.setCharAt(r, c, C_DASH);
continue;
}
placed++;
}
return g;
}
Grid mutate2(Rng rng, Grid grid) {
Grid mutate(Rng rng, Grid grid) {
var g = grid.deepCopyGrid();
var cx = rng.randint(0, R - 1);
var cy = rng.randint(0, C - 1);
@@ -600,26 +579,6 @@ public record SwedishGenerator(int[] buff) {
}
return g;
}
Grid mutate(Rng rng, Grid grid) {
var g = grid.deepCopyGrid();
var cx = rng.randint(0, R - 1);
var cy = rng.randint(0, C - 1);
var steps = 4;
for (var k = 0; k < steps; k++) {
var rr = clamp(cx + (rng.randint(-2, 2) + rng.randint(-2, 2)), 0, R - 1);
var cc = clamp(cy + (rng.randint(-2, 2) + rng.randint(-2, 2)), 0, C - 1);
if (g.isDigitAt(rr, cc)) {
g.setCharAt(rr, cc, C_DASH);
} else {
var d = (char) ('0' + rng.randint(1, cc == 0 ? CLUE_SIZE : 4));
g.setCharAt(rr, cc, d);
if (!hasRoomForClue(g, rr, cc, d)) g.setCharAt(rr, cc, C_DASH);
}
}
return g;
}
Grid crossover(Rng rng, Grid a, Grid b) {
var out = makeEmptyGrid();
var theta = rng.nextFloat() * Math.PI;