Advertisement
Guest User

Untitled

a guest
May 20th, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.27 KB | None | 0 0
  1. namespace _07KnightGame
  2. {
  3.     using System;
  4.  
  5.     public class StartUp
  6.     {
  7.         public static void Main(string[] args)
  8.         {
  9.             var boardSide = int.Parse(Console.ReadLine());
  10.             var board = new char[boardSide, boardSide];
  11.             FillMatrix(board);
  12.             var removedKnights = 0;
  13.             while (true)
  14.             {
  15.                 var isSafe = true;
  16.                 var mostKInRange = 0;
  17.                 var knightPosition = new int[2];
  18.                 for (int r = 0; r < board.GetLength(0); r++)
  19.                 {
  20.                     for (int c = 0; c < board.GetLength(1); c++)
  21.                     {
  22.                         var currentPosition = board[r, c];
  23.                         if (currentPosition == 'K')
  24.                         {
  25.                             var KInRange = KnightsHit(board, r, c);
  26.                             if (KInRange > mostKInRange)
  27.                             {
  28.                                 mostKInRange = KInRange;
  29.                                 knightPosition[0] = r;
  30.                                 knightPosition[1] = c;
  31.                             }
  32.                             if (KInRange > 0)
  33.                             {
  34.                                 isSafe = false;
  35.                             }
  36.                         }
  37.                     }
  38.                 }
  39.                 if (!isSafe)
  40.                 {
  41.                     board[knightPosition[0], knightPosition[1]] = '0';
  42.                     removedKnights++;
  43.                 }
  44.                 else
  45.                 {
  46.                     break;
  47.                 }
  48.             }
  49.             Console.WriteLine(removedKnights);
  50.         }
  51.  
  52.         private static void FillMatrix(char[,] board)
  53.         {
  54.             for (int r = 0; r < board.GetLength(0); r++)
  55.             {
  56.                 var values = Console.ReadLine();
  57.                 for (int c = 0; c < board.GetLength(1); c++)
  58.                 {
  59.                     board[r, c] = values[c];
  60.                 }
  61.             }
  62.         }
  63.  
  64.         private static int KnightsHit(char[,] board, int r, int c)
  65.         {
  66.             var knightMoves = new int[8][]
  67.             {
  68.                 new int[] { -2 + r, -1 + c},
  69.                 new int[] { -1 + r, -2 + c},
  70.                 new int[] { -2 + r, 1 + c},
  71.                 new int[] { -1 + r, 2 + c},
  72.                 new int[] { 1 + r, -2 + c},
  73.                 new int[] { 2 + r, -1 + c},
  74.                 new int[] { 1 + r, 2 + c},
  75.                 new int[] { 2 + r, 1 + c},
  76.             };
  77.             var counter = 0;
  78.             for (int i = 0; i < knightMoves.Length; i++)
  79.             {
  80.                 var row = knightMoves[i][0];
  81.                 var col = knightMoves[i][1];
  82.                 if (IsHit(board, row, col))
  83.                 {
  84.                     counter++;
  85.                 }
  86.             }
  87.             return counter;
  88.         }
  89.  
  90.         private static bool IsHit(char[,] board, int row, int col)
  91.         {
  92.             bool isValidPosition = row >= 0
  93.                                 && row < board.GetLength(0)
  94.                                 && col >= 0
  95.                                 && col < board.GetLength(1);
  96.             return isValidPosition && board[row, col] == 'K';
  97.         }
  98.     }
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement