Gather data
This commit is contained in:
@@ -540,17 +540,16 @@ public record SwedishGenerator(int[] buff) {
|
|||||||
return penalty;
|
return penalty;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------- Mask generation ----------------
|
Grid randomMask(Rng rng) {
|
||||||
Grid randomMask2(Rng rng) {
|
|
||||||
var g = makeEmptyGrid();
|
var g = makeEmptyGrid();
|
||||||
|
|
||||||
int placed = 0, guard = 0;
|
int placed = 0, guard = 0;
|
||||||
|
|
||||||
while (placed < TARGET_CLUES && guard++ < 4000) {
|
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;
|
if (g.isDigitAt(idx)) continue;
|
||||||
|
|
||||||
var d = OFFSETS[rng.randbyte(1, 4)];
|
var d = OFFSETS[rng.randbyte(1, 4)];
|
||||||
|
|
||||||
g.setByteAt(idx, d.dbyte);
|
g.setByteAt(idx, d.dbyte);
|
||||||
if (!hasRoomForClue(g, idx, d)) {
|
if (!hasRoomForClue(g, idx, d)) {
|
||||||
g.clear(idx);
|
g.clear(idx);
|
||||||
@@ -560,27 +559,7 @@ public record SwedishGenerator(int[] buff) {
|
|||||||
}
|
}
|
||||||
return g;
|
return g;
|
||||||
}
|
}
|
||||||
Grid randomMask(Rng rng) {
|
Grid mutate(Rng rng, Grid grid) {
|
||||||
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) {
|
|
||||||
var g = grid.deepCopyGrid();
|
var g = grid.deepCopyGrid();
|
||||||
var cx = rng.randint(0, R - 1);
|
var cx = rng.randint(0, R - 1);
|
||||||
var cy = rng.randint(0, C - 1);
|
var cy = rng.randint(0, C - 1);
|
||||||
@@ -600,26 +579,6 @@ public record SwedishGenerator(int[] buff) {
|
|||||||
}
|
}
|
||||||
return g;
|
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) {
|
Grid crossover(Rng rng, Grid a, Grid b) {
|
||||||
var out = makeEmptyGrid();
|
var out = makeEmptyGrid();
|
||||||
var theta = rng.nextFloat() * Math.PI;
|
var theta = rng.nextFloat() * Math.PI;
|
||||||
|
|||||||
Reference in New Issue
Block a user