Advertisement
EmoRz

5.Rubik’s Matrix

Sep 23rd, 2018
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.51 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3.  
  4. namespace RubikMatrix
  5. {
  6. class Program
  7. {
  8. static void Main(string[] args)
  9. {
  10. //read data and make matrix
  11. var dimensions = Console.ReadLine().Split().Select(int.Parse).ToArray();
  12. var rows = dimensions[0];
  13. var cols = dimensions[1];
  14.  
  15. int[][] matrixRubik = new int[rows][];
  16.  
  17. GetMatrix(matrixRubik, cols);
  18.  
  19. //Print(matrixRubik);
  20. int commands = int.Parse(Console.ReadLine());
  21.  
  22. for (int i = 0; i < commands; i++)
  23. {
  24. string[] input = Console.ReadLine().Split();
  25. var rowCol = int.Parse(input[0]);
  26. var direction = input[1];
  27. var moves = int.Parse(input[2]);
  28. //
  29. if (direction=="down")
  30. {
  31. MovesDown(matrixRubik, rowCol, moves % matrixRubik.Length);
  32. }
  33. else if (direction == "left")
  34. {
  35. MovesLeft(matrixRubik, rowCol, moves % matrixRubik[0].Length);
  36. }
  37. else if (direction == "right")
  38. {
  39. MovesRight(matrixRubik, rowCol, moves % matrixRubik[0].Length);
  40. }
  41. else if (direction == "up")
  42. {
  43. MovesUp(matrixRubik, rowCol, moves % matrixRubik.Length);
  44.  
  45. }
  46.  
  47. }
  48. var counter = 0;
  49. for (int row = 0; row < matrixRubik.Length; row++)
  50. {
  51. for (int col = 0; col < matrixRubik[row].Length; col++)
  52. {
  53. if (matrixRubik[row][col] == counter)
  54. {
  55. Console.WriteLine("No swap required");
  56. counter++;
  57. }
  58. else
  59. {
  60. Rearrange(matrixRubik, row, col, counter);
  61. counter++;
  62. }
  63. }
  64. }
  65. }
  66.  
  67. private static void Rearrange(int[][] matrixRubik, int row, int col, int counter)
  68. {
  69. for (int targertRow = 0; targertRow < matrixRubik.Length; targertRow++)
  70. {
  71. for (int targetCol = 0; targetCol < matrixRubik[targertRow].Length; targetCol++)
  72. {
  73. if (matrixRubik[targertRow][targetCol] == counter)
  74. {
  75. matrixRubik[targertRow][targetCol] = matrixRubik[row][col];
  76. matrixRubik[row][col] = counter;
  77. Console.WriteLine($"Swap ({row}, {col}) with ({targertRow}, {targetCol})");
  78. return;
  79. }
  80. }
  81. }
  82. }
  83.  
  84. private static void MovesUp(int[][] matrixRubik, int col, int moves)
  85. {
  86. for (int move = 0; move < moves; move++)
  87. {
  88. var last = matrixRubik[0][col];
  89. for (int row = 0; row < matrixRubik.Length-1; row++)
  90. {
  91. matrixRubik[row][col] = matrixRubik[row + 1][col];
  92. }
  93. matrixRubik[matrixRubik.Length - 1][col] = last;
  94. }
  95.  
  96. }
  97.  
  98. private static void MovesRight(int[][] matrixRubik, int row, int moves)
  99. {
  100. for (int move = 0; move < moves; move++)
  101. {
  102. var lastElement = matrixRubik[row][matrixRubik[row].Length-1];
  103.  
  104. for (int col = matrixRubik.Length - 1; col > 0; col--)
  105. {
  106. matrixRubik[row][col] = matrixRubik[row][col - 1];
  107. }
  108. matrixRubik[row][0] = lastElement;
  109. }
  110.  
  111. }
  112.  
  113. private static void MovesLeft(int[][] matrixRubik, int row, int moves)
  114. {
  115. for (int move = 0; move < moves; move++)
  116. {
  117. var firstElemet = matrixRubik[row][0];
  118.  
  119. for (int col = 0; col < matrixRubik[row].Length - 1; col++)
  120. {
  121. matrixRubik[row][col] = matrixRubik[row][col + 1];
  122. }
  123. matrixRubik[row][matrixRubik[row].Length - 1] = firstElemet;
  124. }
  125.  
  126. }
  127.  
  128. private static void MovesDown(int[][] matrixRubik, int col, int moves)
  129. {
  130. for (int move = 0; move < moves; move++)
  131. {
  132. var lastElemet = matrixRubik[matrixRubik.Length - 1][col];
  133. for (int row = matrixRubik.Length - 1; row > 0; row--)
  134. {
  135. matrixRubik[row][col] = matrixRubik[row - 1][col];
  136. }
  137. matrixRubik[0][col] = lastElemet;
  138. }
  139.  
  140. }
  141.  
  142. private static void Print(int[][] matrixRubik)
  143. {
  144. for (int row = 0; row < matrixRubik.Length; row++)
  145. {
  146. Console.WriteLine(string.Join(" ", matrixRubik[row]));
  147. }
  148. }
  149.  
  150. private static void GetMatrix(int[][] matrixRubik, int cols)
  151. {
  152. var counter = 1;
  153. for (int row = 0; row < matrixRubik.Length; row++)
  154. {
  155. matrixRubik[row] = new int[cols];
  156. for (int col = 0; col < matrixRubik[row].Length; col++)
  157. {
  158. matrixRubik[row][col] = counter++;
  159. }
  160. }
  161. }
  162. }
  163. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement