diff --git a/src/main/java/puzzle/SwedishGenerator.java b/src/main/java/puzzle/SwedishGenerator.java index 03ab7c4..d8628df 100644 --- a/src/main/java/puzzle/SwedishGenerator.java +++ b/src/main/java/puzzle/SwedishGenerator.java @@ -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;