Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package Advanced;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Scanner;
- public class Main {
- static int startRow;
- static int startCol;
- static boolean treasureIsFound = false;
- static List<String> moves = new ArrayList<>();
- static boolean isValidMove;
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
- String[][] matrix = readMatrix(scanner);
- findStartPosition(matrix);
- String command = scanner.nextLine();
- while (!command.equals("Finish")) {
- String directions = command;
- switch (directions) {
- case "up":
- move(matrix, startRow - 1, startCol);
- if (isValidMove) {
- moves.add("up");
- }
- break;
- case "down":
- move(matrix, startRow + 1, startCol);
- if (isValidMove) {
- moves.add("down");
- }
- break;
- case "right":
- move(matrix, startRow, startCol + 1);
- if (isValidMove) {
- moves.add("right");
- }
- break;
- case "left":
- move(matrix, startRow, startCol - 1);
- if (isValidMove) {
- moves.add("left");
- }
- break;
- }
- if (treasureIsFound) {
- break;
- }
- command = scanner.nextLine();
- }
- if (treasureIsFound) {
- System.out.println("I've found the treasure!");
- System.out.println("The right path is " + String.join(", ", moves));
- } else {
- System.out.println("The map is fake!");
- }
- }
- private static void findStartPosition(String[][] matrix) {
- for (int row = 0; row < matrix.length; row++) {
- for (int col = 0; col < matrix[row].length; col++) {
- if (matrix[row][col].equals("Y")) {
- startRow = row;
- startCol = col;
- }
- }
- }
- }
- private static void move(String[][] matrix, int newRow, int newCol) {
- if (isInBounds(matrix, newRow, newCol) && isNotTree(matrix, newRow, newCol)) {
- if (matrix[newRow][newCol].equals("X")) {
- treasureIsFound = true;
- } else {
- matrix[startRow][startCol] = "-";
- matrix[newRow][newCol] = "Y";
- startRow = newRow;
- startCol = newCol;
- isValidMove = true;
- }
- } else {
- isValidMove = false;
- }
- }
- private static String[] readArray(Scanner scanner) {
- return scanner.nextLine().split(" ");
- }
- private static String[][] readMatrix(Scanner scanner) {
- String[] rowsAndCols = readArray(scanner);
- int rows = Integer.parseInt(rowsAndCols[0]);
- int cols = Integer.parseInt(rowsAndCols[1]);
- String[][] matrix = new String[rows][cols];
- for (int r = 0; r < rows; r++) {
- matrix[r] = readArray(scanner);
- }
- return matrix;
- }
- private static boolean isInBounds(String[][] matrix, int row, int col) {
- return row >= 0 && row < matrix.length && col >= 0 && col < matrix[row].length;
- }
- private static boolean isNotTree(String[][] matrix, int row, int col) {
- return !matrix[row][col].equals("T");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment