Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Linq;
- namespace RubicMatrix
- {
- public class Program
- {
- public static void Main()
- {
- int[] dimensions = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
- int rows = dimensions[0];
- int columns = dimensions[1];
- int[][] rubiksMatrix = new int[rows][];
- InitializeMatrix(rubiksMatrix, columns);
- int n = int.Parse(Console.ReadLine());
- for (int i = 0; i < n; i++)
- {
- string input = Console.ReadLine();
- string[] tokens = input.Split();
- int rowColIndex = int.Parse(tokens[0]);
- string direction = tokens[1];
- int moves = int.Parse(tokens[2]);
- if (direction == "down")
- {
- MoveDown(rubiksMatrix, rowColIndex, moves % rubiksMatrix.Length);
- }
- else if (direction == "left")
- {
- MoveLeft(rubiksMatrix, rowColIndex, moves % rubiksMatrix[0].Length);
- }
- else if (direction == "right")
- {
- MoveRight(rubiksMatrix, rowColIndex, moves % rubiksMatrix[0].Length);
- }
- else if (direction == "up")
- {
- MoveUp(rubiksMatrix, rowColIndex, moves % rubiksMatrix.Length);
- }
- }
- int count = 1;
- for (int row = 0; row < rubiksMatrix.Length; row++)
- {
- for (int col = 0; col < rubiksMatrix[row].Length ; col++)
- {
- if (rubiksMatrix[row][col] == count)
- {
- Console.WriteLine("No swap required");
- count ++;
- }
- else
- {
- Rearrange(rubiksMatrix, row, col, count);
- count++;
- }
- }
- }
- }
- private static void Rearrange(int[][] rubiksMatrix, int row, int col, int count)
- {
- for (int targetRow = 0; targetRow < rubiksMatrix.Length ; targetRow++)
- {
- for (int targetCol = 0; targetCol < rubiksMatrix[targetRow].Length; targetCol++)
- {
- if (rubiksMatrix[targetRow][targetCol] == count)
- {
- rubiksMatrix[targetRow][targetCol] = rubiksMatrix[row][col];
- rubiksMatrix[row][col] = count;
- Console.WriteLine($"Swap ({row}, {col}) with ({targetRow}, {targetCol})");
- return;
- }
- }
- }
- }
- private static void MoveUp(int[][] rubiksMatrix, int col, int moves)
- {
- for (int i = 0; i < moves; i++)
- {
- int firstElement = rubiksMatrix[0][col];
- for (int row = 0; row < rubiksMatrix.Length - 1; row++)
- {
- rubiksMatrix[row][col] = rubiksMatrix[row + 1][col];
- }
- rubiksMatrix[rubiksMatrix.Length - 1][col] = firstElement;
- }
- }
- private static void MoveRight(int[][] rubiksMatrix, int row, int moves)
- {
- for (int i = 0; i < moves; i++)
- {
- int lastElement = rubiksMatrix[row][rubiksMatrix[row].Length - 1];
- for (int col = rubiksMatrix[row].Length - 1; col > 0; col--)
- {
- rubiksMatrix[row][col] = rubiksMatrix[row][col - 1];
- }
- rubiksMatrix[row][0] = lastElement;
- }
- }
- public static void MoveLeft(int[][] rubiksMatrix, int row, int moves)
- {
- for (int i = 0; i < moves; i++)
- {
- int firstElement = rubiksMatrix[row][0];
- for (int col = 0; col < rubiksMatrix[row].Length - 1; col++)
- {
- rubiksMatrix[row][col] = rubiksMatrix[row][col + 1];
- }
- rubiksMatrix[row][rubiksMatrix[row].Length - 1] = firstElement;
- }
- }
- public static void MoveDown(int[][] rubiksMatrix, int col, int moves)
- {
- for (int i = 0; i < moves; i++)
- {
- int lastElement = rubiksMatrix[rubiksMatrix.Length - 1][col];
- for (int row = rubiksMatrix.Length - 1; row > 0 ; row--)
- {
- rubiksMatrix[row][col] = rubiksMatrix[row - 1][col];
- }
- rubiksMatrix[0][col] = lastElement;
- }
- }
- public static void PrintMatrix(int[][] rubiksMatrix)
- {
- for (int row = 0; row < rubiksMatrix.Length; row++)
- {
- Console.WriteLine(string.Join(" ", rubiksMatrix[row]));
- }
- }
- public static int[][] InitializeMatrix(int[][] rubiksMatrix, int columns)
- {
- int count = 1;
- for (int row = 0; row < rubiksMatrix.Length; row++)
- {
- rubiksMatrix[row] = new int[columns];
- for (int col = 0; col < rubiksMatrix[row].Length; col++)
- {
- rubiksMatrix[row][col] = count;
- count++;
- }
- }
- return rubiksMatrix;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement