krasizorbov

Crossfire

Jun 14th, 2019
8,610
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.31 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3.  
  4. namespace Crossfire
  5. {
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             int[] sizes = Console.ReadLine()
  11.                 .Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
  12.                 .Select(int.Parse)
  13.                 .ToArray();
  14.  
  15.             int[][] jagged = new int[sizes[0]][];
  16.  
  17.             for (int i = 0; i < jagged.Length; i++)
  18.             {
  19.                 jagged[i] = new int[sizes[1]];
  20.  
  21.                 for (int j = 0; j < jagged[i].Length; j++)
  22.                 {
  23.                     jagged[i][j] = i * jagged[i].Length + j + 1;
  24.                 }
  25.             }
  26.  
  27.             string command;
  28.             while ((command = Console.ReadLine()) != "Nuke it from orbit")
  29.             {
  30.                 int[] parameters = command
  31.                     .Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
  32.                     .Select(int.Parse)
  33.                     .ToArray();
  34.  
  35.                 int targetRow = parameters[0];
  36.                 int targetCol = parameters[1];
  37.                 int radius = parameters[2];
  38.  
  39.                 // Place 0 to the target
  40.                 for (int i = Math.Max(0, targetRow - radius); i <= Math.Min(targetRow + radius, jagged.Length - 1); i++)
  41.                 {
  42.  
  43.                     if (jagged[i].Length > targetCol && targetCol >= 0)
  44.                     {
  45.                         jagged[i][targetCol] = 0;
  46.                     }
  47.  
  48.                     if (i == targetRow)
  49.                     {
  50.                         for (int j = Math.Max(0, targetCol - radius); j <= Math.Min(targetCol + radius, jagged[i].Length - 1); j++)
  51.                         {
  52.                             jagged[i][j] = 0;
  53.                         }
  54.                     }
  55.                 }
  56.                 // Swap 0 with number standig to the right
  57.                 for (int i = 0; i < jagged.Length; i++)
  58.                 {
  59.                     for (int j = 0; j < jagged[i].Length - 1; j++)
  60.                     {
  61.                         if (jagged[i][j] == 0)
  62.                         {
  63.                             if (j + 1 < jagged[i].Length)
  64.                             {
  65.                                 int temp = jagged[i][j + 1];
  66.                                 jagged[i][j] = temp;
  67.                                 jagged[i][j + 1] = 0;
  68.                             }
  69.                         }
  70.                     }
  71.                 }
  72.                 // Remove Rows with 0's
  73.                 int check = -1;
  74.                 int indexToRemove = -1;
  75.                 for (int i = 0; i < jagged.Length; i++)
  76.                 {
  77.                     for (int j = 0; j < jagged[i].Length; j++)
  78.                     {
  79.                         if (jagged[i][j] == 0)
  80.                         {
  81.                             check = -1;
  82.                         }
  83.                         else
  84.                         {
  85.                             check = -2;
  86.                             break;
  87.                         }
  88.                     }
  89.                     if (check == -1)
  90.                     {
  91.                         indexToRemove = i;
  92.                         break;
  93.                     }
  94.                 }
  95.                 // Remove the row filled with 0's and create a new array
  96.                 if (check == -1 && indexToRemove >= 0)
  97.                 {
  98.                     int[][] arrayResult = jagged
  99.                         .Where((arr, i) => i != indexToRemove) //skip row - indexToRemove
  100.                         .Select(arr => arr).ToArray();
  101.                         jagged = arrayResult;
  102.                 }
  103.  
  104.                 // Use GC if problem with memory limit test
  105.                 GC.Collect();
  106.             }
  107.             Print(jagged);
  108.         }
  109.         private static void Print(int[][] jagged)
  110.         {
  111.             for (int i = 0; i < jagged.Length; i++)
  112.             {
  113.                 for (int j = 0; j < jagged[i].Length; j++)
  114.                 {
  115.                     if (jagged[i][j] == 0)
  116.                     {
  117.                         continue;
  118.                     }
  119.                     else
  120.                     {
  121.                         Console.Write(jagged[i][j] + " ");
  122.                     }
  123.                 }
  124.                 Console.WriteLine();
  125.             }
  126.         }
  127.     }
  128. }
Advertisement
Add Comment
Please, Sign In to add comment