enevlogiev

MatrixShuffle

May 28th, 2015
304
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Linq;
  3. using System.Text.RegularExpressions;
  4.  
  5. class MatrixShuffle
  6. {
  7.     static void Main()
  8.     {
  9.         var size = int.Parse(Console.ReadLine());
  10.         var text = Console.ReadLine();
  11.         var matrix = new char[size, size];
  12.  
  13.         var limit = text.Length;
  14.         var index = 0;
  15.         var row = 0;
  16.         var col = 0;
  17.         while (index < limit)
  18.         {
  19.             while (col < size && matrix[row, col] == 0)
  20.             {
  21.                 matrix[row, col++] = text[index++];
  22.             }
  23.             col--;
  24.             row++;
  25.             while (row < size && matrix[row, col] == 0)
  26.             {
  27.                 matrix[row++, col] = text[index++];
  28.             }
  29.             row--;
  30.             col--;
  31.             while (col >= 0 && matrix[row, col] == 0)
  32.             {
  33.                 matrix[row, col--] = text[index++];
  34.             }
  35.             row--;
  36.             col++;
  37.             while (row >= 0 && matrix[row, col] == 0)
  38.             {
  39.                 matrix[row--, col] = text[index++];
  40.             }
  41.             row++;
  42.             col++;
  43.         }
  44.    
  45.     //first we get all whites and then we get all blacks
  46.         var sentence = GetSentence(matrix, true) + GetSentence(matrix, false);
  47.         var color = IsPalindrome(sentence) ? "#4FE000" : "#E0000F";
  48.  
  49.         Console.WriteLine("<div style='background-color:{0}'>{1}</div>", color, sentence);
  50.     }
  51.  
  52.     static string GetSentence(char[,] matrix, bool isWhite)
  53.     {
  54.         var output = string.Empty;
  55.         for (var rows = 0; rows < matrix.GetLength(0); rows++)
  56.         {
  57.             for (var cols = 0; cols < matrix.GetLength(1); cols++)
  58.             {
  59.                 if (isWhite && cols % 2 == 0)
  60.                 {
  61.                     output += matrix[rows, cols];
  62.                 }
  63.                 else if (!isWhite && cols % 2 == 1)                    
  64.                 {
  65.                     output += matrix[rows, cols];
  66.                 }
  67.             }
  68.             isWhite = !isWhite;
  69.         }
  70.  
  71.         return output;
  72.     }
  73.  
  74.     static string GetReversedString(string input)
  75.     {
  76.         var letters = input.ToCharArray();
  77.         letters = letters.Reverse().ToArray();
  78.  
  79.         return new string(letters);
  80.     }
  81.  
  82.     static bool IsPalindrome(string input)
  83.     {
  84.         input = Regex.Replace(input, @"[^a-zA-Z]", "");
  85.         var reversed = GetReversedString(input);
  86.         reversed = Regex.Replace(reversed, @"[^a-zA-Z]", "");
  87.  
  88.         return input.ToLower() == reversed.ToLower();
  89.     }
  90. }
RAW Paste Data