SHOW:
|
|
- or go back to the newest paste.
1 | namespace StringMatrixRotation | |
2 | { | |
3 | using System; | |
4 | using System.Collections.Generic; | |
5 | using System.Text; | |
6 | ||
7 | public class Startup | |
8 | { | |
9 | public static void Main() | |
10 | { | |
11 | string rotateCommand = Console.ReadLine(); | |
12 | ||
13 | int indexOfOpeningBracket = rotateCommand.IndexOf("(") + 1; | |
14 | int indexOfClosingBracket = rotateCommand.IndexOf(")"); | |
15 | int degreesToRotateTo = int.Parse(rotateCommand.Substring(indexOfOpeningBracket, | |
16 | indexOfClosingBracket - indexOfOpeningBracket)) % 360; | |
17 | ||
18 | List<string> matrix = new List<string>(); | |
19 | int maxLenghtStrFromMatrix = int.MinValue; | |
20 | ||
21 | string inputLine = Console.ReadLine(); | |
22 | while (inputLine != "END") | |
23 | { | |
24 | matrix.Add(inputLine); | |
25 | ||
26 | if (inputLine.Length > maxLenghtStrFromMatrix) | |
27 | { | |
28 | maxLenghtStrFromMatrix = inputLine.Length; | |
29 | } | |
30 | ||
31 | inputLine = Console.ReadLine(); | |
32 | } | |
33 | ||
34 | MakeAllTheStringsFromTheMatrixWithTheSameLenght(matrix, maxLenghtStrFromMatrix); | |
35 | ||
36 | int matrixRows = matrix.Count; | |
37 | int matrixCols = maxLenghtStrFromMatrix; | |
38 | ||
39 | int startRow = 0; | |
40 | Func<int, bool> endRowFunc = (index) => index < matrixRows; | |
41 | ||
42 | int startCol = 0; | |
43 | Func<int, bool> endColFunc = (index) => index < matrixCols; | |
44 | ||
45 | int rowIncrementor = 1; | |
46 | int colIncrementor = 1; | |
47 | ||
48 | Func<List<string>, int, int, char> takeElementFunc = (matr, row, col) => matr[row][col]; | |
49 | ||
50 | if (degreesToRotateTo == 90) | |
51 | { | |
52 | startRow = 0; | |
53 | endRowFunc = (index) => index < matrixCols; | |
54 | ||
55 | startCol = matrixRows - 1; | |
56 | endColFunc = (index) => index >= 0; | |
57 | ||
58 | colIncrementor = -1; | |
59 | ||
60 | takeElementFunc = (matr, row, col) => matr[col][row]; | |
61 | } | |
62 | else if (degreesToRotateTo == 180) | |
63 | { | |
64 | startRow = matrixRows - 1; | |
65 | endRowFunc = (index) => index >= 0; | |
66 | ||
67 | startCol = matrixCols - 1; | |
68 | endColFunc = (index) => index >= 0; | |
69 | ||
70 | rowIncrementor = -1; | |
71 | colIncrementor = -1; | |
72 | } | |
73 | else if (degreesToRotateTo == 270) | |
74 | { | |
75 | startRow = matrixCols - 1; | |
76 | endRowFunc = (index) => index >= 0; | |
77 | ||
78 | endColFunc = (index) => index < matrixRows; | |
79 | ||
80 | rowIncrementor = -1; | |
81 | ||
82 | takeElementFunc = (matr, row, col) => matr[col][row]; | |
83 | } | |
84 | ||
85 | StringBuilder result = new StringBuilder(); | |
86 | for (int currRow = startRow; endRowFunc(currRow); currRow += rowIncrementor) | |
87 | { | |
88 | for (int currCol = startCol; endColFunc(currCol); currCol += colIncrementor) | |
89 | { | |
90 | result.Append(takeElementFunc(matrix, currRow, currCol)); | |
91 | } | |
92 | ||
93 | result.AppendLine(); | |
94 | } | |
95 | ||
96 | Console.Write(result); | |
97 | } | |
98 | ||
99 | private static void MakeAllTheStringsFromTheMatrixWithTheSameLenght(List<string> matrix, int maxLenghtStrFromMatrix) | |
100 | { | |
101 | for (int currRow = 0; currRow < matrix.Count; currRow++) | |
102 | { | |
103 | matrix[currRow] = matrix[currRow].PadRight(maxLenghtStrFromMatrix); | |
104 | } | |
105 | } | |
106 | } | |
107 | } |