elena1234

KnightGame

Dec 25th, 2020 (edited)
390
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.89 KB | None | 0 0
  1. using System;
  2.  
  3. namespace KnightGame
  4. {
  5.     class Program
  6.     {
  7.         static void Main(string[] args)
  8.         {
  9.             int rows = int.Parse(Console.ReadLine());
  10.             int cols = rows;
  11.             char[,] board = new char[rows, cols];
  12.  
  13.             for (int row = 0; row < rows; row++) // read the board
  14.             {
  15.                 string currentRow = Console.ReadLine();
  16.                 for (int col = 0; col < cols; col++)
  17.                 {
  18.                     board[row, col] = currentRow[col];
  19.                 }
  20.             }
  21.  
  22.             int numberRemovedKnights = 0;
  23.             while (true) // check the board for knight with maxNumber attack knights
  24.             {
  25.                 int maxNumberAttackKnights = int.MinValue;
  26.                 int rowMax = int.MinValue;
  27.                 int colMax = int.MinValue;
  28.                 for (int row = 0; row < board.GetLength(0); row++)
  29.                 {
  30.                     for (int col = 0; col < board.GetLength(1); col++)
  31.                     {
  32.                         int numberAttackKnights = 0;
  33.                         if (board[row, col] == 'K')
  34.                         {
  35.                             numberAttackKnights = MethodToCheckInFrontOfTheKnight(cols, board, row, col, numberAttackKnights);
  36.                             numberAttackKnights = MethodToCheckBehindTheKnight(rows, cols, board, row, col, numberAttackKnights);
  37.                             numberAttackKnights = MethodToCheckOnLeftTheKnight(rows, board, row, col, numberAttackKnights);
  38.                             numberAttackKnights = MethodToCheckOnRightTheKnight(rows, cols, board, row, col, numberAttackKnights);
  39.                         }
  40.  
  41.                         if (numberAttackKnights > maxNumberAttackKnights)
  42.                         {
  43.                             maxNumberAttackKnights = numberAttackKnights;
  44.                             rowMax = row;
  45.                             colMax = col;
  46.                         }
  47.                     }
  48.                 }
  49.  
  50.                 if (maxNumberAttackKnights > 0)
  51.                 {
  52.                     board[rowMax, colMax] = '0';
  53.                     numberRemovedKnights++;
  54.                 }
  55.  
  56.                 else if (maxNumberAttackKnights == 0)
  57.                 {
  58.                     break;
  59.                 }
  60.             }
  61.  
  62.             Console.WriteLine(numberRemovedKnights);
  63.         }
  64.  
  65.  
  66.         private static int MethodToCheckOnRightTheKnight(int rows, int cols, char[,] board, int row, int col, int numberAttackKnights)
  67.         {
  68.             if (row + 1 < rows && col + 2 < cols)
  69.             {
  70.                 if (board[row + 1, col + 2] == 'K') // on right
  71.                 {
  72.                     numberAttackKnights++;
  73.                 }
  74.             }
  75.  
  76.             if (row - 1 >= 0 && col + 2 < cols)
  77.             {
  78.                 if (board[row - 1, col + 2] == 'K')
  79.                 {
  80.                     numberAttackKnights++;
  81.                 }
  82.             }
  83.  
  84.             return numberAttackKnights;
  85.         }
  86.  
  87.         private static int MethodToCheckOnLeftTheKnight(int rows, char[,] board, int row, int col, int numberAttackKnights)
  88.         {
  89.             if (row + 1 < rows && col - 2 >= 0)
  90.             {
  91.                 if (board[row + 1, col - 2] == 'K') // on left
  92.                 {
  93.                     numberAttackKnights++;
  94.                 }
  95.             }
  96.  
  97.             if (row - 1 >= 0 && col - 2 >= 0)
  98.             {
  99.                 if (board[row - 1, col - 2] == 'K')
  100.                 {
  101.                     numberAttackKnights++;
  102.                 }
  103.             }
  104.  
  105.             return numberAttackKnights;
  106.         }
  107.  
  108.         private static int MethodToCheckBehindTheKnight(int rows, int cols, char[,] board, int row, int col, int numberAttackKnights)
  109.         {
  110.             if (row + 2 < rows && col + 1 < cols)
  111.             {
  112.                 if (board[row + 2, col + 1] == 'K') // behind
  113.                 {
  114.                     numberAttackKnights++;
  115.                 }
  116.             }
  117.  
  118.             if (row + 2 < rows && col - 1 >= 0)
  119.             {
  120.                 if (board[row + 2, col - 1] == 'K')
  121.                 {
  122.                     numberAttackKnights++;
  123.                 }
  124.             }
  125.  
  126.             return numberAttackKnights;
  127.         }
  128.  
  129.         private static int MethodToCheckInFrontOfTheKnight(int cols, char[,] board, int row, int col, int numberAttackKnights)
  130.         {
  131.             if (row - 2 >= 0 && col + 1 < cols)
  132.             {
  133.                 if (board[row - 2, col + 1] == 'K') // in front of
  134.                 {
  135.                     numberAttackKnights++;
  136.                 }
  137.             }
  138.  
  139.             if (row - 2 >= 0 && col - 1 >= 0)
  140.             {
  141.                 if (board[row - 2, col - 1] == 'K')
  142.                 {
  143.                     numberAttackKnights++;
  144.                 }
  145.             }
  146.  
  147.             return numberAttackKnights;
  148.         }
  149.     }
  150. }
Add Comment
Please, Sign In to add comment