diff options
| author | olim88 <bobq4582@gmail.com> | 2025-03-18 23:19:02 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-18 19:19:02 -0400 |
| commit | 87341278c2a1c547e1b5785326195620726a0730 (patch) | |
| tree | be706a6bcb28098deafe29a4b88a5ff976067740 /src | |
| parent | 7604c1cde3407ce97e22053f2919d7f22669f954 (diff) | |
| download | Skyblocker-87341278c2a1c547e1b5785326195620726a0730.tar.gz Skyblocker-87341278c2a1c547e1b5785326195620726a0730.tar.bz2 Skyblocker-87341278c2a1c547e1b5785326195620726a0730.zip | |
fix bugged patters (#1216)
Write test for rotations. Work out it is wrong. fix this. now should work well (I should write test more often)
Diffstat (limited to 'src')
4 files changed, 82 insertions, 15 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilCalculations.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilCalculations.java index 14ca38c3..13dbf469 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilCalculations.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilCalculations.java @@ -11,7 +11,7 @@ import java.util.List; import java.util.concurrent.atomic.AtomicInteger; public class FossilCalculations { - private static final List<Structures.permutation> POSSIBLE_STATES = getAllPossibleStates(); + protected static final List<Structures.permutation> POSSIBLE_STATES = getAllPossibleStates(); private static final int EXCAVATOR_WIDTH = 9; private static final int EXCAVATOR_HEIGHT = 6; @@ -186,7 +186,7 @@ public class FossilCalculations { * @param grid input grid * @return flipped grid */ - private static Structures.TileGrid flipGrid(Structures.TileGrid grid) { + protected static Structures.TileGrid flipGrid(Structures.TileGrid grid) { Structures.TileGrid output = new Structures.TileGrid(new Structures.TileState[grid.height()][grid.width()]); for (int x = 0; x < grid.width(); x++) { for (int y = 0; y < grid.height(); y++) { @@ -203,15 +203,15 @@ public class FossilCalculations { * @param rotation rotation amount in degrees * @return rotated grid */ - private static Structures.TileGrid rotateGrid(Structures.TileGrid grid, int rotation) { + protected static Structures.TileGrid rotateGrid(Structures.TileGrid grid, int rotation) { int startingWidth = grid.width() - 1; int startingHeight = grid.height() - 1; switch (rotation) { case 90 -> { - Structures.TileGrid output = new Structures.TileGrid(new Structures.TileState[grid.height()][grid.width()]); - for (int x = 0; x < grid.width(); x++) { - for (int y = 0; y < grid.height(); y++) { - output.updateSlot(startingWidth - x, y, grid.getSlot(x, y)); + Structures.TileGrid output = new Structures.TileGrid(new Structures.TileState[grid.width()][grid.height()]); + for (int originalX = 0; originalX < grid.width(); originalX++) { + for (int originalY = 0; originalY < grid.height(); originalY++) { + output.updateSlot(startingHeight - originalY, originalX, grid.getSlot(originalX, originalY)); } } return output; @@ -226,10 +226,10 @@ public class FossilCalculations { return output; } case 270 -> { - Structures.TileGrid output = new Structures.TileGrid(new Structures.TileState[grid.height()][grid.width()]); - for (int x = 0; x < grid.width(); x++) { - for (int y = 0; y < grid.height(); y++) { - output.updateSlot(x, startingHeight - y, grid.getSlot(x, y)); + Structures.TileGrid output = new Structures.TileGrid(new Structures.TileState[grid.width()][grid.height()]); + for (int originalX = 0; originalX < grid.width(); originalX++) { + for (int originalY = 0; originalY < grid.height(); originalY++) { + output.updateSlot(originalY,startingWidth - originalX, grid.getSlot(originalX, originalY)); } } return output; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilTypes.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilTypes.java index 4e3d1b1d..e5a80ee8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilTypes.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilTypes.java @@ -31,7 +31,7 @@ public enum FossilTypes { {Structures.TileState.FOSSIL, Structures.TileState.EMPTY, Structures.TileState.EMPTY, Structures.TileState.EMPTY, Structures.TileState.FOSSIL}, {Structures.TileState.FOSSIL, Structures.TileState.EMPTY, Structures.TileState.FOSSIL, Structures.TileState.EMPTY, Structures.TileState.FOSSIL}, {Structures.TileState.FOSSIL, Structures.TileState.EMPTY, Structures.TileState.FOSSIL, Structures.TileState.FOSSIL, Structures.TileState.FOSSIL} - }, List.of(Structures.TransformationOptions.ROTATED_0, Structures.TransformationOptions.ROTATED_90, Structures.TransformationOptions.ROTATED_180, Structures.TransformationOptions.ROTATED_270), "7.1", 14, "Helix"), + }, List.of(Structures.TransformationOptions.ROTATED_0, Structures.TransformationOptions.ROTATED_90, Structures.TransformationOptions.ROTATED_180, Structures.TransformationOptions.FLIP_ROTATED_270), "7.1", 14, "Helix"), WEBBED(new Structures.TileState[][]{ {Structures.TileState.EMPTY, Structures.TileState.EMPTY, Structures.TileState.EMPTY, Structures.TileState.FOSSIL, Structures.TileState.EMPTY, Structures.TileState.EMPTY, Structures.TileState.EMPTY}, {Structures.TileState.FOSSIL, Structures.TileState.EMPTY, Structures.TileState.EMPTY, Structures.TileState.FOSSIL, Structures.TileState.EMPTY, Structures.TileState.EMPTY, Structures.TileState.FOSSIL}, diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/Structures.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/Structures.java index 3e7af14f..45bb9ca9 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/Structures.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/fossil/Structures.java @@ -1,5 +1,7 @@ package de.hysky.skyblocker.skyblock.dwarven.fossil; +import java.util.Arrays; + public class Structures { /** * The three possible states a tile could be in @@ -42,6 +44,15 @@ public class Structures { int height() { return state.length; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if(o instanceof TileGrid(TileState[][] state2)) { + return Arrays.deepEquals(state, state2); + } + return false; + } } /** diff --git a/src/test/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilSolverTest.java b/src/test/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilSolverTest.java index 99efca31..5eba8722 100644 --- a/src/test/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilSolverTest.java +++ b/src/test/java/de/hysky/skyblocker/skyblock/dwarven/fossil/FossilSolverTest.java @@ -5,7 +5,9 @@ import de.hysky.skyblocker.skyblock.dwarven.fossil.Structures.TileState; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import static de.hysky.skyblocker.skyblock.dwarven.fossil.FossilCalculations.getFossilChance; +import java.util.Arrays; + +import static de.hysky.skyblocker.skyblock.dwarven.fossil.FossilCalculations.*; public class FossilSolverTest { @@ -18,6 +20,10 @@ public class FossilSolverTest { } return new TileGrid(tileStates); } + @Test + public void testPossibleFossils() { + Assertions.assertEquals(287, POSSIBLE_STATES.size()); + } @Test void testPartlyFoundFossil() { @@ -27,7 +33,7 @@ public class FossilSolverTest { tileGrid.updateSlot(0, 4, TileState.FOSSIL); tileGrid.updateSlot(0, 5, TileState.FOSSIL); tileGrid.updateSlot(1, 5, TileState.FOSSIL); - Assertions.assertEquals(getFossilChance(tileGrid, null)[20], 1); + Assertions.assertEquals(1, getFossilChance(tileGrid, null)[20]); } @Test @@ -36,7 +42,7 @@ public class FossilSolverTest { tileGrid.updateSlot(1, 0, TileState.FOSSIL); tileGrid.updateSlot(3, 0, TileState.FOSSIL); tileGrid.updateSlot(0, 1, TileState.FOSSIL); - Assertions.assertEquals(getFossilChance(tileGrid, "7.7")[29], 1); + Assertions.assertEquals(1, getFossilChance(tileGrid, "7.7")[29]); } @Test @@ -61,4 +67,54 @@ public class FossilSolverTest { tileGrid.updateSlot(8, 0, TileState.FOSSIL); Assertions.assertTrue(Double.isNaN(getFossilChance(tileGrid, null)[1])); } + + + TileGrid createTestRotationGrid(int height, int width) { + TileState[][] tileStates = new TileState[height][width]; + for (int x = 0; x < height; x++) { + for (int y = 0; y < width; y++) { + tileStates[x][y] = TileState.UNKNOWN; + } + } + return new TileGrid(tileStates); + + } + @Test + void testRotation90(){ + TileGrid originalGrid = createTestRotationGrid(6, 3); + originalGrid.updateSlot(0, 0, TileState.FOSSIL); + TileGrid targetGrid = createTestRotationGrid(3, 6); + targetGrid.updateSlot(5, 0, TileState.FOSSIL); + TileGrid rotatedGrid = rotateGrid(originalGrid, 90); + Assertions.assertEquals(targetGrid, rotatedGrid); + } + @Test + void testRotation180(){ + TileGrid originalGrid = createTestRotationGrid(6, 3); + originalGrid.updateSlot(0, 0, TileState.FOSSIL); + TileGrid targetGrid = createTestRotationGrid(6, 3); + targetGrid.updateSlot(2, 5, TileState.FOSSIL); + TileGrid rotatedGrid = rotateGrid(originalGrid, 180); + Assertions.assertEquals(targetGrid, rotatedGrid); + } + + @Test + void testRotation270(){ + TileGrid originalGrid = createTestRotationGrid(6, 3); + originalGrid.updateSlot(0, 0, TileState.FOSSIL); + TileGrid targetGrid = createTestRotationGrid(3, 6); + targetGrid.updateSlot(0, 2, TileState.FOSSIL); + TileGrid rotatedGrid = rotateGrid(originalGrid, 270); + Assertions.assertEquals(targetGrid, rotatedGrid); + } + + @Test + void testFlipped(){ + TileGrid originalGrid = createTestRotationGrid(6, 3); + originalGrid.updateSlot(0, 0, TileState.FOSSIL); + TileGrid targetGrid = createTestRotationGrid(6, 3); + targetGrid.updateSlot(0, 5, TileState.FOSSIL); + TileGrid flippedGrid = flipGrid(originalGrid); + Assertions.assertEquals(targetGrid, flippedGrid); + } } |
