introduce bitloops
This commit is contained in:
@@ -275,13 +275,6 @@ public record Export() {
|
|||||||
if (letter == 0) return;
|
if (letter == 0) return;
|
||||||
letterAt.put(idx, (char) (64 | letter));
|
letterAt.put(idx, (char) (64 | letter));
|
||||||
});
|
});
|
||||||
/* for (var p : placed) {
|
|
||||||
for (var c : p.cells) {
|
|
||||||
if (clues.notClue(c) && g.lisLetterAt(c)) {
|
|
||||||
letterAt.put(c, (char) (64 | g.letter32At(c)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
// 4) render gridv2 over cropped bounds (out-of-bounds become '#')
|
// 4) render gridv2 over cropped bounds (out-of-bounds become '#')
|
||||||
var gridv2 = new String[Math.max(0, maxR - minR + 1)];
|
var gridv2 = new String[Math.max(0, maxR - minR + 1)];
|
||||||
|
|||||||
@@ -287,12 +287,6 @@ public record SwedishGenerator(Rng rng, int[] stack, Clues cache) {
|
|||||||
final byte[] g;
|
final byte[] g;
|
||||||
public long lo, hi;
|
public long lo, hi;
|
||||||
static int offset(int r, int c) { return r | (c << 3); }
|
static int offset(int r, int c) { return r | (c << 3); }
|
||||||
/// the pos will never target a clue
|
|
||||||
void setLetterLo(int idx, byte ch) {
|
|
||||||
lo |= (1L << idx);
|
|
||||||
|
|
||||||
g[idx] = ch;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static record DictEntry(long[] words, long[][] posBitsets, int length, int numlong) { }
|
static record DictEntry(long[] words, long[][] posBitsets, int length, int numlong) { }
|
||||||
|
|||||||
@@ -122,10 +122,10 @@ public class MainTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testCluesDeepCopy() {
|
public void testCluesDeepCopy() {
|
||||||
var grid = Clues.createEmpty();
|
var grid = Clues.createEmpty();
|
||||||
grid.setClue(Grid.offset(0, 0), (byte) 1);
|
grid.setClue(OFF_0_0, (byte) 1);
|
||||||
grid.setClue(Grid.offset(0, 1), (byte) 2);
|
grid.setClue(OFF_0_1, (byte) 2);
|
||||||
grid.setClue(Grid.offset(1, 0), (byte) 3);
|
grid.setClue(OFF_1_0, (byte) 3);
|
||||||
grid.setClue(Grid.offset(1, 1), (byte) 0);
|
grid.setClue(OFF_1_1, (byte) 0);
|
||||||
|
|
||||||
var copy = grid.deepCopyGrid();
|
var copy = grid.deepCopyGrid();
|
||||||
Assertions.assertEquals((byte) 1, copy.digitAt(0));
|
Assertions.assertEquals((byte) 1, copy.digitAt(0));
|
||||||
|
|||||||
@@ -100,11 +100,11 @@ public class SwedishGeneratorTest {
|
|||||||
@Test
|
@Test
|
||||||
void testPatternForSlotMixed() {
|
void testPatternForSlotMixed() {
|
||||||
var grid = createEmpty();
|
var grid = createEmpty();
|
||||||
grid.setLetterLo(OFF_0_0, LETTER_A);
|
placeWord(grid, Slot.packSlotKey(0, CLUE_RIGHT), 1L << OFF_0_0, 0, Lemma.from(0, "A"));
|
||||||
grid.setLetterLo(OFF_2_0, LETTER_C);
|
placeWord(grid, Slot.packSlotKey(0, CLUE_RIGHT), 1L << OFF_2_0, 0, Lemma.from(0, "C"));
|
||||||
var key = Slot.packSlotKey(OFF_1_0, CLUE_RIGHT);
|
var key = Slot.packSlotKey(OFF_1_0, CLUE_RIGHT);
|
||||||
var pattern = patternForSlot(grid, key, 7L, 0L);
|
var pattern = patternForSlot(grid, key, 7L, 0L);
|
||||||
assertEquals(1L | (0L) | (55L << 16), pattern);
|
assertEquals(1L | (55L << 16), pattern);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -118,7 +118,7 @@ public class SwedishGeneratorTest {
|
|||||||
@Test
|
@Test
|
||||||
void testPatternForSlotSingleLetter() {
|
void testPatternForSlotSingleLetter() {
|
||||||
var grid = createEmpty();
|
var grid = createEmpty();
|
||||||
grid.setLetterLo(OFF_0_0, LETTER_A);
|
placeWord(grid, Slot.packSlotKey(0, CLUE_RIGHT), 1L << OFF_0_0, 0, Lemma.from(0, "A"));
|
||||||
var key = Slot.packSlotKey(1, CLUE_RIGHT);
|
var key = Slot.packSlotKey(1, CLUE_RIGHT);
|
||||||
var pattern = patternForSlot(grid, key, 7L, 0L);
|
var pattern = patternForSlot(grid, key, 7L, 0L);
|
||||||
assertEquals(1L, pattern);
|
assertEquals(1L, pattern);
|
||||||
@@ -144,7 +144,7 @@ public class SwedishGeneratorTest {
|
|||||||
@Test
|
@Test
|
||||||
void testGrid() {
|
void testGrid() {
|
||||||
var grid = new Gridded(createEmpty());
|
var grid = new Gridded(createEmpty());
|
||||||
grid.grid().setLetterLo(OFF_0_0, LETTER_A);
|
placeWord(grid.grid(), Slot.packSlotKey(0, CLUE_RIGHT), 1L << OFF_0_0, 0, Lemma.from(0, "A"));
|
||||||
val arr = grid.stream(Clues.createEmpty()).collect(Collectors.toMap(LetterAt::index, LetterAt::letter));
|
val arr = grid.stream(Clues.createEmpty()).collect(Collectors.toMap(LetterAt::index, LetterAt::letter));
|
||||||
assertEquals(1, arr.size());
|
assertEquals(1, arr.size());
|
||||||
assertEquals(LETTER_A, arr.get(OFF_0_0));
|
assertEquals(LETTER_A, arr.get(OFF_0_0));
|
||||||
@@ -310,7 +310,7 @@ public class SwedishGeneratorTest {
|
|||||||
|
|
||||||
// 4. Partial placement then conflict (rollback)
|
// 4. Partial placement then conflict (rollback)
|
||||||
grid = new Gridded(createEmpty());
|
grid = new Gridded(createEmpty());
|
||||||
grid.grid().setLetterLo(OFF_0_2, LETTER_X); // Conflict at the end
|
placeWord(grid.grid(), Slot.packSlotKey(0, CLUE_RIGHT), 1L << OFF_0_2, 0, Lemma.from(0, "X")); // Conflict at the end
|
||||||
assertFalse(placeWord(grid.grid(), key, lo, hi, w1));
|
assertFalse(placeWord(grid.grid(), key, lo, hi, w1));
|
||||||
map = grid.stream(Clues.createEmpty()).collect(Collectors.toMap(LetterAt::index, LetterAt::letter));
|
map = grid.stream(Clues.createEmpty()).collect(Collectors.toMap(LetterAt::index, LetterAt::letter));
|
||||||
assertEquals(1, map.size());
|
assertEquals(1, map.size());
|
||||||
|
|||||||
Reference in New Issue
Block a user