introduce bitloops

This commit is contained in:
mike
2026-01-20 23:18:29 +01:00
parent 85fa317eec
commit 7f15ab8ff1
5 changed files with 55 additions and 113 deletions

View File

@@ -4,7 +4,8 @@ import module java.base;
import lombok.AllArgsConstructor;
import lombok.experimental.Delegate;
import lombok.val;
import puzzle.Export.Gridded.Replacar.Cell;
import precomp.Const9x8.Cell;
import puzzle.Export.Gridded.Replacar.Rell;
import puzzle.Export.LetterVisit.LetterAt;
import puzzle.Masker.Clues;
import puzzle.SwedishGenerator.FillResult;
@@ -69,6 +70,11 @@ public record Export() {
public record Clued(@Delegate Clues c) {
public static Clues create(Cell... cell) {
var empty = createEmpty();
for (var cell1 : cell) empty.setClue(cell1);
return empty;
}
public Clued deepCopyGrid() { return new Clued(new Clues(c.lo, c.hi, c.vlo, c.vhi, c.rlo, c.rhi, c.xlo, c.xhi)); }
public static Clued parse(String s) {
var c = createEmpty();
@@ -160,7 +166,7 @@ public record Export() {
val r = idx & 7;
val c = idx >>> 3;
val dir = Slot.dir(s);
sb.setCharAt(r * (C + 1) + c, clueChar.replace(new Cell(grid, clues, idx, (byte) (dir | 48))));
sb.setCharAt(r * (C + 1) + c, clueChar.replace(new Rell(grid, clues, idx, (byte) (dir | 48))));
});
stream(clues).forEach((l) -> sb.setCharAt(l.index(C + 1), l.human()));
return sb.toString().replaceAll(" ", "" + emptyFallback).split("\n");
@@ -217,8 +223,8 @@ public record Export() {
@FunctionalInterface
interface Replacar {
record Cell(Grid grid, Clues clues, int index, byte data) { }
char replace(Cell c);
record Rell(Grid grid, Clues clues, int index, byte data) { }
char replace(Rell c);
}
}

View File

@@ -653,6 +653,12 @@ public final class Masker {
return validSlotRev(lo, hi, key);
}
public Clues setClue(precomp.Const9x8.Cell cell) {
if (cell.index < 64) setClueLo(cell.mask, cell.d);
else setClueHi(cell.mask, cell.d);
return this;
}
public void setClueLo(long mask, byte idx) {
lo |= mask;
if ((idx & 1) != 0) vlo |= mask;