diff --git a/src/main/java/puzzle/Export.java b/src/main/java/puzzle/Export.java index 3371a2b..53f9048 100644 --- a/src/main/java/puzzle/Export.java +++ b/src/main/java/puzzle/Export.java @@ -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))); } } } diff --git a/src/main/java/puzzle/SwedishGenerator.java b/src/main/java/puzzle/SwedishGenerator.java index 6a2123b..67185e7 100644 --- a/src/main/java/puzzle/SwedishGenerator.java +++ b/src/main/java/puzzle/SwedishGenerator.java @@ -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)); diff --git a/src/test/java/puzzle/ExportFormatTest.java b/src/test/java/puzzle/ExportFormatTest.java index ecf0aac..cedb914 100644 --- a/src/test/java/puzzle/ExportFormatTest.java +++ b/src/test/java/puzzle/ExportFormatTest.java @@ -15,6 +15,9 @@ import java.io.IOException; import java.nio.file.Paths; import static org.junit.jupiter.api.Assertions.*; +import static puzzle.MainTest.*; +import static puzzle.MainTest.LETTER_E; +import static puzzle.MainTest.LETTER_T; import static puzzle.SwedishGenerator.*; public class ExportFormatTest { @@ -42,10 +45,10 @@ public class ExportFormatTest { clueMap[key] = SwedishGeneratorTest.TEST; // Manually fill the grid letters for "TEST" at (0,1), (0,2), (0,3), (0,4) - grid.setLetter(Grid.offset(0, 1), (byte) 'T'); - grid.setLetter(Grid.offset(0, 2), (byte) 'E'); - grid.setLetter(Grid.offset(0, 3), (byte) 'S'); - grid.setLetter(Grid.offset(0, 4), (byte) 'T'); + grid.setLetter(Grid.offset(0, 1), LETTER_T); + grid.setLetter(Grid.offset(0, 2), LETTER_E); + grid.setLetter(Grid.offset(0, 3), LETTER_S); + grid.setLetter(Grid.offset(0, 4), LETTER_T); var fillResult = new FillResult(true, new Gridded(grid), clueMap, new FillStats(0, 0, 0, 0)); var puzzleResult = new PuzzleResult(new Clued(clues), fillResult); diff --git a/src/test/java/puzzle/MainTest.java b/src/test/java/puzzle/MainTest.java index 417726e..fd31512 100644 --- a/src/test/java/puzzle/MainTest.java +++ b/src/test/java/puzzle/MainTest.java @@ -21,6 +21,9 @@ public class MainTest { static final byte LETTER_A = (byte) 'A'; static final byte LETTER_B = (byte) 'B'; static final byte LETTER_Z = (byte) 'Z'; + static final byte LETTER_T = (byte) 'T'; + static final byte LETTER_E = (byte) 'E'; + static final byte LETTER_S = (byte) 'S'; static final byte CLUE_DOWN = 0; static final byte CLUE_RIGHT = 1; static final byte CLUE_UP = 2; diff --git a/src/test/java/puzzle/SwedishGeneratorTest.java b/src/test/java/puzzle/SwedishGeneratorTest.java index b90fef0..6330295 100644 --- a/src/test/java/puzzle/SwedishGeneratorTest.java +++ b/src/test/java/puzzle/SwedishGeneratorTest.java @@ -132,7 +132,7 @@ public class SwedishGeneratorTest { void testGrid() { var grid = createEmpty(); grid.setLetter(OFF_0_0, LETTER_A); - assertEquals('A', grid.letter32At(OFF_0_0)); + assertEquals(LETTER_A, grid.letter32At(OFF_0_0)); } @Test @@ -333,9 +333,9 @@ public class SwedishGeneratorTest { // 1. Successful placement in empty grid assertTrue(placeWord(grid, s, w1, undoBuffer, 0)); - assertEquals('A', grid.letter32At(OFF_0_0)); - assertEquals('B', grid.letter32At(OFF_0_1)); - assertEquals('C', grid.letter32At(OFF_0_2)); + assertEquals(LETTER_A, grid.letter32At(OFF_0_0)); + assertEquals(LETTER_B, grid.letter32At(OFF_0_1)); + assertEquals(LETTER_C, grid.letter32At(OFF_0_2)); assertEquals(lo, undoBuffer[0]); // 2. Successful placement with partial overlap (same characters) @@ -346,9 +346,9 @@ public class SwedishGeneratorTest { var w2 = ABD; assertFalse(placeWord(grid, s, w2, undoBuffer, 2)); // Verify grid is unchanged (still "ABC") - assertEquals('A', grid.letter32At(OFF_0_0)); - assertEquals('B', grid.letter32At(OFF_0_1)); - assertEquals('C', grid.letter32At(OFF_0_2)); + assertEquals(LETTER_A, grid.letter32At(OFF_0_0)); + assertEquals(LETTER_B, grid.letter32At(OFF_0_1)); + assertEquals(LETTER_C, grid.letter32At(OFF_0_2)); // 4. Partial placement then conflict (rollback) grid = createEmpty(); @@ -357,7 +357,7 @@ public class SwedishGeneratorTest { // Verify grid is still empty (except for 'X') assertEquals(DASH, grid.letter32At(OFF_0_0)); assertEquals(DASH, grid.letter32At(OFF_0_1)); - assertEquals('X', grid.letter32At(OFF_0_2)); + assertEquals(LETTER_X, grid.letter32At(OFF_0_2)); } @Test @@ -372,8 +372,8 @@ public class SwedishGeneratorTest { var placed = placeWord(grid, s, w, undoBuffer, 0); assertTrue(placed); - assertEquals('A', grid.letter32At(OFF_0_1)); - assertEquals('Z', grid.letter32At(OFF_0_2)); + assertEquals(LETTER_A, grid.letter32At(OFF_0_1)); + assertEquals(LETTER_Z, grid.letter32At(OFF_0_2)); assertEquals(lo, undoBuffer[0]); grid.undoPlace(undoBuffer[0], undoBuffer[1]);