borovaneca

Crossfire

May 16th, 2023
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.50 KB | None | 0 0
  1. package Advance.Matrices.Exercise;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8.  
  9. public class Crossfire {
  10.     private static int rows, cols;
  11.     private static List<List<Integer>> matrix;
  12.  
  13.     public static void main(String[] args) throws IOException {
  14.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  15.         String[] dimensions = reader.readLine().split(" ");
  16.         rows = Integer.parseInt(dimensions[0]);
  17.         cols = Integer.parseInt(dimensions[1]);
  18.  
  19.         int counter = 1;
  20.         matrix = new ArrayList<>();
  21.  
  22.         for (int row = 0; row < rows; row++) {
  23.             matrix.add(new ArrayList<>());
  24.             for (int col = 0; col < cols; col++) {
  25.                 matrix.get(row).add(counter++);
  26.             }
  27.         }
  28.  
  29.         String input;
  30.  
  31.         while (!"Nuke it from orbit".equals(input = reader.readLine())) {
  32.             String[] tokens = input.split(" ");
  33.             int targetRow = Integer.parseInt(tokens[0]);
  34.             int targetCol = Integer.parseInt(tokens[1]);
  35.             int radius = Integer.parseInt(tokens[2]);
  36.  
  37.             int rowStart = Math.max(0, targetRow - radius);
  38.             int rowEnd = Math.min(rows - 1, targetRow + radius);
  39.             int colStart = Math.max(0, targetCol - radius);
  40.             int colEnd = Math.min(cols - 1, targetCol + radius);
  41.  
  42.             for (int col = colStart; col <= colEnd; col++) {
  43.                 if (inRange(targetRow, col)) {
  44.                     matrix.get(targetRow).set(col, 0);
  45.                 }
  46.             }
  47.             for (int row = rowStart; row <= rowEnd; row++) {
  48.                 if (inRange(row, targetCol)) {
  49.                     matrix.get(row).set(targetCol, 0);
  50.                 }
  51.             }
  52.             matrix.forEach(row -> row.removeIf(value -> value == 0));
  53.             matrix.removeIf(List::isEmpty);
  54.         }
  55.         System.out.println(getMatrixString());
  56.  
  57.     }
  58.  
  59.     private static String getMatrixString() {
  60.         StringBuilder output = new StringBuilder();
  61.         for (List<Integer> row : matrix) {
  62.             output.append(row.toString().replaceAll("[\\[\\],]", ""));
  63.             output.append(System.lineSeparator());
  64.         }
  65.         return output.toString();
  66.     }
  67.  
  68.     private static boolean inRange(int row, int col) {
  69.         return row >= 0 && row < matrix.size() &&
  70.                 col >= 0 && col < matrix.get(row).size();
  71.     }
  72. }
Advertisement
Add Comment
Please, Sign In to add comment