Advertisement
Guest User

Untitled

a guest
Nov 9th, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.59 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3. namespace RubicMatrix
  4. {
  5.  
  6.     public class Program
  7.     {
  8.         public static void Main()
  9.         {
  10.             int[] dimensions = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
  11.  
  12.             int rows = dimensions[0];
  13.             int columns = dimensions[1];
  14.  
  15.             int[][] rubiksMatrix = new int[rows][];
  16.  
  17.             InitializeMatrix(rubiksMatrix, columns);
  18.  
  19.             int n = int.Parse(Console.ReadLine());
  20.  
  21.             for (int i = 0; i < n; i++)
  22.             {
  23.                 string input = Console.ReadLine();
  24.                 string[] tokens = input.Split();
  25.  
  26.                 int rowColIndex = int.Parse(tokens[0]);
  27.                 string direction = tokens[1];
  28.                 int moves = int.Parse(tokens[2]);
  29.  
  30.                 if (direction == "down")
  31.                 {
  32.                     MoveDown(rubiksMatrix, rowColIndex, moves % rubiksMatrix.Length);
  33.                 }
  34.                 else if (direction == "left")
  35.                 {
  36.                     MoveLeft(rubiksMatrix, rowColIndex, moves % rubiksMatrix[0].Length);
  37.                 }
  38.                 else if (direction == "right")
  39.                 {
  40.                     MoveRight(rubiksMatrix, rowColIndex, moves % rubiksMatrix[0].Length);
  41.  
  42.                 }
  43.                 else if (direction == "up")
  44.                 {
  45.                     MoveUp(rubiksMatrix, rowColIndex, moves % rubiksMatrix.Length);
  46.                 }
  47.             }
  48.  
  49.             int count = 1;
  50.  
  51.             for (int row = 0; row < rubiksMatrix.Length; row++)
  52.             {
  53.                 for (int col = 0; col < rubiksMatrix[row].Length ; col++)
  54.                 {
  55.                     if (rubiksMatrix[row][col] == count)
  56.                     {
  57.                         Console.WriteLine("No swap required");
  58.                         count ++;
  59.                     }
  60.                     else
  61.                     {
  62.                         Rearrange(rubiksMatrix, row, col, count);
  63.                         count++;
  64.                     }
  65.                 }
  66.             }
  67.  
  68.  
  69.      
  70.        
  71.         }
  72.  
  73.         private static void Rearrange(int[][] rubiksMatrix, int row, int col, int count)
  74.         {
  75.             for (int targetRow = 0; targetRow < rubiksMatrix.Length ; targetRow++)
  76.             {
  77.                 for (int targetCol = 0; targetCol < rubiksMatrix[targetRow].Length; targetCol++)
  78.                 {
  79.                     if (rubiksMatrix[targetRow][targetCol] == count)
  80.                     {
  81.                         rubiksMatrix[targetRow][targetCol] = rubiksMatrix[row][col];
  82.                         rubiksMatrix[row][col] = count;
  83.  
  84.                         Console.WriteLine($"Swap ({row}, {col}) with ({targetRow}, {targetCol})");
  85.                         return;
  86.  
  87.                     }
  88.                 }
  89.             }
  90.         }
  91.  
  92.         private static void MoveUp(int[][] rubiksMatrix, int col, int moves)
  93.         {
  94.             for (int i = 0; i < moves; i++)
  95.             {
  96.                 int firstElement = rubiksMatrix[0][col];
  97.  
  98.                 for (int row = 0; row < rubiksMatrix.Length - 1; row++)
  99.                 {
  100.                     rubiksMatrix[row][col] = rubiksMatrix[row + 1][col];
  101.                 }
  102.  
  103.                 rubiksMatrix[rubiksMatrix.Length - 1][col] = firstElement;
  104.             }
  105.         }
  106.  
  107.         private static void MoveRight(int[][] rubiksMatrix, int row, int moves)
  108.         {
  109.             for (int i = 0; i < moves; i++)
  110.             {
  111.                 int lastElement = rubiksMatrix[row][rubiksMatrix[row].Length - 1];
  112.  
  113.                 for (int col = rubiksMatrix[row].Length - 1; col > 0; col--)
  114.                 {
  115.                     rubiksMatrix[row][col] = rubiksMatrix[row][col - 1];
  116.                 }
  117.  
  118.                 rubiksMatrix[row][0] = lastElement;
  119.             }
  120.         }
  121.  
  122.         public static void MoveLeft(int[][] rubiksMatrix, int row, int moves)
  123.         {
  124.             for (int i = 0; i < moves; i++)
  125.             {
  126.                 int firstElement = rubiksMatrix[row][0];
  127.  
  128.                 for (int col = 0; col < rubiksMatrix[row].Length - 1; col++)
  129.                 {
  130.                     rubiksMatrix[row][col] = rubiksMatrix[row][col + 1];
  131.                 }
  132.  
  133.                 rubiksMatrix[row][rubiksMatrix[row].Length - 1] = firstElement;
  134.             }
  135.         }
  136.  
  137.         public static void MoveDown(int[][] rubiksMatrix, int col, int moves)
  138.         {
  139.             for (int i = 0; i < moves; i++)
  140.             {
  141.                 int lastElement = rubiksMatrix[rubiksMatrix.Length - 1][col];
  142.  
  143.                 for (int row = rubiksMatrix.Length - 1; row > 0 ; row--)
  144.                 {
  145.                     rubiksMatrix[row][col] = rubiksMatrix[row - 1][col];
  146.                 }
  147.  
  148.                 rubiksMatrix[0][col] = lastElement;
  149.             }
  150.  
  151.  
  152.         }
  153.  
  154.         public static void PrintMatrix(int[][] rubiksMatrix)
  155.         {
  156.             for (int row = 0; row < rubiksMatrix.Length; row++)
  157.             {
  158.                 Console.WriteLine(string.Join(" ", rubiksMatrix[row]));
  159.             }
  160.         }
  161.  
  162.         public static int[][] InitializeMatrix(int[][] rubiksMatrix, int columns)
  163.         {
  164.             int count = 1;
  165.  
  166.             for (int row = 0; row < rubiksMatrix.Length; row++)
  167.             {
  168.                 rubiksMatrix[row] = new int[columns];
  169.  
  170.                 for (int col = 0; col < rubiksMatrix[row].Length; col++)
  171.                 {
  172.                     rubiksMatrix[row][col] = count;
  173.                     count++;
  174.                 }
  175.             }
  176.  
  177.             return rubiksMatrix;
  178.         }
  179.     }
  180. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement