Untitled
unknown
plain_text
a year ago
4.4 kB
7
Indexable
package exercises; import java.util.ArrayList; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Exercise06 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String command = scanner.nextLine(); ArrayList<String> input = new ArrayList<>(); int counter = getInputAndCounter(scanner, command, input); String rotationCommand = input.get(0); int degrees = getDegrees(rotationCommand); input.remove(0); int length = getMatrixLength(input); char[][] matrix = getMatrix(input, counter, length); if (degrees == 90) { oneRotation(input, length, matrix); } else if (degrees == 0) { print(input, length, matrix); } else if (degrees == 180) { twoRotations(input, counter, length, matrix); } else if (degrees == 270) { threeRotations(input, length, matrix); } } private static int getDegrees(String rotationCommand) { String regex = "([A-Za-z]+)(\\()([0-9]+)(\\))"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(rotationCommand); boolean matches = matcher.matches(); int degrees = Integer.parseInt(matcher.group(3)); while (degrees >= 360){ degrees = degrees % 360; } return degrees; } private static void threeRotations(ArrayList<String> list, int length, char[][] matrix) { char[][] newMatrix = new char[length][list.size()]; int i = 0; for (int c = 0; c < newMatrix[list.size()].length; c++) { int j = 0; for (int r = newMatrix.length - 1; r >= 0; r--) { if (j < matrix[i].length) { newMatrix[r][c] = matrix[i][j]; } j++; } i++; } print(list, length, newMatrix); } private static void twoRotations(ArrayList<String> list, int counter, int length, char[][] matrix) { char[][] newMatrix = new char[counter][length]; for (int r = 0; r < matrix.length; r++) { for (int c = matrix[r].length - 1; c >= 0; c--) { newMatrix[matrix.length - 1 - r][c] = matrix[r][matrix[r].length - 1 - c]; } } print(list, length, newMatrix); } private static void print(ArrayList<String> list, int length, char[][] matrix) { for (int r = 0; r < matrix.length; r++) { for (int c = 0; c < matrix[r].length; c++) { if (matrix[r][c] == 0) { // You missed this condition!!!!!!!!!!!!!!!!!!!!! matrix[r][c] = ' '; } System.out.print(matrix[r][c]); } System.out.println(); } } private static void oneRotation(ArrayList<String> list, int length, char[][] matrix) { char[][] newMatrix = new char[length][list.size()]; int i = 0; for (int c = matrix.length - 1; c >= 0; c--) { int j = 0; for (int r = 0; r < matrix[i].length; r++) { newMatrix[r][c] = matrix[i][j]; j++; } i++; } print(list, length, newMatrix); } private static char[][] getMatrix(ArrayList<String> list, int counter, int length) { char[][] matrix = new char[counter][length]; for (int r = 0; r < matrix.length; r++) { char[] arr = list.get(r).toCharArray(); matrix[r] = arr; } return matrix; } private static int getMatrixLength(ArrayList<String> list) { int max = Integer.MIN_VALUE; for (String s : list) { if (s.length() > max) { max = s.length(); } } return max; } private static int getInputAndCounter(Scanner scanner, String command, ArrayList<String> list) { int counter = 0; while (!command.equalsIgnoreCase("END")) { list.add(command); command = scanner.nextLine(); counter++; } return counter - 1; } }
Editor is loading...
Leave a Comment