Advertisement
Ligh7_of_H3av3n

06. String Matrix Rotation

May 17th, 2024
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.29 KB | None | 0 0
  1. package Uprajnenie;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Scanner;
  5. import java.util.regex.Matcher;
  6. import java.util.regex.Pattern;
  7.  
  8. public class StringMatrixRotation {
  9.     public static void main(String[] args) {
  10.         Scanner scanner = new Scanner(System.in);
  11.  
  12.  
  13.         String command = scanner.nextLine();
  14.  
  15.         ArrayList<String> input = new ArrayList<>();
  16.  
  17.         int counter = getInputAndCounter(scanner, command, input);
  18.  
  19.         String rotationCommand = input.get(0);
  20.  
  21.         int degrees = getDegrees(rotationCommand);
  22.  
  23.         input.remove(0);
  24.  
  25.         int length = getMatrixLength(input);
  26.  
  27.         char[][] matrix = getMatrix(input, counter, length);
  28.  
  29.  
  30.         if (degrees == 90) {
  31.             oneRotation(input, length, matrix);
  32.         } else if (degrees == 0) {
  33.             print(input, length, matrix);
  34.         } else if (degrees == 180) {
  35.             twoRotations(input, counter, length, matrix);
  36.         } else if (degrees == 270) {
  37.             threeRotations(input, length, matrix);
  38.         }
  39.     }
  40.  
  41.     private static int getDegrees(String rotationCommand) {
  42.         String regex = "([A-Za-z]+)(\\()([0-9]+)(\\))";
  43.         Pattern pattern = Pattern.compile(regex);
  44.         Matcher matcher = pattern.matcher(rotationCommand);
  45.  
  46.         boolean matches = matcher.matches();
  47.  
  48.         int degrees = Integer.parseInt(matcher.group(3));
  49.  
  50.         while (degrees >= 360){
  51.             degrees = degrees % 360;
  52.         }
  53.         return degrees;
  54.     }
  55.  
  56.     private static void threeRotations(ArrayList<String> list, int length, char[][] matrix) {
  57.         char[][] newMatrix = new char[length][list.size()];
  58.         int i = 0;
  59.         for (int c = 0; c < newMatrix[list.size()].length; c++) {
  60.             int j = 0;
  61.             for (int r = newMatrix.length - 1; r >= 0; r--) {
  62.                 if (j < matrix[i].length) {
  63.                     newMatrix[r][c] = matrix[i][j];
  64.                 }
  65.                 j++;
  66.             }
  67.             i++;
  68.         }
  69.         print(list, length, newMatrix);
  70.     }
  71.  
  72.     private static void twoRotations(ArrayList<String> list, int counter, int length, char[][] matrix) {
  73.         char[][] newMatrix = new char[counter][length];
  74.         for (int r = 0; r < matrix.length; r++) {
  75.             for (int c = matrix[r].length - 1; c >= 0; c--) {
  76.                 newMatrix[matrix.length - 1 - r][c] = matrix[r][matrix[r].length - 1 - c];
  77.             }
  78.         }
  79.         print(list, length, newMatrix);
  80.     }
  81.  
  82.     private static void print(ArrayList<String> list, int length, char[][] matrix) {
  83.         for (int r = 0; r < matrix.length; r++) {
  84.             for (int c = 0; c < matrix[r].length; c++) {
  85.                 if (matrix[r][c] == 0) { // You missed this condition!!!!!!!!!!!!!!!!!!!!!
  86.                     matrix[r][c] = ' ';
  87.                 }
  88.                 System.out.print(matrix[r][c]);
  89.             }
  90.             System.out.println();
  91.         }
  92.     }
  93.  
  94.     private static void oneRotation(ArrayList<String> list, int length, char[][] matrix) {
  95.         char[][] newMatrix = new char[length][list.size()];
  96.         int i = 0;
  97.         for (int c = matrix.length - 1; c >= 0; c--) {
  98.             int j = 0;
  99.             for (int r = 0; r < matrix[i].length; r++) {
  100.                 newMatrix[r][c] = matrix[i][j];
  101.                 j++;
  102.             }
  103.             i++;
  104.         }
  105.         print(list, length, newMatrix);
  106.     }
  107.  
  108.     private static char[][] getMatrix(ArrayList<String> list, int counter, int length) {
  109.         char[][] matrix = new char[counter][length];
  110.         for (int r = 0; r < matrix.length; r++) {
  111.             char[] arr = list.get(r).toCharArray();
  112.             matrix[r] = arr;
  113.         }
  114.         return matrix;
  115.     }
  116.  
  117.     private static int getMatrixLength(ArrayList<String> list) {
  118.         int max = Integer.MIN_VALUE;
  119.         for (String s : list) {
  120.             if (s.length() > max) {
  121.                 max = s.length();
  122.             }
  123.         }
  124.         return max;
  125.     }
  126.  
  127.     private static int getInputAndCounter(Scanner scanner, String command, ArrayList<String> list) {
  128.         int counter = 0;
  129.         while (!command.equalsIgnoreCase("END")) {
  130.             list.add(command);
  131.             command = scanner.nextLine();
  132.             counter++;
  133.         }
  134.         return counter - 1;
  135.     }
  136. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement