Advertisement
MiroslavKisov

RubiksMatrix

Jan 29th, 2018
379
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.21 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3.  
  4. namespace RubiksMatrix
  5. {
  6.     public class StartUp
  7.     {
  8.         public static void Main()
  9.         {
  10.             var sizes = Console.ReadLine()
  11.                 .Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries)
  12.                 .Select(int.Parse)
  13.                 .ToArray();
  14.             var numberOfCommands = int.Parse(Console.ReadLine());
  15.             var matrix = new int[sizes[0], sizes[1]];
  16.             var bluePrint = new int[sizes[0], sizes[1]];
  17.             var number = 1;
  18.             for (int i = 0; i < matrix.GetLength(0); i++)
  19.             {
  20.                 for (int j = 0; j < matrix.GetLength(1); j++)
  21.                 {
  22.                     matrix[i, j] = number++;
  23.                 }
  24.             }
  25.             for (int i = 0; i < matrix.GetLength(0); i++)
  26.             {
  27.                 for (int j = 0; j < matrix.GetLength(1); j++)
  28.                 {
  29.                     bluePrint[i, j] = matrix[i, j];
  30.                 }
  31.             }
  32.             for (int i = 0; i < numberOfCommands; i++)
  33.             {
  34.                 var commandArgs = Console.ReadLine()
  35.                     .Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries)
  36.                     .ToArray();
  37.                 var index = int.Parse(commandArgs[0]);
  38.                 var command = commandArgs[1];
  39.                 var distance = int.Parse(commandArgs[2]);
  40.                 if (command == "up" || command == "down")
  41.                 {
  42.                     ShiftColumn(matrix, command, index, distance);
  43.                 }
  44.                 else if (command == "right" || command == "left")
  45.                 {
  46.                     ShiftRow(matrix, command, index, distance);
  47.                 }
  48.             }
  49.             for (int i = 0; i < matrix.GetLength(0); i++)
  50.             {
  51.                 for (int j = 0; j < matrix.GetLength(1); j++)
  52.                 {
  53.                     if (matrix[i, j] != bluePrint[i, j])
  54.                     {
  55.                         EqualizeValue(matrix, bluePrint , ref i,ref j);
  56.                     }
  57.                     else
  58.                     {
  59.                         Console.WriteLine("No swap required");
  60.                     }
  61.                 }
  62.             }
  63.         }
  64.  
  65.         private static void EqualizeValue(int[,] matrix, int[,] bluePrint, ref int coordX, ref int coordY)
  66.         {
  67.             var swap = 0;
  68.             for (int i = 0; i < matrix.GetLength(0); i++)
  69.             {
  70.                 for (int j = 0; j < matrix.GetLength(1); j++)
  71.                 {
  72.                     if (matrix[i,j] == bluePrint[coordX,coordY])
  73.                     {
  74.                         Console.WriteLine($"Swap ({coordX}, {coordY}) with ({i}, {j})");
  75.                         swap = matrix[coordX, coordY];
  76.                         matrix[coordX, coordY] = matrix[i, j];
  77.                         matrix[i, j] = swap;
  78.                         return;
  79.                     }
  80.                 }
  81.             }
  82.         }
  83.  
  84.         private static void ShiftRow(int[,] matrix, string command, int index, int distance)
  85.         {
  86.             var last = 0;
  87.             if (command == "left")
  88.             {
  89.                 for (int i = 0; i < distance % matrix.GetLength(1); i++)
  90.                 {
  91.                     last = matrix[index, 0];
  92.                     for (int j = 0, k = 1; j < matrix.GetLength(1) - 1; j++, k++)
  93.                     {
  94.                         matrix[index, j] = matrix[index, k];
  95.                     }
  96.                     matrix[index, matrix.GetLength(1) - 1] = last;
  97.                 }
  98.             }
  99.             else if (command == "right")
  100.             {
  101.                 for (int i = 0; i < distance % matrix.GetLength(1); i++)
  102.                 {
  103.                     last = matrix[index, matrix.GetLength(1) - 1];
  104.                     for (int j = matrix.GetLength(1) - 1, k = matrix.GetLength(1) - 2; j >= 1; j--, k--)
  105.                     {
  106.                         matrix[index, j] = matrix[index, k];
  107.                     }
  108.                     matrix[index, 0] = last;
  109.                 }
  110.             }
  111.         }
  112.  
  113.         private static void ShiftColumn(int[,] matrix, string command, int index, int distance)
  114.         {
  115.             var last = 0;
  116.             if (command == "down")
  117.             {
  118.                 for (int i = 0; i < distance % matrix.GetLength(0); i++)
  119.                 {
  120.                     last = matrix[matrix.GetLength(0) - 1, index];
  121.                     for (int j = matrix.GetLength(0) - 1, k = matrix.GetLength(0) - 2; j >= 1; j--, k--)
  122.                     {
  123.                         matrix[j, index] = matrix[k, index];
  124.                     }
  125.                     matrix[0, index] = last;
  126.                 }
  127.             }
  128.             else if(command == "up")
  129.             {
  130.                 for (int i = 0; i < distance % matrix.GetLength(0); i++)
  131.                 {
  132.                     last = matrix[0, index];
  133.                     for (int j = 0, k = 1; j < matrix.GetLength(0) - 1; j++, k++)
  134.                     {
  135.                         matrix[j, index] = matrix[k, index];
  136.                     }
  137.                     matrix[matrix.GetLength(0) - 1, index] = last;
  138.                 }
  139.             }
  140.         }
  141.     }
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement