SHOW:
|
|
- or go back to the newest paste.
1 | using System; | |
2 | using System.Linq; | |
3 | ||
4 | namespace _05_RubiksMatrix | |
5 | { | |
6 | class Startup | |
7 | { | |
8 | static void Main() | |
9 | { | |
10 | var size = Console.ReadLine().Trim().Split(' ').ToArray(); | |
11 | int rows = int.Parse(size[0]); | |
12 | int cols = int.Parse(size[1]); | |
13 | int[,] matrix = new int[rows, cols]; | |
14 | int n = int.Parse(Console.ReadLine().Trim()); | |
15 | ||
16 | int counter = 0; | |
17 | for (int i = 0; i < rows; i++) | |
18 | { | |
19 | for (int j = 0; j < cols; j++) | |
20 | { | |
21 | counter++; | |
22 | matrix[i, j] = counter; | |
23 | } | |
24 | } | |
25 | ||
26 | for (int command = 0; command < n; command++) | |
27 | { | |
28 | var tokens = Console.ReadLine().Trim().Split(); | |
29 | int rcn = int.Parse(tokens[0]); | |
30 | string direction = tokens[1].Trim(); | |
31 | long moves = int.Parse(tokens[2]); | |
32 | ||
33 | if (direction == "left" || direction == "right") | |
34 | { | |
35 | moves %= cols; | |
36 | if (direction == "right") moves = cols - moves; | |
37 | for (int m = 0; m < moves % cols; m++) | |
38 | { | |
39 | for (int i = 0; i < cols - 1; i++) | |
40 | { | |
41 | int temp = matrix[rcn, i]; | |
42 | matrix[rcn, i] = matrix[rcn, i + 1]; | |
43 | matrix[rcn, i + 1] = temp; | |
44 | } | |
45 | } | |
46 | } | |
47 | else | |
48 | { | |
49 | moves %= rows; | |
50 | if (direction == "down") moves = rows - moves; | |
51 | for (int m = 0; m < moves % rows; m++) | |
52 | { | |
53 | for (int i = 0; i < rows - 1; i++) | |
54 | { | |
55 | int temp = matrix[i, rcn]; | |
56 | matrix[i, rcn] = matrix[i + 1, rcn]; | |
57 | matrix[i + 1, rcn] = temp; | |
58 | } | |
59 | } | |
60 | } | |
61 | } | |
62 | ||
63 | int[] swaps = new int[rows * cols]; | |
64 | counter = 0; | |
65 | for (int i = 0; i < rows; i++) | |
66 | { | |
67 | for (int j = 0; j < cols; j++) | |
68 | { | |
69 | swaps[counter] = matrix[i, j]; | |
70 | counter++; | |
71 | } | |
72 | } | |
73 | ||
74 | for (int i = 0; i < rows * cols; i++) | |
75 | { | |
76 | if (swaps[i] == i + 1) | |
77 | { | |
78 | Console.WriteLine("No swap required"); | |
79 | } | |
80 | else | |
81 | { | |
82 | int index = Array.IndexOf(swaps, i + 1); | |
83 | int r1 = i / cols; | |
84 | int c1 = i % cols; | |
85 | int r2 = index / cols; | |
86 | int c2 = index % cols; | |
87 | ||
88 | int temp = swaps[i]; | |
89 | swaps[i] = swaps[index]; | |
90 | swaps[index] = temp; | |
91 | ||
92 | Console.WriteLine($"Swap ({r1}, {c1}) with ({r2}, {c2})"); | |
93 | } | |
94 | } | |
95 | } | |
96 | } | |
97 | } |