Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.Threading.Tasks;
- namespace ConsoleApp1
- {
- class Program
- {
- static void Main(string[] args)
- {
- short[] sizes = Console.ReadLine().Split().Select(short.Parse).ToArray();
- short num = short.Parse(Console.ReadLine());
- short r = sizes[0];
- short c = sizes[1];
- int[,] matrix = CreateIncreasingMatrix(r, c);
- /////////////////////////
- for (int i = 0; i < num; i++)
- {
- string[] commands = Console.ReadLine().Split().ToArray();
- int index = int.Parse(commands[0]);
- string move = commands[1];
- int numOfMoves = int.Parse(commands[2]);
- if (move == "down")
- {
- MatrixDown(matrix, index, numOfMoves % matrix.GetLength(0));
- }
- else if (move == "up")
- {
- MatrixUp(matrix, index, numOfMoves % matrix.GetLength(0));
- }
- else if (move == "left")
- {
- MatrixLeft(matrix, index, numOfMoves % matrix.GetLength(1));
- }
- else if (move == "right")
- {
- MatrixRight(matrix, index, numOfMoves % matrix.GetLength(1));
- }
- }
- int counter = 1;
- StringBuilder sb = new StringBuilder();
- for (int row = 0; row < matrix.GetLength(0); row++)
- {
- for (int col = 0; col < matrix.GetLength(1); col++)
- {
- if (matrix[row, col] == counter)
- {
- sb.AppendLine("No swap required");
- //Console.WriteLine("No swap required");
- }
- else
- {
- RearrangeMatrix(matrix, row, col, counter, sb);
- }
- counter++;
- }
- }
- Console.WriteLine(sb.ToString());
- }
- static void FillMatrix(int[,] matrix)
- {
- for (int row = 0; row < matrix.GetLength(0); row++)
- {
- int[] commands = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
- //int[] commands = Console.ReadLine().Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray();
- for (int col = 0; col < matrix.GetLength(1); col++)
- {
- matrix[row, col] = commands[col];
- }
- }
- }
- static int[,] CreateIncreasingMatrix(int r, int c)
- {
- int count = 1;
- int[,] matrix = new int[r, c];
- for (int i = 0; i < matrix.GetLength(0); i++)
- {
- for (int j = 0; j < matrix.GetLength(1); j++)
- {
- matrix[i, j] = count;
- count++;
- }
- }
- return matrix;
- }
- static void MatrixDown(int[,] matrix, int index, int numOfMoves)
- {
- for (int i = 0; i < numOfMoves; i++)
- {
- int lastRow = matrix.GetLength(0) - 1;
- int lastElement = matrix[lastRow, index];
- for (int row = matrix.GetLength(0) - 1; row >= 0; row--)
- {
- if (row == 0)
- {
- matrix[row, index] = lastElement;
- continue;
- }
- matrix[row, index] = matrix[row - 1, index];
- }
- }
- }
- static void MatrixUp(int[,] matrix, int index, int numOfMoves)
- {
- for (int i = 0; i < numOfMoves; i++)
- {
- int firstElemet = matrix[0, index];
- for (int row = 0; row < matrix.GetLength(0); row++)
- {
- if (row == matrix.GetLength(0) - 1)
- {
- matrix[row, index] = firstElemet;
- continue;
- }
- matrix[row, index] = matrix[row + 1, index];
- }
- }
- }
- static void MatrixLeft(int[,] matrix, int index, int numOfMoves)
- {
- for (int i = 0; i < numOfMoves; i++)
- {
- int firstElement = matrix[index, 0];
- for (int col = 0; col < matrix.GetLength(1); col++)
- {
- if (col == matrix.GetLength(1) - 1)
- {
- matrix[index, col] = firstElement;
- continue;
- }
- matrix[index, col] = matrix[index, col + 1];
- }
- }
- }
- static void MatrixRight(int[,] matrix, int index, int numOfMoves)
- {
- for (int i = 0; i < numOfMoves; i++)
- {
- int lastElement = matrix[index, matrix.GetLength(1) - 1];
- for (int col = matrix.GetLength(1) - 1; col >= 0; col--)
- {
- if (col == 0)
- {
- matrix[index, col] = lastElement;
- continue;
- }
- matrix[index, col] = matrix[index, col - 1];
- }
- }
- }
- static void RearrangeMatrix(int[,] matrix, int row, int col, int counter, StringBuilder sb)
- {
- for (int targetRow = 0; targetRow < matrix.GetLength(0); targetRow++)
- {
- bool isSwapped = false;
- for (int targetCol = 0; targetCol < matrix.GetLength(1); targetCol++)
- {
- if (matrix[targetRow, targetCol] == counter)
- {
- int savedNumber = matrix[row, col];
- matrix[row, col] = matrix[targetRow, targetCol];
- matrix[targetRow, targetCol] = savedNumber;
- sb.AppendLine($"Swap ({row}, {col}) with ({targetRow}, {targetCol})");
- //Console.WriteLine($"Swap ({row}, {col}) with ({targetRow}, {targetCol})");
- isSwapped = true;
- break;
- }
- }
- if (isSwapped)
- {
- break;
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement