tripTiPscout

02. Treasure Hunt

Oct 19th, 2022
914
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.67 KB | None | 0 0
  1. package Advanced;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.Scanner;
  6.  
  7. public class Main {
  8.  
  9.     static int startRow;
  10.     static int startCol;
  11.     static boolean treasureIsFound = false;
  12.     static List<String> moves = new ArrayList<>();
  13.     static boolean isValidMove;
  14.  
  15.     public static void main(String[] args) {
  16.         Scanner scanner = new Scanner(System.in);
  17.  
  18.         String[][] matrix = readMatrix(scanner);
  19.  
  20.         findStartPosition(matrix);
  21.  
  22.         String command = scanner.nextLine();
  23.  
  24.         while (!command.equals("Finish")) {
  25.             String directions = command;
  26.  
  27.             switch (directions) {
  28.                 case "up":
  29.                     move(matrix, startRow - 1, startCol);
  30.                     if (isValidMove) {
  31.                         moves.add("up");  
  32.                     }
  33.                     break;
  34.                 case "down":
  35.                     move(matrix, startRow + 1, startCol);
  36.                     if (isValidMove) {
  37.                         moves.add("down");
  38.                     }
  39.                     break;
  40.                 case "right":
  41.                     move(matrix, startRow, startCol + 1);
  42.                     if (isValidMove) {
  43.                         moves.add("right");
  44.                     }
  45.                     break;
  46.                 case "left":
  47.                     move(matrix, startRow, startCol - 1);
  48.                     if (isValidMove) {
  49.                         moves.add("left");
  50.                     }
  51.                     break;
  52.             }
  53.             if (treasureIsFound) {
  54.                 break;
  55.             }
  56.             command = scanner.nextLine();
  57.         }
  58.  
  59.         if (treasureIsFound) {
  60.             System.out.println("I've found the treasure!");
  61.             System.out.println("The right path is " + String.join(", ", moves));
  62.         } else {
  63.             System.out.println("The map is fake!");
  64.         }
  65.     }
  66.  
  67.     private static void findStartPosition(String[][] matrix) {
  68.         for (int row = 0; row < matrix.length; row++) {
  69.             for (int col = 0; col < matrix[row].length; col++) {
  70.                 if (matrix[row][col].equals("Y")) {
  71.                     startRow = row;
  72.                     startCol = col;
  73.                 }
  74.             }
  75.         }
  76.     }
  77.  
  78.     private static void move(String[][] matrix, int newRow, int newCol) {
  79.         if (isInBounds(matrix, newRow, newCol) && isNotTree(matrix, newRow, newCol)) {
  80.             if (matrix[newRow][newCol].equals("X")) {
  81.                 treasureIsFound = true;
  82.             } else {
  83.                 matrix[startRow][startCol] = "-";
  84.                 matrix[newRow][newCol] = "Y";
  85.                 startRow = newRow;
  86.                 startCol = newCol;
  87.                 isValidMove = true;
  88.             }
  89.         } else {
  90.             isValidMove = false;
  91.         }
  92.     }
  93.  
  94.     private static String[] readArray(Scanner scanner) {
  95.         return scanner.nextLine().split(" ");
  96.     }
  97.  
  98.     private static String[][] readMatrix(Scanner scanner) {
  99.         String[] rowsAndCols = readArray(scanner);
  100.  
  101.         int rows = Integer.parseInt(rowsAndCols[0]);
  102.         int cols = Integer.parseInt(rowsAndCols[1]);
  103.  
  104.         String[][] matrix = new String[rows][cols];
  105.  
  106.         for (int r = 0; r < rows; r++) {
  107.             matrix[r] = readArray(scanner);
  108.         }
  109.  
  110.         return matrix;
  111.     }
  112.  
  113.     private static boolean isInBounds(String[][] matrix, int row, int col) {
  114.         return row >= 0 && row < matrix.length && col >= 0 && col < matrix[row].length;
  115.     }
  116.  
  117.     private static boolean isNotTree(String[][] matrix, int row, int col) {
  118.         return !matrix[row][col].equals("T");
  119.     }
  120.  
  121. }
  122.  
Advertisement
Add Comment
Please, Sign In to add comment