Mirineo

06.String Matrix Rotation

Jan 25th, 2021
2,289
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package MultidimensionalArrays.Exercise;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Collections;
  5. import java.util.List;
  6. import java.util.Scanner;
  7.  
  8. public class StringMatrixRotation {
  9.     public static void main(String[] args) {
  10.  
  11.         Scanner scanner = new Scanner(System.in);
  12.  
  13.         int rotationDegrees = Integer.parseInt(scanner.nextLine().split("\\(")[1].replace(")", ""));
  14.         char[][] matrix = buildMatrix(scanner);
  15.         char[][] rotatedMatrix = rotateMatrix(rotationDegrees, matrix);
  16.         printMatrix(rotatedMatrix);
  17.  
  18.  
  19.     }
  20.  
  21.     private static char[][] rotateMatrix(int rotationDegrees, char[][] matrix) {
  22.         char[][] rotatedMatrix = new char[matrix.length][matrix[0].length];
  23.         int rotation = rotationDegrees / 90;
  24.  
  25.         while (rotation > 3) {
  26.             rotation = rotation % 4;
  27.         }
  28.  
  29.         int rows;
  30.         int cols;
  31.  
  32.         switch (rotation) {
  33.             case 0:
  34.                 rotatedMatrix = matrix;
  35.                 break;
  36.             case 1:
  37.                 rows = matrix[0].length;
  38.                 cols = matrix.length;
  39.  
  40.                 rotatedMatrix = new char[rows][cols];
  41.  
  42.                 for (int row = 0; row < rows; row++) {
  43.                     for (int col = 0; col < cols; col++) {
  44.                         rotatedMatrix[row][col] = matrix[cols - 1 - col][row];
  45.                     }
  46.                 }
  47.                 break;
  48.             case 2:
  49.                 rows = matrix.length;
  50.                 cols = matrix[0].length;
  51.  
  52.                 rotatedMatrix = new char[rows][cols];
  53.  
  54.                 for (int row = 0; row < rows; row++) {
  55.                     for (int col = 0; col < cols; col++) {
  56.                         rotatedMatrix[row][col] = matrix[rows - row - 1][cols - col - 1];
  57.                     }
  58.                 }
  59.                 break;
  60.             case 3:
  61.                 rows = matrix[0].length;
  62.                 cols = matrix.length;
  63.  
  64.                 rotatedMatrix = new char[rows][cols];
  65.  
  66.                 for (int row = 0; row < rows; row++) {
  67.                     for (int col = 0; col < cols; col++) {
  68.                         rotatedMatrix[row][col] = matrix[col][rows - 1 - row];
  69.                     }
  70.                 }
  71.                 break;
  72.         }
  73.         return rotatedMatrix;
  74.     }
  75.  
  76.     private static void printMatrix(char[][] matrix) {
  77.         for (int row = 0; row < matrix.length; row++) {
  78.             for (int col = 0; col < matrix[row].length; col++) {
  79.                 System.out.printf("%s", matrix[row][col]);
  80.             }
  81.             System.out.println();
  82.         }
  83.     }
  84.  
  85.     private static char[][] buildMatrix(Scanner scanner) {
  86.         String command;
  87.         List<String> lines = new ArrayList<>();
  88.         while (!"END".equals(command = scanner.nextLine())) {
  89.             lines.add(command);
  90.         }
  91.         char[][] matrix = new char[lines.size()][];
  92.  
  93.         for (int token = 0; token < lines.size(); token++) {
  94.             matrix[token] = lines.get(token).toCharArray();
  95.         }
  96.  
  97.         int biggestCol = 0;
  98.         for (int row = 0; row < matrix.length; row++) {
  99.             if (biggestCol < matrix[row].length - 1) {
  100.                 biggestCol = matrix[row].length - 1;
  101.             }
  102.         }
  103.  
  104.         for (int row = 0; row < matrix.length; row++) {
  105.             int col = matrix[row].length - 1;
  106.             int dif = biggestCol - col;
  107.             if (biggestCol > col) {
  108.                 String temp = String.valueOf(matrix[row]);
  109. //                String added = " ".repeat(dif);
  110.                 String added = String.join("", Collections.nCopies(dif, " "));
  111.                 temp = temp + added;
  112.                 matrix[row] = temp.toCharArray();
  113.             }
  114.  
  115.         }
  116.  
  117.         return matrix;
  118.     }
  119. }
RAW Paste Data