Advertisement
vvsvvs

Untitled

May 17th, 2022
721
133 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 Truffle_Hunter
  7. {
  8.     class Truffle_Hunter
  9.     {            
  10.         public class Point : IComparable<Point>
  11.         {
  12.             public int Row { get; set; }
  13.             public int Col { get; set; }
  14.  
  15.             public Point(int newRow, int newCol)
  16.             {
  17.                 this.Row = newRow;
  18.                 this.Col = newCol;
  19.             }// Point(int newRow, int NewCol)
  20.  
  21.             public int CompareTo(Point other)
  22.             {
  23.                 int comp = this.Row.CompareTo(other.Row);
  24.  
  25.                 if (comp == 0)
  26.                 {
  27.                     comp = this.Col.CompareTo(other.Col);
  28.                 }
  29.  
  30.                 return comp;
  31.             }// int CompareTo(Point other)
  32.         }// class Point : IComparable<Point>
  33.                
  34.         public class Matrix<T> where T : IComparable<T>
  35.         {
  36.             private T[][] matrix;                    
  37.            
  38.             private int maxLengthRow;
  39.            
  40.             private string spaceSeparator;
  41.            
  42.             public Matrix(string newSpaceSeparator, int newRow, int newCol = 0)
  43.             {
  44.                 this.CreateMatrix(null, newSpaceSeparator, newRow, newCol);
  45.             }// Matrix(string newSpaceSeparator, int newRow, int newCol = 0)
  46.            
  47.             public Matrix(T[,] newMatrix, string newSpaceSeparator)
  48.             {
  49.                 int newRow = newMatrix.GetLength(0);
  50.                 int newCol = newMatrix.GetLength(1);
  51.  
  52.                 this.CreateMatrix(newMatrix, newSpaceSeparator, newRow, newCol);
  53.             }// Matrix(T[,] newMatrix, string newSpaceSeparator)            
  54.  
  55.             public bool IsValidIndex(Point point)
  56.             {
  57.                 bool isValid = ((point.Row >= 0) && (point.Row < this.maxLengthRow));
  58.                 isValid = ((isValid) && (point.Col >= 0) && (point.Col < this.matrix[point.Row].Length));
  59.  
  60.                 return isValid;
  61.             }// bool IsValidIndex(Point point)
  62.            
  63.             public void SetMatrixRow(int row, T[] colArr)
  64.             {
  65.                 this.matrix[row] = colArr;
  66.  
  67.                 this.SetLength();
  68.             }// void SetMatrixRow(int row, T[] colArr)
  69.  
  70.             public void SetElementAtPosition(T element, Point point)
  71.             {
  72.                 this.matrix[point.Row][point.Col] = element;
  73.             }// void SetElementAtPosition(T element, Point point)
  74.            
  75.             public T GetElementAtPosition(Point point) => this.matrix[point.Row][point.Col];// T GetElementAtPosition(Point point)
  76.                        
  77.             public void SetSpaceSeparator(string newSpaceSeparator)
  78.             {
  79.                 this.spaceSeparator = newSpaceSeparator;
  80.             }// void SetSpaceSeparator(string newSpaceSeparator)
  81.                        
  82.             public override string ToString()
  83.             {
  84.                 StringBuilder sb = new StringBuilder();
  85.  
  86.                 for (int row = 0; row < this.maxLengthRow; row++)
  87.                 {
  88.                     StringBuilder temp = new StringBuilder();
  89.  
  90.                     int colLessOne = this.matrix[row].Length - 1;
  91.  
  92.                     for (int col = 0; col < colLessOne + 1; col++)
  93.                     {
  94.                         if (col == colLessOne)
  95.                         {
  96.                             temp.Append(this.matrix[row][col].ToString());
  97.                         }
  98.                         else
  99.                         {
  100.                             temp.Append(this.matrix[row][col].ToString() + this.spaceSeparator);
  101.                         }
  102.                     }
  103.  
  104.                     sb.AppendLine(temp.ToString());
  105.                 }
  106.  
  107.                 return sb.ToString().TrimEnd();
  108.             }// override string ToString()    
  109.                        
  110.             private void CreateMatrix(T[,] newMatrix, string newSpaceSeparator, int newRow, int newCol)
  111.             {
  112.                 this.matrix = new T[newRow][];
  113.  
  114.                 if (newMatrix == null)
  115.                 {
  116.                     for (int row = 0; row < newRow; row++)
  117.                     {
  118.                         T[] temp = new T[newCol];
  119.                         this.matrix[row] = temp;
  120.                     }
  121.                 }
  122.                 else
  123.                 {
  124.                     for (int row = 0; row < newRow; row++)
  125.                     {
  126.                         T[] temp = new T[newCol];
  127.                         this.matrix[row] = temp;
  128.  
  129.                         for (int col = 0; col < newCol; col++)
  130.                         {
  131.                             this.matrix[row][col] = newMatrix[row, col];
  132.                         }
  133.                     }
  134.                 }
  135.  
  136.                 this.SetLength();
  137.                 this.SetSpaceSeparator(newSpaceSeparator);
  138.             }// void CreateMatrix(T[,] newMatrix, int newRow, int newCol, string newSpaceSeparator)
  139.                        
  140.             private void SetLength()
  141.             {
  142.                 this.maxLengthRow = this.matrix.Length;
  143.             }// void SetLength()
  144.         }// class Matrix<T>
  145.  
  146.         const char BLACK_TRUFFLE = 'B';
  147.         const char SUMMER_TRUFFLE = 'S';
  148.         const char WHITE_TRUFFLE = 'W';
  149.         const char FREE = '-';
  150.  
  151.         const int BLACK_TRUFFLE_INDEX = 0;
  152.         const int SUMMER_TRUFFLE_INDEX = 1;
  153.         const int WHITE_TRUFFLE_INDEX = 2;
  154.         const int BOAR_INDEX = 3;
  155.  
  156.         const string DIRECTION_UP = "up";
  157.         const string DIRECTION_DOWN = "down";
  158.         const string DIRECTION_LEFT = "left";
  159.         const string DIRECTION_RIGHT = "right";
  160.  
  161.         const bool PLAYER = true;
  162.         const bool BOAR = false;
  163.  
  164.         static void Main(string[] args)
  165.         {
  166.             int n = int.Parse(Console.ReadLine());
  167.  
  168.             Matrix<char> forest = new Matrix<char>(" ", n, n);
  169.  
  170.             for (int i = 0; i < n; i++)
  171.             {
  172.                 char[] temp = Console.ReadLine().Split(" ", StringSplitOptions.RemoveEmptyEntries).Select(char.Parse).ToArray();
  173.  
  174.                 forest.SetMatrixRow(i, temp);
  175.             }
  176.  
  177.             bool isLoopExit = false;
  178.  
  179.             int[] numTruffels = { 0, 0, 0, 0 };
  180.             int boarEaten = 0;
  181.  
  182.             while (!isLoopExit)
  183.             {
  184.                 string inputCommands = Console.ReadLine();
  185.  
  186.                 if (inputCommands.Equals("Stop the hunt"))
  187.                 {
  188.                     isLoopExit = true;
  189.                 }
  190.                 else
  191.                 {
  192.                     string[] commands = inputCommands.Split(' ', StringSplitOptions.RemoveEmptyEntries);
  193.  
  194.                     string command = commands[0];
  195.                     Point point = new Point(int.Parse(commands[1]), int.Parse(commands[2]));
  196.                     char load = forest.GetElementAtPosition(point);
  197.  
  198.                     if (command.ToLower().Equals("collect"))
  199.                     {                        
  200.                         LoadTruffels(numTruffels, load, PLAYER);
  201.                         forest.SetElementAtPosition(FREE, point);
  202.                     }
  203.                     else if (command.ToLower().Equals("wild_boar"))
  204.                     {
  205.                         string direction = commands[3];
  206.                         int rowStep = 0;
  207.                         int colStep = 0;
  208.  
  209.                         LoadTruffels(numTruffels, load, BOAR);
  210.                         forest.SetElementAtPosition(FREE, point);
  211.  
  212.                         switch (direction.ToLower())
  213.                         {
  214.                             case DIRECTION_UP:
  215.                                 rowStep = -2;
  216.                                 break;
  217.                             case DIRECTION_DOWN:
  218.                                 rowStep = 2;
  219.                                 break;
  220.                             case DIRECTION_LEFT:
  221.                                 colStep = -2;
  222.                                 break;
  223.                             case DIRECTION_RIGHT:
  224.                                 colStep = 2;
  225.                                 break;
  226.                             default:
  227.                                 break;
  228.                         }
  229.  
  230.                         point = new Point(point.Row + rowStep, point.Col + colStep);
  231.                         while (forest.IsValidIndex(point))
  232.                         {
  233.                             load = forest.GetElementAtPosition(point);
  234.                             LoadTruffels(numTruffels, load, BOAR);
  235.                             forest.SetElementAtPosition(FREE, point);
  236.                             point = new Point(point.Row + rowStep, point.Col + colStep);
  237.                         }                      
  238.                     }
  239.                 }
  240.             }
  241.  
  242.             StringBuilder sb = new StringBuilder();
  243.  
  244.             sb.AppendLine($"Peter manages to harvest {numTruffels[BLACK_TRUFFLE_INDEX]} black, {numTruffels[SUMMER_TRUFFLE_INDEX]} summer, and {numTruffels[WHITE_TRUFFLE_INDEX]} white truffles.");
  245.             sb.AppendLine($"The wild boar has eaten {numTruffels[BOAR_INDEX]} truffles.");
  246.             sb.AppendLine(forest.ToString());
  247.  
  248.             Console.WriteLine(sb.ToString().TrimEnd());
  249.         }
  250.  
  251.         private static void LoadTruffels(int[] numTruffels, char load, bool player)
  252.         {
  253.             if (player)
  254.             {
  255.                 switch (load)
  256.                 {
  257.                     case BLACK_TRUFFLE:
  258.                         numTruffels[BLACK_TRUFFLE_INDEX]++;
  259.                         break;
  260.                     case SUMMER_TRUFFLE:
  261.                         numTruffels[SUMMER_TRUFFLE_INDEX]++;
  262.                         break;
  263.                     case WHITE_TRUFFLE:
  264.                         numTruffels[WHITE_TRUFFLE_INDEX]++;
  265.                         break;
  266.                     default:
  267.                         break;
  268.                 }
  269.  
  270.                 return;
  271.             }
  272.  
  273.             if (!(load == FREE))
  274.             {
  275.                 numTruffels[BOAR_INDEX]++;
  276.             }          
  277.         }
  278.     }
  279. }
Advertisement
RAW Paste Data Copied
Advertisement