This commit is contained in:
mike
2026-01-23 06:31:56 +01:00
parent 2c39e82b00
commit 2aa08fedb0
5 changed files with 21 additions and 15 deletions

View File

@@ -13,9 +13,9 @@ public final class Clues {
@Getter long lo, hi, vlo, vhi, rlo, rhi, xlo, xhi; @Getter long lo, hi, vlo, vhi, rlo, rhi, xlo, xhi;
public static Clues createEmpty() { return new Clues(0, 0, 0, 0, 0, 0, 0, 0); } public static Clues createEmpty() { return new Clues(0, 0, 0, 0, 0, 0, 0, 0); }
public Clues setClue(precomp.Const9x8.Cell cell) { public Clues setClue(Mask cell) {
if ((cell.index & 64) == 0) setClueLo(cell.mask, cell.d); if ((cell.index() & 64) == 0) setClueLo(cell.lo(), cell.d());
else setClueHi(cell.mask, cell.d); else setClueHi(cell.hi(), cell.d());
return this; return this;
} }

View File

@@ -64,7 +64,7 @@ public record Export() {
public record Signa(@Delegate Clues c) { public record Signa(@Delegate Clues c) {
public static Signa of(Cell... cells) { public static Signa of(Mask... cells) {
var c = createEmpty(); var c = createEmpty();
for (var cell : cells) c.setClue(cell); for (var cell : cells) c.setClue(cell);
return new Signa(c); return new Signa(c);

View File

@@ -2,11 +2,13 @@ package puzzle;
public interface Mask { public interface Mask {
record Masker(long lo, long hi) record Masker(long lo, long hi,int index,byte d)
implements Mask { } implements Mask { }
default Mask or(Mask o) { return new Masker(o.lo() | lo(), o.hi() | hi()); } default Mask or(Mask o) { return new Masker(o.lo() | lo(), o.hi() | hi(), 0, (byte) 0); }
default Mask and(Mask o) { return new Masker(o.lo() & lo(), o.hi() & hi()); } default Mask and(Mask o) { return new Masker(o.lo() & lo(), o.hi() & hi(), 0, (byte) 0); }
long hi(); long hi();
long lo(); long lo();
int index();
byte d();
} }

View File

@@ -32,7 +32,8 @@ import static java.nio.charset.StandardCharsets.US_ASCII;
@ConstGen(C = 9, R = 8, packageName = "precomp", className = "Const9x8") @ConstGen(C = 9, R = 8, packageName = "precomp", className = "Const9x8")
@GenerateNeighbors({ @GenerateNeighbors({
@GenerateNeighbor(C = 9, R = 8, packageName = "precomp", className = "Neighbors9x8", MIN_LEN = 2), @GenerateNeighbor(C = 9, R = 8, packageName = "precomp", className = "Neighbors9x8", MIN_LEN = 2),
@GenerateNeighbor(C = 4, R = 3, packageName = "precomp", className = "Neighbors4x3", MIN_LEN = 2) @GenerateNeighbor(C = 4, R = 3, packageName = "precomp", className = "Neighbors4x3", MIN_LEN = 2),
@GenerateNeighbor(C = 3, R = 4, packageName = "precomp", className = "Neighbors3x4", MIN_LEN = 2)
}) })
public record SwedishGenerator() { public record SwedishGenerator() {

View File

@@ -1,5 +1,6 @@
package puzzle; package puzzle;
import anno.ConstGen;
import gen.Test123X_Neighbors4x3; import gen.Test123X_Neighbors4x3;
import gen.Test123X_Neighbors9x8; import gen.Test123X_Neighbors9x8;
import lombok.val; import lombok.val;
@@ -14,10 +15,12 @@ import puzzle.SwedishGenerator.Rng;
import puzzle.dict800.DictData800; import puzzle.dict800.DictData800;
import java.util.Arrays; import java.util.Arrays;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static precomp.Const9x8.Cell.r0c0d1; import static precomp.Const3x4.Cell.r0c0d4;
import static precomp.Const9x8.Cell.r1c0d1; import static precomp.Const3x4.Cell.r0c2d0;
import static precomp.Const9x8.Cell.r2c0d1; import static precomp.Const3x4.Cell.r1c0d1;
import static precomp.Const9x8.Cell.r3c0d1; import static precomp.Const3x4.Cell.r2c0d1;
import static precomp.Const3x4.Cell.r3c0d1;
@ConstGen(C = 3, R = 4, packageName = "precomp", className = "Const3x4")
public class TestDuplication { public class TestDuplication {
@Test @Test
@@ -29,13 +32,13 @@ public class TestDuplication {
@Test @Test
void testFiller2() { void testFiller2() {
var mask = Signa.of( var mask = Signa.of(
r0c0d1, r0c0d4, r0c2d0,
r1c0d1, r1c0d1,
r2c0d1, r2c0d1,
r3c0d1); r3c0d1);
Assertions.assertEquals(4, mask.clueCount()); Assertions.assertEquals(5, mask.clueCount());
val map = mask.stream().collect(Collectors.toMap(Vestigium::index, Vestigium::clue)); val map = mask.stream().collect(Collectors.toMap(Vestigium::index, Vestigium::clue));
Assertions.assertEquals(4, map.size()); Assertions.assertEquals(5, map.size());
var slots = Masker_Neighbors3x4.slots(mask.c(), DictData800.DICT800); var slots = Masker_Neighbors3x4.slots(mask.c(), DictData800.DICT800);
var grid = Masker_Neighbors3x4.grid(slots); var grid = Masker_Neighbors3x4.grid(slots);
var filled = SwedishGenerator.fillMask(new Rng(1), slots, grid.lo, grid.hi, grid.g); var filled = SwedishGenerator.fillMask(new Rng(1), slots, grid.lo, grid.hi, grid.g);