Advertisement
morgan73

CrossFire

Jun 4th, 2017
376
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.07 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3.  
  4. //=================================================
  5. //Грешка на последен тест за Memory Limit - 90/100
  6. //=================================================
  7.  
  8.  
  9. namespace _09.CrossFire
  10. {
  11.     class Program
  12.     {
  13.         static void Main(string[] args)
  14.         {
  15.             int[] sizes = Console.ReadLine()
  16.                 .Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
  17.                 .Select(int.Parse)
  18.                 .ToArray();
  19.  
  20.             int[][] matrix = FillMatrix(sizes);
  21.  
  22.             string command = Console.ReadLine();
  23.  
  24.             while (command != "Nuke it from orbit")
  25.             {
  26.                 int[] data = command
  27.                     .Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
  28.                     .Select(int.Parse)
  29.                     .ToArray();
  30.                 matrix = MakeAHit(data, matrix);
  31.  
  32.                 command = Console.ReadLine();
  33.             }
  34.  
  35.             PrintResult(matrix);
  36.         }
  37.  
  38.         private static void PrintResult(int[][] matrix)
  39.         {
  40.             foreach (var row in matrix)
  41.             {
  42.                 Console.WriteLine(string.Join(" ", row));
  43.             }
  44.         }
  45.  
  46.         private static int[][] FillMatrix(int[] sizes)
  47.         {
  48.             int[][] matrix = new int[sizes[0]][];
  49.             int counter = 1;
  50.  
  51.             for (int row = 0; row < matrix.Length; row++)
  52.             {
  53.                 matrix[row] = new int[sizes[1]];
  54.                 for (int col = 0; col < matrix[0].Length; col++)
  55.                 {
  56.                     matrix[row][col] = counter;
  57.                     counter++;
  58.                 }
  59.             }
  60.  
  61.             return matrix;
  62.         }
  63.  
  64.         private static int[][] MakeAHit(int[] data, int[][] matrix)
  65.         {
  66.             int hitRow = data[0];
  67.             int hitCol = data[1];
  68.             int radius = data[2];
  69.  
  70.             if (radius < 0)
  71.             {
  72.                 return matrix;
  73.             }
  74.  
  75.             for (int row = hitRow - radius; row <= hitRow + radius; row++)
  76.             {
  77.                 if (IsInRange(matrix, row, hitCol))
  78.                 {
  79.                     matrix[row][hitCol] = 0;
  80.                 }
  81.             }
  82.  
  83.             for (int col = hitCol - radius; col <= hitCol + radius; col++)
  84.             {
  85.                 if (IsInRange(matrix,hitRow,col))
  86.                 {
  87.                     matrix[hitRow][col] = 0;
  88.                 }
  89.             }
  90.  
  91.             for (int row = 0; row < matrix.Length; row++)
  92.             {
  93.                 matrix[row] = matrix[row].Where(x => x > 0).ToArray();
  94.  
  95.                 if (matrix[row].Length == 0)
  96.                 {
  97.                     matrix = matrix.Take(row).Concat(matrix.Skip(row + 1)).ToArray();
  98.                     row--;
  99.                 }
  100.             }
  101.  
  102.             return matrix;
  103.         }
  104.  
  105.         private static bool IsInRange(int[][] matrix, int row, int col)
  106.         {
  107.             return row >= 0 && row < matrix.Length && col >= 0 && col < matrix[row].Length;
  108.         }
  109.     }
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement