krasizorbov

Radioactive Bunnies

May 23rd, 2019
716
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.76 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3.  
  4. namespace RadioactiveMutantVampireBunnies
  5. {
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             int[] sizes = Console.ReadLine().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray();
  11.  
  12.             char[,] matrix = new char[sizes[0], sizes[1]];
  13.             int currentRow = 0;
  14.             int currentCol = 0;
  15.  
  16.             for (int i = 0; i < matrix.GetLength(0); i++)
  17.             {
  18.                 string row = Console.ReadLine();
  19.  
  20.                 for (int j = 0; j < matrix.GetLength(1); j++)
  21.                 {
  22.                     matrix[i, j] = row[j];
  23.  
  24.                     if (row[j] == 'P')
  25.                     {
  26.                         currentRow = i;
  27.                         currentCol = j;
  28.                     }
  29.                 }
  30.             }
  31.  
  32.             string moves = Console.ReadLine().ToLower();
  33.  
  34.             foreach (char direction in moves)
  35.             {
  36.                 switch (direction)
  37.                 {
  38.                     case 'u':
  39.                         MoveUp(matrix, currentRow, currentCol);
  40.                         currentRow--;
  41.                         if (Populate(ref matrix, currentRow, currentCol))
  42.                         {
  43.                             Die(matrix, currentRow, currentCol);
  44.                         }
  45.                         break;
  46.                     case 'd':
  47.                         MoveDown(matrix, currentRow, currentCol);
  48.                         currentRow++;
  49.                         if (Populate(ref matrix, currentRow, currentCol))
  50.                         {
  51.                             Die(matrix, currentRow, currentCol);
  52.                         }
  53.                         break;
  54.                     case 'l':
  55.                         MoveLeft(matrix, currentRow, currentCol);
  56.                         currentCol--;
  57.                         if (Populate(ref matrix, currentRow, currentCol))
  58.                         {
  59.                             Die(matrix, currentRow, currentCol);
  60.                         }
  61.                         break;
  62.                     case 'r':
  63.                         MoveRight(matrix, currentRow, currentCol);
  64.                         currentCol++;
  65.                         if (Populate(ref matrix, currentRow, currentCol))
  66.                         {
  67.                             Die(matrix, currentRow, currentCol);
  68.                         }
  69.                         break;
  70.                 }
  71.             }
  72.         }
  73.  
  74.         private static void MoveRight(char[,] matrix, int currentRow, int currentCol)
  75.         {
  76.             matrix[currentRow, currentCol] = '.';
  77.  
  78.             if (currentCol == matrix.GetLength(1) - 1)
  79.             {
  80.                 Populate(ref matrix, currentRow, currentCol);
  81.                 Win(matrix, currentRow, currentCol);
  82.             }
  83.             else
  84.             {
  85.                 if (matrix[currentRow, currentCol + 1] == 'B')
  86.                 {
  87.                     Populate(ref matrix, currentRow, currentCol);
  88.                     Die(matrix, currentRow, currentCol + 1);
  89.                 }
  90.                 else
  91.                 {
  92.                     matrix[currentRow, currentCol + 1] = 'P';
  93.                 }
  94.             }
  95.         }
  96.  
  97.         private static void MoveLeft(char[,] matrix, int currentRow, int currentCol)
  98.         {
  99.             matrix[currentRow, currentCol] = '.';
  100.  
  101.             if (currentCol == 0)
  102.             {
  103.                 Populate(ref matrix, currentRow, currentCol);
  104.  
  105.                 Win(matrix, currentRow, currentCol);
  106.             }
  107.             else
  108.             {
  109.                 if (matrix[currentRow, currentCol - 1] == 'B')
  110.                 {
  111.                     Populate(ref matrix, currentRow, currentCol);
  112.  
  113.                     Die(matrix, currentRow, currentCol - 1);
  114.                 }
  115.                 else
  116.                 {
  117.                     matrix[currentRow, currentCol - 1] = 'P';
  118.                 }
  119.             }
  120.         }
  121.  
  122.         private static void MoveDown(char[,] matrix, int currentRow, int currentCol)
  123.         {
  124.             matrix[currentRow, currentCol] = '.';
  125.  
  126.             if (currentRow == matrix.GetLength(0) - 1)
  127.             {
  128.                 Populate(ref matrix, currentRow, currentCol);
  129.  
  130.                 Win(matrix, currentRow, currentCol);
  131.             }
  132.             else
  133.             {
  134.                 if (matrix[currentRow + 1, currentCol] == 'B')
  135.                 {
  136.                     Populate(ref matrix, currentRow, currentCol);
  137.  
  138.                     Die(matrix, currentRow + 1, currentCol);
  139.                 }
  140.                 else
  141.                 {
  142.                     matrix[currentRow + 1, currentCol] = 'P';
  143.                 }
  144.             }
  145.         }
  146.  
  147.         private static void MoveUp(char[,] matrix, int currentRow, int currentCol)
  148.         {
  149.             matrix[currentRow, currentCol] = '.';
  150.  
  151.             if (currentRow == 0)
  152.             {
  153.                 Populate(ref matrix, currentRow, currentCol);
  154.  
  155.                 Win(matrix, currentRow, currentCol);
  156.             }
  157.             else
  158.             {
  159.                 if (matrix[currentRow - 1, currentCol] == 'B')
  160.                 {
  161.                     Populate(ref matrix, currentRow, currentCol);
  162.  
  163.                     Die(matrix, currentRow - 1, currentCol);
  164.                 }
  165.                 else
  166.                 {
  167.                     matrix[currentRow - 1, currentCol] = 'P';
  168.                 }
  169.             }
  170.         }
  171.  
  172.         private static bool Populate(ref char[,] matrix, int currentRow, int currentCol)
  173.         {
  174.             char[,] result = new char[matrix.GetLength(0), matrix.GetLength(1)];
  175.             Array.Copy(matrix, result, matrix.Length);
  176.  
  177.             for (int i = 0; i < matrix.GetLength(0); i++)
  178.             {
  179.                 for (int j = 0; j < matrix.GetLength(1); j++)
  180.                 {
  181.                     if (i > 0 && matrix[i, j] == 'B')
  182.                     {
  183.                         result[i - 1, j] = 'B';
  184.                     }
  185.  
  186.                     if (i < matrix.GetLength(0) - 1 && matrix[i, j] == 'B')
  187.                     {
  188.                         result[i + 1, j] = 'B';
  189.                     }
  190.  
  191.                     if (j > 0 && matrix[i, j] == 'B')
  192.                     {
  193.                         result[i, j - 1] = 'B';
  194.                     }
  195.  
  196.                     if (j < matrix.GetLength(1) - 1 && matrix[i, j] == 'B')
  197.                     {
  198.                         result[i, j + 1] = 'B';
  199.                     }
  200.                 }
  201.             }
  202.  
  203.             bool isDead = true;
  204.  
  205.             for (int i = 0; i < result.GetLength(0); i++)
  206.             {
  207.                 for (int j = 0; j < result.GetLength(1); j++)
  208.                 {
  209.                     if (result[i, j] == 'P')
  210.                     {
  211.                         isDead = false;
  212.                     }
  213.                 }
  214.             }
  215.  
  216.             matrix = result;
  217.  
  218.             return isDead;
  219.         }
  220.  
  221.         private static void Die(char[,] matrix, int currentRow, int currentCol)
  222.         {
  223.             Print(matrix);
  224.             Console.WriteLine($"dead: {currentRow} {currentCol}");
  225.             Environment.Exit(0);
  226.         }
  227.  
  228.         private static void Win(char[,] matrix, int currentRow, int currentCol)
  229.         {
  230.             Print(matrix);
  231.             Console.WriteLine($"won: {currentRow} {currentCol}");
  232.             Environment.Exit(0);
  233.         }
  234.  
  235.         private static void Print(char[,] matrix)
  236.         {
  237.             for (int i = 0; i < matrix.GetLength(0); i++)
  238.             {
  239.                 for (int j = 0; j < matrix.GetLength(1); j++)
  240.                 {
  241.                     Console.Write(matrix[i, j]);
  242.                 }
  243.  
  244.                 Console.WriteLine();
  245.             }
  246.         }
  247.     }
  248. }
Advertisement
Add Comment
Please, Sign In to add comment