View difference between Paste ID: vCmEkNSN and pWrQw5vV
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
}