redo
This commit is contained in:
@@ -1,8 +1,6 @@
|
||||
package puzzle;
|
||||
|
||||
import module java.base;
|
||||
import anno.GenerateNeighbor;
|
||||
import anno.GenerateNeighbors;
|
||||
import anno.Shaped;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
@@ -24,6 +22,7 @@ public final class Masker {
|
||||
@Shaped public static final int MIN_LEN = Neighbors9x8.MIN_LEN;//Config.MIN_LEN;
|
||||
@Shaped public static final int C = Neighbors9x8.C;
|
||||
@Shaped public static final int R = Neighbors9x8.R;
|
||||
@Shaped public static final int SIZE = Neighbors9x8.SIZE;
|
||||
@Shaped public static final double SIZED = Neighbors9x8.SIZED;// ~18
|
||||
@Shaped private static final long[] NBR_LO = Neighbors9x8.NBR_LO;
|
||||
@Shaped private static final long[] NBR_HI = Neighbors9x8.NBR_HI;
|
||||
@@ -43,6 +42,7 @@ public final class Masker {
|
||||
this.stack = stack;
|
||||
this.cache = cache;
|
||||
}
|
||||
public static boolean isLo(int n) { return (n & 64) == 0; }
|
||||
|
||||
public boolean isValid(Clues c) {
|
||||
return findOffendingClue(c) == -1;
|
||||
@@ -172,17 +172,18 @@ public final class Masker {
|
||||
if (Long.bitCount(rayLo) + Long.bitCount(rayHi) >= MIN_LEN)
|
||||
visitor.visit(key, rayLo, rayHi);
|
||||
}
|
||||
public static Slot[] extractSlots(Clues c, DictEntry[] index) {
|
||||
public static Slot[] extractSlots(Clues c, DictEntry[] index, DictEntry[] rev) {
|
||||
var slots = new ArrayList<Slot>(c.clueCount());
|
||||
c.forEachSlot((key, lo, hi) -> slots.add(Slot.from(key, lo, hi, index[Slot.length(lo, hi)])));
|
||||
c.forEachSlot((key, lo, hi) -> slots.add(Slot.from(key, lo, hi, Slotinfo.increasing(key) ? index[Slot.length(lo, hi)] : rev[Slot.length(lo, hi)])));
|
||||
return slots.toArray(Slot[]::new);
|
||||
}
|
||||
public static Slotinfo[] slots(Clues mask, DictEntry[] index) {
|
||||
var slots = Masker.extractSlots(mask, index);
|
||||
public static Slotinfo[] slots(Clues mask, Dict d) { return slots(mask, d.index(), d.reversed()); }
|
||||
public static Slotinfo[] slots(Clues mask, DictEntry[] index, DictEntry[] rev) {
|
||||
var slots = Masker.extractSlots(mask, index, rev);
|
||||
return Masker.scoreSlots(slots);
|
||||
}
|
||||
public static Slotinfo[] scoreSlots(Slot[] slots) {
|
||||
val count = new byte[SwedishGenerator.SIZE];
|
||||
val count = new byte[SIZE];
|
||||
var slotInfo = new Slotinfo[slots.length];
|
||||
for (var s : slots) {
|
||||
for (var b = s.lo; b != X; b &= b - 1) count[numberOfTrailingZeros(b)]++;
|
||||
@@ -714,7 +715,7 @@ public final class Masker {
|
||||
|
||||
return (bitCount(matchLo & MASK_LO) + bitCount(matchHi & MASK_HI)) / SIZED;
|
||||
}
|
||||
public Grid toGrid() { return new Grid(new byte[SwedishGenerator.SIZE], lo, hi); }
|
||||
public Grid toGrid() { return new Grid(new byte[SIZE], lo, hi); }
|
||||
|
||||
public void forEachSlot(SlotVisitor visitor) {
|
||||
for (var l = lo & ~xlo & ~rlo & vlo; l != X; l &= l - 1) processSlot(this, visitor, Slot.packSlotKey(numberOfTrailingZeros(l), 1));
|
||||
|
||||
Reference in New Issue
Block a user