Advertisement
vvsvvs

Untitled

May 23rd, 2022
743
146 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace Beaver_Work
  7. {
  8.     class Program
  9.     {
  10.         const char BEAVER = 'B';
  11.         const char FISH = 'F';
  12.         const char FREE = '-';
  13.         const char FIRST_WOOD = 'a';
  14.         const char LAST_WOOD = 'z';
  15.  
  16.         static void Main(string[] args)
  17.         {
  18.             int n = int.Parse(Console.ReadLine());
  19.  
  20.             int countWoods = 0;
  21.  
  22.             char[,] pond = new char[n, n];
  23.  
  24.             int maxRowPond = pond.GetLength(0);
  25.             int maxColPond = pond.GetLength(1);
  26.  
  27.             int currentBeaverRow = 0;
  28.             int currentBeaverCol = 0;
  29.  
  30.             for (int r = 0; r < n; r++)
  31.             {
  32.                 char[] temp = Console.ReadLine().Split(' ').Select(char.Parse).ToArray();
  33.  
  34.                 for (int c = 0; c < temp.Length; c++)
  35.                 {
  36.                     if ((temp[c] >= FIRST_WOOD) && (temp[c] <= LAST_WOOD))
  37.                     {
  38.                         countWoods++;
  39.                     }
  40.  
  41.                     if (temp[c] == BEAVER)
  42.                     {
  43.                         currentBeaverRow = r;
  44.                         currentBeaverCol = c;
  45.                     }
  46.                     pond[r, c] = temp[c];
  47.                 }
  48.             }
  49.  
  50.             List<char> collectedWool = new List<char>();
  51.  
  52.             bool isLoopExit = false;
  53.             bool isCollectAllWood = false;
  54.  
  55.             while ((!isCollectAllWood) && (!isLoopExit))
  56.             {
  57.                 string input = Console.ReadLine().ToLower();
  58.  
  59.                 if (input.Equals("end"))
  60.                 {
  61.                     isLoopExit = true;
  62.                 }
  63.                 else
  64.                 {
  65.                     int rowStep = 0;
  66.                     int colStep = 0;
  67.  
  68.                     switch (input)
  69.                     {
  70.                         case "up":
  71.                             rowStep--;
  72.                             break;
  73.                         case "down":
  74.                             rowStep++;
  75.                             break;
  76.                         case "left":
  77.                             colStep--;
  78.                             break;
  79.                         case "right":
  80.                             colStep++;
  81.                             break;
  82.                         default:
  83.                             break;
  84.                     }
  85.  
  86.                     int nextRowPosition = currentBeaverRow + rowStep;
  87.                     int nextColPosition = currentBeaverCol + colStep;
  88.  
  89.                     if (IsValidIndex(maxRowPond, maxColPond, nextRowPosition, nextColPosition))
  90.                     {
  91.                         pond[currentBeaverRow, currentBeaverCol] = FREE;
  92.  
  93.                         currentBeaverRow = nextRowPosition;
  94.                         currentBeaverCol = nextColPosition;
  95.  
  96.                         char charInBeaverPosition = pond[currentBeaverRow, currentBeaverCol];
  97.  
  98.                         if (charInBeaverPosition.Equals(FISH))
  99.                         {
  100.                             pond[currentBeaverRow, currentBeaverCol] = FREE;
  101.  
  102.                             int goUnderWaterRow = currentBeaverRow + rowStep;
  103.                             int goUnderWaterCol = currentBeaverCol + colStep;
  104.  
  105.                             if (IsValidIndex(maxRowPond, maxColPond, goUnderWaterRow, goUnderWaterCol))
  106.                             {
  107.                                 int newRowIndex = currentBeaverRow;
  108.                                 int newColIndex = currentBeaverCol;
  109.  
  110.                                 if (rowStep == -1)
  111.                                 {
  112.                                     newRowIndex = 0;
  113.                                 }
  114.                                 else if (rowStep == 1)
  115.                                 {
  116.                                     newRowIndex = maxRowPond;
  117.                                 }
  118.                                 else if (colStep == -1)
  119.                                 {
  120.                                     newColIndex = 0;
  121.                                 }
  122.                                 else
  123.                                 {
  124.                                     newColIndex = maxColPond;
  125.                                 }
  126.  
  127.                                 currentBeaverRow = newRowIndex;
  128.                                 currentBeaverCol = newColIndex;
  129.                             }
  130.                             else
  131.                             {
  132.                                 if (goUnderWaterRow == currentBeaverRow)
  133.                                 {
  134.                                     currentBeaverRow = goUnderWaterRow;
  135.                                     currentBeaverCol = maxColPond + (-1) * goUnderWaterCol * colStep;
  136.                                 }
  137.                                 else if (goUnderWaterCol == currentBeaverCol)
  138.                                 {
  139.                                     currentBeaverRow = maxRowPond + (-1) * goUnderWaterRow * rowStep;
  140.                                     currentBeaverCol = goUnderWaterCol;
  141.                                 }
  142.                             }
  143.                         }
  144.  
  145.                         if (IsHasWood(charInBeaverPosition))
  146.                         {
  147.                             collectedWool.Add(charInBeaverPosition);
  148.                             countWoods--;
  149.                             pond[currentBeaverRow, currentBeaverCol] = FREE;
  150.  
  151.                             if (countWoods == 0)
  152.                             {
  153.                                 isCollectAllWood = true;
  154.                             }
  155.                         }
  156.                     }
  157.                     else
  158.                     {
  159.                         if (collectedWool.Count > 0)
  160.                         {
  161.                             collectedWool.RemoveAt(collectedWool.Count - 1);
  162.                         }
  163.                     }
  164.  
  165.                     pond[currentBeaverRow, currentBeaverCol] = BEAVER;
  166.                 }
  167.             }
  168.  
  169.             StringBuilder sb = new StringBuilder();
  170.  
  171.             if (isCollectAllWood)
  172.             {
  173.                 sb.AppendLine($"The Beaver successfully collect {collectedWool.Count} wood branches: {string.Join(", ", collectedWool)}.");
  174.             }
  175.             else
  176.             {
  177.                 sb.AppendLine($"The Beaver failed to collect every wood branch. There are {countWoods} branches left.");
  178.  
  179.             }            
  180.  
  181.             for (int row = 0; row < maxRowPond; row++)
  182.             {
  183.                 StringBuilder temp = new StringBuilder();
  184.  
  185.                 int colLessOne = maxColPond - 1;
  186.  
  187.                 for (int col = 0; col < colLessOne + 1; col++)
  188.                 {
  189.                     if (col == colLessOne)
  190.                     {
  191.                         temp.Append(pond[row, col].ToString());
  192.                     }
  193.                     else
  194.                     {
  195.                         temp.Append(pond[row, col].ToString() + " ");
  196.                     }
  197.                 }
  198.  
  199.                 sb.AppendLine(temp.ToString());
  200.             }
  201.  
  202.             Console.WriteLine(sb.ToString().TrimEnd());
  203.         }
  204.  
  205.         private static bool IsValidIndex(int maxRowPond, int maxColPond, int nextRowPosition, int nextColPosition)
  206.         {
  207.             bool result = ((nextRowPosition >= 0) && (nextRowPosition < maxRowPond));
  208.             result = ((result) && (nextColPosition >= 0) && (nextColPosition < maxColPond));
  209.             return result;
  210.         }
  211.  
  212.         private static bool IsHasWood(char ch)
  213.         {
  214.  
  215.             if ((ch >= FIRST_WOOD) && (ch <= LAST_WOOD))
  216.             {
  217.                 return true;
  218.             }
  219.  
  220.             return false;
  221.         }
  222.     }
  223. }
  224.  
Advertisement
RAW Paste Data Copied
Advertisement