View difference between Paste ID: sN0G3jGQ and gihEAbw7
SHOW: | | - or go back to the newest paste.
1
using System;
2
using System.Linq;
3
4
namespace _5.RubiksMatrix
5
{
6
    class RubiksMatrix
7
    {
8
        static void Main()
9
        {
10
            int[] matrixSize = Console.ReadLine().Split(new[] { ' ', '\t', '\r' }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray();
11
            int commandCount = int.Parse(Console.ReadLine());
12
13
            int[,] matrix = new int[matrixSize[0], matrixSize[1]];
14
            fillMatrix(matrixSize, matrix);
15
            int[,] matrixC = new int[matrixSize[0], matrixSize[1]];
16
            fillMatrix(matrixSize, matrixC);
17
18
            CalculationMatrix(matrixSize, commandCount, matrix);
19
            
20
            for (int i = 0; i < matrixSize[0]; i++)
21
            {
22
                for (int j = 0; j < matrixSize[1]; j++)
23
                {
24
                    if (matrix[i,j] != matrixC[i,j])
25
                    {
26
                        int indexRow = 0;
27
                        int indexCol = 0;
28
                        for (int k = 0; k < matrixSize[0]; k++)
29
                        {
30
                            for (int y = 0; y < matrixSize[1]; y++)
31
                            {
32
                                if (matrix[k,y] == matrixC[i,j])
33
                                {
34
                                    indexRow = k;
35
                                    indexCol = y;
36
                                    int x = matrix[i, j];
37
                                    matrix[i, j] = matrixC[i, j];
38
                                    matrix[k, y] = x;
39
                                    break;
40
                                }
41
                            }
42
                        }
43
                        Console.WriteLine("Swap ({0}, {1}) with ({2}, {3})",i,j, indexRow,indexCol);
44
45
                    }
46
                    else
47
                    {
48
                        Console.WriteLine("No swap required");
49
                    }
50
                }
51
            }
52
        }
53
54
        private static void CalculationMatrix(int[] matrixSize, int commandCount, int[,] matrix)
55
        {
56
            for (int i = 0; i < commandCount; i++)
57
            {
58
                string[] line = Console.ReadLine().Split(new[] { ' ', '\t', '\r' }, StringSplitOptions.RemoveEmptyEntries);
59
                int f = int.Parse(line[0]);
60
                int s = int.Parse(line[2]);
61
                if (line[1].ToLower() == "left")
62
                {
63
                    for (int l = 0; l < s % matrixSize[1]; l++)
64
                    {
65
                        int firstNum = matrix[f, 0];
66
                        for (int k = 0; k < matrixSize[1] - 1; k++)
67
                        {
68
                            matrix[f, k] = matrix[f, k + 1];
69
                        }
70
                        matrix[f, matrixSize[1] - 1] = firstNum;
71
                    }
72
                }
73
                if (line[1].ToLower() == "right")
74
                {
75
                    for (int l = 0; l < s % matrixSize[1]; l++)
76
                    {
77
                        int lastNum = matrix[f, matrixSize[1] - 1];
78
                        for (int k = matrixSize[1] - 1; k > 0; k--)
79
                        {
80
                            matrix[f, k] = matrix[f, k - 1];
81
                        }
82
                        matrix[f, 0] = lastNum;
83
                    }
84
                }
85
                if (line[1].ToLower() == "down")
86
                {
87
                    for (int l = 0; l < s % matrixSize[0]; l++)
88
                    {
89
                        int lastNum = matrix[matrixSize[0] - 1, f];
90
                        for (int k = matrixSize[0] - 1; k > 0; k--)
91
                        {
92
                            matrix[k, f] = matrix[k - 1, f];
93
                        }
94
                        matrix[0, f] = lastNum;
95
                    }
96
                }
97
                if (line[1].ToLower() == "up")
98
                {
99
                    for (int l = 0; l < s % matrixSize[0]; l++)
100
                    {
101
                        int firstNum = matrix[0, f];
102
                        for (int k = 0; k < matrixSize[0] - 1; k++)
103
                        {
104
                            matrix[k, f] = matrix[k + 1, f];
105
                        }
106
                        matrix[matrixSize[0] - 1, f] = firstNum;
107
                    }
108
                }
109
            }
110
        }
111
112
        private static void fillMatrix(int[] matrixSize, int[,] matrix)
113
        {
114
            int curNum = 1;
115
            for (int i = 0; i < matrixSize[0]; i++)
116
            {
117
                for (int j = 0; j < matrixSize[1]; j++)
118
                {
119
                    matrix[i, j] = curNum;
120
                    curNum++;
121
                }
122
            }
123
        }
124
    }
125
}