Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2018
268
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.71 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Text.RegularExpressions;
  7. using System.Threading.Tasks;
  8.  
  9. namespace ConsoleApp1
  10. {
  11.     class Program
  12.     {
  13.         static void Main(string[] args)
  14.         {
  15.             short[] sizes = Console.ReadLine().Split().Select(short.Parse).ToArray();
  16.             short num = short.Parse(Console.ReadLine());
  17.             short r = sizes[0];
  18.             short c = sizes[1];
  19.             int[,] matrix = CreateIncreasingMatrix(r, c);
  20.             /////////////////////////
  21.             for (int i = 0; i < num; i++)
  22.             {
  23.                 string[] commands = Console.ReadLine().Split().ToArray();
  24.                 int index = int.Parse(commands[0]);
  25.                 string move = commands[1];
  26.                 int numOfMoves = int.Parse(commands[2]);
  27.                 if (move == "down")
  28.                 {
  29.                     MatrixDown(matrix, index, numOfMoves % matrix.GetLength(0));
  30.                 }
  31.                 else if (move == "up")
  32.                 {
  33.                     MatrixUp(matrix, index, numOfMoves % matrix.GetLength(0));
  34.                 }
  35.                 else if (move == "left")
  36.                 {
  37.                     MatrixLeft(matrix, index, numOfMoves % matrix.GetLength(1));
  38.                 }
  39.                 else if (move == "right")
  40.                 {
  41.                     MatrixRight(matrix, index, numOfMoves % matrix.GetLength(1));
  42.                 }
  43.             }
  44.  
  45.             int counter = 1;
  46.             StringBuilder sb = new StringBuilder();
  47.             for (int row = 0; row < matrix.GetLength(0); row++)
  48.             {
  49.                 for (int col = 0; col < matrix.GetLength(1); col++)
  50.                 {
  51.                     if (matrix[row, col] == counter)
  52.                     {
  53.                         sb.AppendLine("No swap required");
  54.                         //Console.WriteLine("No swap required");
  55.                     }
  56.                     else
  57.                     {
  58.                         RearrangeMatrix(matrix, row, col, counter, sb);
  59.                     }
  60.                     counter++;
  61.  
  62.                 }
  63.             }
  64.             Console.WriteLine(sb.ToString());
  65.  
  66.         }
  67.  
  68.  
  69.  
  70.  
  71.         static void FillMatrix(int[,] matrix)
  72.         {
  73.             for (int row = 0; row < matrix.GetLength(0); row++)
  74.             {
  75.                 int[] commands = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
  76.                 //int[] commands = Console.ReadLine().Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray();
  77.                 for (int col = 0; col < matrix.GetLength(1); col++)
  78.                 {
  79.                     matrix[row, col] = commands[col];
  80.                 }
  81.             }
  82.         }
  83.  
  84.         static int[,] CreateIncreasingMatrix(int r, int c)
  85.         {
  86.             int count = 1;
  87.             int[,] matrix = new int[r, c];
  88.             for (int i = 0; i < matrix.GetLength(0); i++)
  89.             {
  90.                 for (int j = 0; j < matrix.GetLength(1); j++)
  91.                 {
  92.                     matrix[i, j] = count;
  93.                     count++;
  94.                 }
  95.             }
  96.             return matrix;
  97.  
  98.         }
  99.  
  100.         static void MatrixDown(int[,] matrix, int index, int numOfMoves)
  101.         {
  102.             for (int i = 0; i < numOfMoves; i++)
  103.             {
  104.  
  105.                 int lastRow = matrix.GetLength(0) - 1;
  106.                 int lastElement = matrix[lastRow, index];
  107.                 for (int row = matrix.GetLength(0) - 1; row >= 0; row--)
  108.                 {
  109.                     if (row == 0)
  110.                     {
  111.                         matrix[row, index] = lastElement;
  112.                         continue;
  113.                     }
  114.                     matrix[row, index] = matrix[row - 1, index];
  115.                 }
  116.             }
  117.         }
  118.  
  119.         static void MatrixUp(int[,] matrix, int index, int numOfMoves)
  120.         {
  121.             for (int i = 0; i < numOfMoves; i++)
  122.             {
  123.                 int firstElemet = matrix[0, index];
  124.                 for (int row = 0; row < matrix.GetLength(0); row++)
  125.                 {
  126.  
  127.                     if (row == matrix.GetLength(0) - 1)
  128.                     {
  129.                         matrix[row, index] = firstElemet;
  130.                         continue;
  131.                     }
  132.                     matrix[row, index] = matrix[row + 1, index];
  133.                 }
  134.             }
  135.         }
  136.  
  137.         static void MatrixLeft(int[,] matrix, int index, int numOfMoves)
  138.         {
  139.             for (int i = 0; i < numOfMoves; i++)
  140.             {
  141.                 int firstElement = matrix[index, 0];
  142.                 for (int col = 0; col < matrix.GetLength(1); col++)
  143.                 {
  144.                     if (col == matrix.GetLength(1) - 1)
  145.                     {
  146.                         matrix[index, col] = firstElement;
  147.                         continue;
  148.                     }
  149.                     matrix[index, col] = matrix[index, col + 1];
  150.                 }
  151.             }
  152.         }
  153.  
  154.         static void MatrixRight(int[,] matrix, int index, int numOfMoves)
  155.         {
  156.             for (int i = 0; i < numOfMoves; i++)
  157.             {
  158.                 int lastElement = matrix[index, matrix.GetLength(1) - 1];
  159.                 for (int col = matrix.GetLength(1) - 1; col >= 0; col--)
  160.                 {
  161.                     if (col == 0)
  162.                     {
  163.                         matrix[index, col] = lastElement;
  164.                         continue;
  165.                     }
  166.                     matrix[index, col] = matrix[index, col - 1];
  167.                 }
  168.             }
  169.         }
  170.  
  171.         static void RearrangeMatrix(int[,] matrix, int row, int col, int counter, StringBuilder sb)
  172.         {
  173.             for (int targetRow = 0; targetRow < matrix.GetLength(0); targetRow++)
  174.             {
  175.                 bool isSwapped = false;
  176.                 for (int targetCol = 0; targetCol < matrix.GetLength(1); targetCol++)
  177.                 {
  178.                     if (matrix[targetRow, targetCol] == counter)
  179.                     {
  180.                         int savedNumber = matrix[row, col];
  181.                         matrix[row, col] = matrix[targetRow, targetCol];
  182.                         matrix[targetRow, targetCol] = savedNumber;
  183.                         sb.AppendLine($"Swap ({row}, {col}) with ({targetRow}, {targetCol})");
  184.                         //Console.WriteLine($"Swap ({row}, {col}) with ({targetRow}, {targetCol})");
  185.                         isSwapped = true;
  186.                         break;
  187.                     }
  188.                 }
  189.                 if (isSwapped)
  190.                 {
  191.                     break;
  192.                 }
  193.             }
  194.         }
  195.     }
  196. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement