kalinkata

Sneaking

Feb 13th, 2018
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.52 KB | None | 0 0
  1. using System;
  2.  
  3.  
  4. class Sneaking
  5. {
  6.     static void Main()
  7.     {
  8.         int rows = int.Parse(Console.ReadLine());
  9.  
  10.         char[][] matrix = FillTheMatrix(rows);
  11.  
  12.         string turns = Console.ReadLine();
  13.  
  14.         int[] samDimensions = FindSamOrNikoladze(matrix, 'S');
  15.         int[] nikoladzeDimensions = FindSamOrNikoladze(matrix, 'N');
  16.  
  17.         bool isSamDead = false;
  18.  
  19.         for (int i = 0; i < turns.Length; i++)
  20.         {
  21.             isSamDead = EnemiesMove(matrix, samDimensions);
  22.  
  23.             if (isSamDead) { break; }
  24.  
  25.             if (turns[i] != 'W')
  26.             {
  27.                 samDimensions = SamMove(matrix, samDimensions, turns[i], nikoladzeDimensions);
  28.             }
  29.  
  30.             if (matrix[nikoladzeDimensions[0]][nikoladzeDimensions[1]] == 'X')
  31.             {
  32.                 Console.WriteLine("Nikoladze killed!");
  33.                 break;
  34.             }
  35.  
  36.             //Console.WriteLine();
  37.             //PrintTheMatrix(matrix);
  38.         }
  39.  
  40.         if (matrix[samDimensions[0]][samDimensions[1]] == 'X')
  41.         {
  42.             Console.WriteLine($"Sam died at {samDimensions[0]}, {samDimensions[1]}");
  43.         }
  44.  
  45.         //Console.WriteLine();
  46.         PrintTheMatrix(matrix);
  47.     }
  48.  
  49.     private static int[] SamMove(char[][] matrix, int[] samDimensions, char turn, int[] nikoladzeDimensions)
  50.     {
  51.         int samRow = samDimensions[0];
  52.         int samCol = samDimensions[1];
  53.  
  54.         int nikoladzeRow = nikoladzeDimensions[0];
  55.         int nikoladzeCol = nikoladzeDimensions[1];
  56.  
  57.         switch (turn)
  58.         {
  59.             case 'U':
  60.                 if (samRow > 0)
  61.                 {
  62.                     matrix[samRow - 1][samCol] = 'S';
  63.                     matrix[samRow][samCol] = '.';
  64.                     samDimensions[0] = samRow - 1;
  65.                 }        
  66.                 break;
  67.             case 'D':
  68.                 if (samRow < matrix.Length - 1)
  69.                 {
  70.                     matrix[samRow + 1][samCol] = 'S';
  71.                     matrix[samRow][samCol] = '.';
  72.                     samDimensions[0] = samRow + 1;
  73.                 }
  74.                 break;
  75.             case 'R':
  76.                 if (samCol < matrix[0].Length - 1)
  77.                 {
  78.                     matrix[samRow][samCol + 1] = 'S';
  79.                     matrix[samRow][samCol] = '.';
  80.                     samDimensions[1] = samCol + 1;
  81.                 }
  82.                 break;
  83.             case 'L':
  84.                 if (samCol > 0)
  85.                 {
  86.                     matrix[samRow][samCol - 1] = 'S';
  87.                     matrix[samRow][samCol] = '.';
  88.                     samDimensions[1] = samCol - 1;
  89.                 }
  90.                 break;
  91.             default:
  92.                 break;
  93.         }
  94.  
  95.         samRow = samDimensions[0];
  96.  
  97.         if (samRow == nikoladzeRow)
  98.         {
  99.             matrix[nikoladzeRow][nikoladzeCol] = 'X';
  100.             return samDimensions;
  101.         }
  102.  
  103.         return samDimensions;
  104.     }
  105.  
  106.     private static int[] FindSamOrNikoladze(char[][] matrix, char ch)
  107.     {
  108.         int[] rowAndCol = new int[2];
  109.  
  110.         for (int row = 0; row < matrix.Length; row++)
  111.         {
  112.             for (int col = 0; col < matrix[row].Length; col++)
  113.             {
  114.                 if (matrix[row][col] == ch)
  115.                 {
  116.                     rowAndCol[0] = row;
  117.                     rowAndCol[1] = col;
  118.                 }
  119.             }
  120.         }
  121.  
  122.         return rowAndCol;
  123.     }
  124.  
  125.    
  126.  
  127.     private static bool EnemiesMove(char[][] matrix, int[] samDimensions)
  128.     {
  129.         bool samIsDead = false;
  130.         char enemy = ' ';
  131.  
  132.         int enemyRow = 0;
  133.         int enemyCol = 0;
  134.  
  135.         for (int row = 0; row < matrix.Length; row++)
  136.         {
  137.             for (int col = 0; col < matrix[row].Length; col++)
  138.             {
  139.                 if (matrix[row][col] == 'b')
  140.                 {
  141.                     if (col == matrix[row].Length - 1)
  142.                     {
  143.                         matrix[row][col] = 'd';
  144.                         enemyRow = row;
  145.                         enemyCol = col;
  146.                         enemy = 'd';
  147.                     }
  148.                     else
  149.                     {
  150.                         matrix[row][col + 1] = 'b';
  151.                         matrix[row][col] = '.';
  152.                         enemyRow = row;
  153.                         enemyCol = col + 1;
  154.                         enemy = 'b';
  155.                     }
  156.                     break;
  157.                 }
  158.                 else if (matrix[row][col] == 'd')
  159.                 {
  160.                     if (col == 0)
  161.                     {
  162.                         matrix[row][col] = 'b';
  163.                         enemyRow = row;
  164.                         enemyCol = col;
  165.                         enemy = 'b';
  166.                     }
  167.                     else
  168.                     {
  169.                         matrix[row][col - 1] = 'd';
  170.                         matrix[row][col] = '.';
  171.                         enemyRow = row;
  172.                         enemyCol = col - 1;
  173.                         enemy = 'd';
  174.                     }
  175.                     break;
  176.                 }          
  177.             }
  178.         }
  179.  
  180.         samIsDead = KillSam(matrix, enemyRow, enemyCol, enemy);
  181.  
  182.         return samIsDead;
  183.     }
  184.  
  185.     private static bool KillSam(char[][] matrix, int row, int col, char ch)
  186.     {
  187.         bool isHeDead = false;
  188.  
  189.         if (ch == 'b')
  190.         {
  191.             for (int i = col + 1; i < matrix[row].Length; i++)
  192.             {
  193.                 if (matrix[row][i] == 'S')
  194.                 {
  195.                     matrix[row][i] = 'X';
  196.                     isHeDead = true;
  197.                     break;
  198.                 }
  199.             }
  200.         }
  201.         else if (ch == 'd')
  202.         {
  203.             for (int i = col - 1; i >= 0; i--)
  204.             {
  205.                 if (matrix[row][i] == 'S')
  206.                 {
  207.                     matrix[row][i] = 'X';
  208.                     isHeDead = true;
  209.                     break;
  210.                 }
  211.             }
  212.         }
  213.  
  214.         return isHeDead;
  215.     }
  216.  
  217.     private static void PrintTheMatrix(char[][] matrix)
  218.     {
  219.         for (int row = 0; row < matrix.Length; row++)
  220.         {          
  221.             Console.WriteLine(matrix[row]);
  222.         }
  223.     }
  224.  
  225.     private static char[][] FillTheMatrix(int rows)
  226.     {
  227.         char[][] matrix = new char[rows][];
  228.  
  229.         for (int row = 0; row < rows; row++)
  230.         {
  231.             string nextRow = Console.ReadLine();
  232.  
  233.             matrix[row] = nextRow.ToCharArray();
  234.         }
  235.  
  236.         return matrix;
  237.     }
  238. }
Advertisement
Add Comment
Please, Sign In to add comment