From 8903b8c54f33c0fd5d9b62ce10495c94c000d637 Mon Sep 17 00:00:00 2001 From: Nimrod Abramovich <grumpydormin@gmail.com> Date: Sun, 19 Apr 2020 14:30:22 +0100 Subject: [PATCH] general cleanup --- bin/coursework/Cage.class | Bin 5095 -> 5250 bytes bin/coursework/Main.class | Bin 29824 -> 30004 bytes bin/coursework/RandomGenerator.class | Bin 10179 -> 10222 bytes bin/coursework/Solver.class | Bin 0 -> 3748 bytes src/coursework/Cage.java | 8 ++ src/coursework/Main.java | 134 ++++++++++++++++---------- src/coursework/RandomGenerator.java | 5 +- src/coursework/Solver.java | 137 +++++++++++++++++++++++++++ 8 files changed, 233 insertions(+), 51 deletions(-) create mode 100644 bin/coursework/Solver.class create mode 100644 src/coursework/Solver.java diff --git a/bin/coursework/Cage.class b/bin/coursework/Cage.class index c6c3ed15e75955038dd209362021099653822e4f..0d46fadf7157f06d6f76b9df718397930d2b3ef8 100644 GIT binary patch delta 190 zcmaE^-lWNO>ff$?3=9k=4EHv29p#YcNlz_tPE1b?OUx-vWn|!oa{UWZixNxnizc7t zh+*W}ti`#5tKO7>kwJukfkB^vk%5tcfq_+P3xm`e1_lNu20I1@1~#zZE(UuB1_mB5 go0Y+V!I6Q1fsx@hgC`cvG8@n|@58G34p`M)0DYn%9smFU delta 36 scmZqDe6G%Q>ff$?3=9k=40kqi9p#w(fg_5MYqK}!4lY&(1}28v00aaKHvj+t diff --git a/bin/coursework/Main.class b/bin/coursework/Main.class index a1011f22830a280134bd2237cb846b343e56df25..464a8a449899abc71b6193a9814592f925eb09f1 100644 GIT binary patch delta 13419 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 FNdRYzt2_Vz delta 13354 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 diff --git a/bin/coursework/RandomGenerator.class b/bin/coursework/RandomGenerator.class index 1f537e186719638b1e5d09d50f44faca09f7c2df..a8f01bdbc87bbb87844746bc98f29c1b24e0f285 100644 GIT binary patch literal 10222 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 literal 10179 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 diff --git a/bin/coursework/Solver.class b/bin/coursework/Solver.class new file mode 100644 index 0000000000000000000000000000000000000000..3f53a100d0f959129e4ecbda2c6aa57da6713928 GIT binary patch literal 3748 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 literal 0 HcmV?d00001 diff --git a/src/coursework/Cage.java b/src/coursework/Cage.java index 190e102..a066052 100644 --- a/src/coursework/Cage.java +++ b/src/coursework/Cage.java @@ -181,5 +181,13 @@ public class Cage { public int[] getCageIds() { return squareIds; } + + public int getCageValue() { + return value; + } + + public String getCageOperator() { + return operator; + } } \ No newline at end of file diff --git a/src/coursework/Main.java b/src/coursework/Main.java index fb366a6..c9b219c 100644 --- a/src/coursework/Main.java +++ b/src/coursework/Main.java @@ -179,27 +179,26 @@ public class Main extends Application { Button loadGameFileButton = new Button("Load Game - File"); CheckBox showMistakesCheck = new CheckBox("Show mistakes"); + showMistakesCheck.setMinWidth(showMistakesCheck.getPrefWidth()); if (showMistakes) { showMistakesCheck.setSelected(true); } Button loadGameTextInputButton = new Button("Load Game - Text"); - loadGameFileButton.setPrefWidth(200); + loadGameFileButton.setPrefWidth(150); loadGameTextInputButton.setPrefWidth(loadGameFileButton.getPrefWidth()); Button generateRandomGameButton = new Button("Generate Random Game"); generateRandomGameButton.setPrefWidth(loadGameFileButton.getPrefWidth()); - Button solveGridButton = new Button("Solve Current Grid"); - solveGridButton.setPrefWidth(loadGameFileButton.getPrefWidth()); VBox leftVBox = new VBox(); leftVBox.setSpacing(5); leftVBox.getChildren().addAll(loadGameFileButton, loadGameTextInputButton); - VBox rightVBox = new VBox(); - rightVBox.setSpacing(5); - rightVBox.getChildren().addAll(generateRandomGameButton, solveGridButton); - - topHBox.getChildren().addAll(leftVBox, showMistakesCheck, rightVBox); +// VBox rightVBox = new VBox(); +// rightVBox.setSpacing(5); +// rightVBox.getChildren().addAll(, generateRandomGameButton); +// + topHBox.getChildren().addAll(leftVBox, showMistakesCheck, generateRandomGameButton); showMistakesCheck.selectedProperty().addListener((obs, oldVal, newVal) -> { showMistakesCheckEvent(showMistakesCheck); @@ -232,8 +231,10 @@ public class Main extends Application { bottomHBox.setSpacing(10); bottomHBox.setAlignment(Pos.TOP_CENTER); - undoButton = new Button("", new ImageView(new Image("file:Images/undo_icon.png"))); - redoButton = new Button("", new ImageView(new Image("file:Images/redo_icon.png"))); +// undoButton = new Button("", new ImageView(new Image("file:Images/undo_icon.png"))); +// redoButton = new Button("", new ImageView(new Image("file:Images/redo_icon.png"))); + undoButton = new Button("Undo"); + redoButton = new Button("Redo"); Button clearButton = new Button("Clear"); undoButton.setOnAction(e -> { undoButtonClickEvent(); @@ -244,8 +245,9 @@ public class Main extends Application { undoButton.setDisable(true); redoButton.setDisable(true); - clearButton.setPrefHeight(36); - clearButton.setPrefWidth(120); + clearButton.setPrefSize(100, 36); + undoButton.setPrefSize(80, 36); + redoButton.setPrefSize(80, 36); clearButtonClickEvent(clearButton); bottomHBox.getChildren().addAll(undoButton, clearButton, redoButton); @@ -276,6 +278,7 @@ public class Main extends Application { vbox.getChildren().add(balanceButtonBottom); vbox.setSpacing(10); vbox.setAlignment(Pos.CENTER_LEFT); + vbox.setPadding(new Insets(0, 0, 0, 0)); return vbox; } @@ -366,22 +369,27 @@ public class Main extends Application { return slider; } - private HBox setupRadioHBox() { - HBox hboxMiddle = new HBox(); - ToggleGroup tg = new ToggleGroup(); - RadioButton easy = new RadioButton("Easy"); - easy.setToggleGroup(tg); - RadioButton medium = new RadioButton("Medium"); - medium.setToggleGroup(tg); - RadioButton hard = new RadioButton("Hard"); - hard.setToggleGroup(tg); - hboxMiddle.setAlignment(Pos.CENTER); - hboxMiddle.setSpacing(10); - VBox radioVBox = new VBox(easy, medium, hard); - radioVBox.setSpacing(5); - hboxMiddle.getChildren().addAll(new Label("Difficulty:"), radioVBox); - - return hboxMiddle; +// private HBox setupRadioHBox() { +// HBox hboxMiddle = new HBox(); +// ToggleGroup tg = new ToggleGroup(); +// RadioButton easy = new RadioButton("Easy"); +// easy.setToggleGroup(tg); +// RadioButton medium = new RadioButton("Medium"); +// medium.setToggleGroup(tg); +// RadioButton hard = new RadioButton("Hard"); +// hard.setToggleGroup(tg); +// hboxMiddle.setAlignment(Pos.CENTER); +// hboxMiddle.setSpacing(10); +// VBox radioVBox = new VBox(easy, medium, hard); +// radioVBox.setSpacing(5); +// hboxMiddle.getChildren().addAll(new Label("Difficulty:"), radioVBox); +// +// return hboxMiddle; +// } + + private void solveGrid() { + Solver solver = new Solver(N, gridCages); + solver.solvePuzzel(); } /////////////////////////////////////////////////////////// @@ -402,13 +410,6 @@ public class Main extends Application { Button generateButton = new Button("Generate"); generateButton.setAlignment(Pos.TOP_RIGHT); - generateButton.setOnAction(e -> { - popupStage.close(); - N = (int) slider.getValue(); - resetGrid(); - RandomGenerator rg = new RandomGenerator(N); - gridCages = rg.generate(); - }); Button cancelButton = new Button("Cancel"); cancelButton.setAlignment(Pos.TOP_LEFT); @@ -420,8 +421,43 @@ public class Main extends Application { hboxTop.setSpacing(3); hboxTop.setAlignment(Pos.CENTER); + HBox hboxMiddle = new HBox(); + ToggleGroup tg = new ToggleGroup(); + RadioButton easy = new RadioButton("Easy"); + easy.setToggleGroup(tg); + RadioButton medium = new RadioButton("Medium"); + medium.setToggleGroup(tg); + RadioButton hard = new RadioButton("Hard"); + hard.setToggleGroup(tg); + hboxMiddle.setAlignment(Pos.CENTER); + hboxMiddle.setSpacing(10); + VBox radioVBox = new VBox(easy, medium, hard); + radioVBox.setSpacing(5); + hboxMiddle.getChildren().addAll(new Label("Difficulty:"), radioVBox); + hboxBottom.getChildren().addAll(cancelButton, generateButton); - vbox.getChildren().addAll(hboxTop, setupRadioHBox(), hboxBottom); + vbox.getChildren().addAll(hboxTop, hboxMiddle, hboxBottom); + + generateButton.setOnAction(e -> { + popupStage.close(); + N = (int) slider.getValue(); + resetGrid(); + int difficulty; + if (easy.isSelected()) { + difficulty = 1; + } + else if (medium.isSelected()) { + difficulty = 2; + } + else if (hard.isSelected()) { + difficulty = 3; + } + else { + difficulty = 2; + } + RandomGenerator rg = new RandomGenerator(N, difficulty); + gridCages = rg.generate(); + }); popupStage.setScene(new Scene(vbox, 250, 250)); popupStage.show(); @@ -706,7 +742,7 @@ public class Main extends Application { public void start(Stage primaryStage) throws Exception { stage = primaryStage; VBox vBox = new VBox(); - int width = 400 + 80 * N; + int width = 350 + 80 * N; int height = 275 + 80 * N; scene = new Scene(vBox, width, height); @@ -779,18 +815,18 @@ public class Main extends Application { stage.close(); initialiseVariables(); VBox vBox = new VBox(); - int width = 300 + 80 * N; - int height = 300 + 80 * N; + int width = 350 + 80 * N; + int height = 275 + 80 * N; - Stage stage = new Stage(); + Stage newStage = new Stage(); Scene newScene = new Scene(vBox, width, height); - stage.setWidth(width); - stage.setHeight(height); + newStage.setWidth(width); + newStage.setHeight(height); vBox.setSpacing(5); vBox.setPadding(new Insets(20)); vBox.setAlignment(Pos.CENTER); - GridPane gridPane = setupGrid(width - 200, height - 120); + GridPane gridPane = setupGrid(width - 200, height - 175); undoStack.push(new GameState(GameState.getCurrentGameState(gridNumbers))); fontSize = 18; @@ -811,13 +847,13 @@ public class Main extends Application { stageWidthResizeEvent(stage, gridPane); stageHeightResizeEvent(stage, gridPane); - stage.setMinWidth(width + 50); - stage.setMinHeight(height + 50); - stage.setScene(newScene); - stage.setTitle("Mathdoku"); - stage.show(); + newStage.setMinWidth(width + 50); + newStage.setMinHeight(height + 50); + newStage.setScene(newScene); + newStage.setTitle("Mathdoku"); + newStage.show(); scene = newScene; - this.stage = stage; + stage = newStage; } diff --git a/src/coursework/RandomGenerator.java b/src/coursework/RandomGenerator.java index fcd6a00..8eddff0 100644 --- a/src/coursework/RandomGenerator.java +++ b/src/coursework/RandomGenerator.java @@ -12,12 +12,13 @@ public class RandomGenerator { private int N; private int[][] grid; + private int difficult; // 1 = easy | 2 = medium | 3 = hard private List<Integer> uncagedGrids = new ArrayList<Integer>(); private List<Integer> possibleMoves = new ArrayList<Integer>(); private List<Cage> gridCages = new ArrayList<Cage>(); - public RandomGenerator(int N) { + public RandomGenerator(int N, int difficulty) { this.N = N; grid = new int[N][N]; } @@ -160,7 +161,7 @@ public class RandomGenerator { cageOperator = keySet.get(random.nextInt(keySet.size())); cageValue = possibleValues.get(cageOperator); } - else {; + else { int row = cageIds[0] / N; int col = cageIds[0] % N; cageValue = grid[row][col]; diff --git a/src/coursework/Solver.java b/src/coursework/Solver.java new file mode 100644 index 0000000..58b843f --- /dev/null +++ b/src/coursework/Solver.java @@ -0,0 +1,137 @@ +package coursework; + +import java.util.List; + +public class Solver { + + private int N; + private int[][] gridValues; // -1 = not possible | 1 = possible | 2 = definite + private List<Cage> gridCages; + + public Solver(int N, List<Cage> gridCages) { + this.N = N; + this.gridCages = gridCages; + gridValues = new int[N*N][N]; + } + + public void solvePuzzel() { + setDefaultValues(); + output(); + checkCageValues(); + } + + private void setDefaultValues() { + for (int i = 0; i < N*N; i++) { + for (int j = 0; j < N; j++) { + gridValues[i][j] = 1; // sets all values to possible + } + } + } + + private void checkCageValues() { + for (Cage cage : gridCages) { + int cageValue = cage.getCageValue(); + int length = cage.getCageIds().length; + + if (length == 1) { + gridValues[cage.getCageIds()[0]][cageValue - 1] = 2; + removePossibleValue(cage.getCageIds()[0], cageValue); + } + else { + String operator = cage.getCageOperator(); + int counter = 1; + switch (operator) { + case "+": + int[] possibleValues = new int[length]; + for (int i = 0; i < length; i++) { + possibleValues[i] = 1; + } + + while (valuesMultiplied(possibleValues) < Math.pow(N, length)) { + if (sumOfValues(possibleValues, cageValue)) { + for (int possibleVal : possibleValues) { + for (int id : cage.getCageIds()) { + gridValues[id][possibleVal - 1] = 1; + } + } + } + + + for (int j = 1; j <= counter; j++) { + + if (possibleValues[possibleValues.length - counter] == N) { + possibleValues[possibleValues.length - counter] = 0; + possibleValues[possibleValues.length - 2] += 1; + counter += 1; + } + + } + + + + + } + + break; + case "-": + + break; + case "x": + + break; + case "�": + + break; + } + } + } + } + + private boolean sumOfValues(int[] values, int cageValue) { + int sum = 0; + for (int value : values) { + sum += value; + } + return sum == cageValue; + } + + private int valuesMultiplied(int[] values) { + int result = 1; + for (int value : values) { + result *= value; + } + return result; + } + + private void removePossibleValue(int id, int cageValue) { + int row = (int) id / N; + int col = id % N; + + for (int i = 0; i < N; i++) { + if (i != col) + gridValues[row*N + i][cageValue - 1] = -1; + } + for (int i = 0; i < N; i++) { + if (i != row) + gridValues[i*N + col][cageValue - 1] = -1; + } + for (int i = 0; i < N; i++) { + if (i != cageValue - 1) + gridValues[id][i] = -1; + } + } + + private void output() { + for (int i = 0; i < N; i++) { + for (int j = 0; j < N; j++) { + System.out.print("["); + for (int k = 0; k < N; k++) { + System.out.print(gridValues[i*N + j][k]); + System.out.print(","); + } + System.out.print("], "); + } + System.out.print("\n"); + } + } +} -- GitLab