Advertisement
Guest User

Untitled

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