introduce bitloops
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user