Advertisement
_CodeBehind

RubikZaTonkata

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