introduce bitloops

This commit is contained in:
mike
2026-01-14 08:36:31 +01:00
parent 6e2ecae082
commit bd52bd0ef0
5 changed files with 24 additions and 29 deletions

View File

@@ -109,7 +109,7 @@ public record Export() {
}
}
//public boolean isLetterSet(int idx) { return isLetter(g[idx]); }
char NOT_CLUE_NOT_LETTER_TO(byte b, char fallback) { return isLetter(b) ? (char) b : fallback; }
char NOT_CLUE_NOT_LETTER_TO(byte b, char fallback) { return isLetter(b) ? (char) (64 | b) : fallback; }
String gridToString(Clues clues) {
var sb = new StringBuilder();
for (var r = 0; r < R; r++) {
@@ -119,7 +119,7 @@ public record Export() {
if (clues.isClue(offset))
sb.append((char) (48 | clues.digitAt(offset)));
else
sb.append((char) grid.letter32At(offset));
sb.append((char) (64 | grid.letter32At(offset)));
}
}
return sb.toString();
@@ -230,7 +230,7 @@ public record Export() {
for (var p : placed) {
for (var c : p.cells) {
if (inBounds(c) && mask.notClue(c)) {
letterAt.put(c, (char) g.letter32At(c));
letterAt.put(c, (char) (64 | g.letter32At(c)));
}
}
}

View File

@@ -259,18 +259,7 @@ public record SwedishGenerator(Rng rng, int[] stack, Clues cache) {
for (int i = 0; i < SIZE; i++) if (digitAt(i) == b.digitAt(i)) same++;
return same / SIZED;*/
}
public Grid toGrid() {
var grid = new Grid(new byte[SIZE], lo, hi);
for (var l = lo; l != X; l &= l - 1) {
int idx = Long.numberOfTrailingZeros(l);
grid.setLetter(idx, digitAt(idx));
}
for (var h = hi; h != X; h &= h - 1) {
int idx = 64 | Long.numberOfTrailingZeros(h);
grid.setLetter(idx, digitAt(idx));
}
return grid;
}
public Grid toGrid() { return new Grid(new byte[SIZE], lo, hi); }
public void forEachSlot(SlotVisitor visitor) {
for (var l = lo; l != X; l &= l - 1) processSlot(this, visitor, Long.numberOfTrailingZeros(l));
for (var h = hi; h != X; h &= h - 1) processSlot(this, visitor, 64 | Long.numberOfTrailingZeros(h));