Advertisement
simonradev

MagnetoMan2

Jun 21st, 2017
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.19 KB | None | 0 0
  1. namespace MagnetoMan
  2. {
  3.     using System;
  4.     using System.Linq;
  5.     using System.Text;
  6.  
  7.     public class StartUp
  8.     {
  9.         private static int[,] cage;
  10.  
  11.         public static void Main()
  12.         {
  13.             //първо четем размерите на клетката
  14.             int[] dimensionsOfTheCage = SplitStringToIntArray(Console.ReadLine());
  15.  
  16.             //променливи за размерите на клетката
  17.             int rowsOfTheCage = dimensionsOfTheCage[0];
  18.             int colsOfTheCage = dimensionsOfTheCage[1];
  19.  
  20.             //декларираме и инициализираме клетката
  21.             cage = new int[rowsOfTheCage, colsOfTheCage];
  22.  
  23.             //четем началната позиция на мегнето мен
  24.             int[] magnetoManPosition = SplitStringToIntArray(Console.ReadLine());
  25.  
  26.             int magnetoManRow = magnetoManPosition[0];
  27.             int magnetoManCol = magnetoManPosition[1];
  28.  
  29.             //магнитите започват да падат в клетката
  30.             string inputLine;
  31.             while ((inputLine = Console.ReadLine()) != "Test Finished!")
  32.             {
  33.                 //подават се по три параметъра (ред, колона, радиус ПО ДИАГОНАЛ!!!)
  34.                 int[] magnetInfo = SplitStringToIntArray(inputLine);
  35.  
  36.                 int rowOfMagnet = magnetInfo[0];
  37.                 int colOfMagnet = magnetInfo[1];
  38.                 int diagonalRadiusOfMagnet = magnetInfo[2];
  39.  
  40.                 //ако клетката върху която пада магнита нищо не се случва
  41.                 //евентуално може да се добави всеки път когато магнето мен не си сменя мястото
  42.                 //да увечичава стойноста на последната клетка върху която е стоял
  43.                 //като дори и това да е клетката върху която е в момента пак се увеличава
  44.                 if (!CellIsValid(rowOfMagnet, colOfMagnet))
  45.                 {
  46.                     cage[magnetoManRow, magnetoManCol]++;
  47.                     continue;
  48.                 }
  49.  
  50.                 //променливи за да разберем каква е абсолютната стойност на разликата между
  51.                 //магнето мен и магнита
  52.                 int rowDifference = Math.Abs(magnetoManRow - rowOfMagnet);
  53.                 int colDifference = Math.Abs(magnetoManCol - colOfMagnet);
  54.  
  55.                 //проверяваме дали всъщост магнита е по диагонал защото ако не е не се телепортираме
  56.                 //магнита е по диагонал само ако разликите на колоните и редовете са еднакви
  57.                 //проверяваме дали всъщност магнето мен е в радиуса на магнита и ако и двете
  58.                 //условия са изпълнени чак тогава започва телепортацията
  59.                 if (rowDifference == colDifference &&
  60.                     diagonalRadiusOfMagnet >= rowDifference)
  61.                 {
  62.                     //проверяваме дали разстоянието между магнита и магнето мен е четно число
  63.                     //ако е четно число на клетката на която е бил магнето мен досега ще сложим сбора
  64.                     //на реда и колоната на магнето мен в противен случай ще сложим сбора на реда
  65.                     //и колоната на магнита
  66.                     int valueToPlace = rowOfMagnet + colOfMagnet;
  67.                     if (rowDifference % 2 == 0)
  68.                     {
  69.                         valueToPlace = magnetoManRow + magnetoManCol;
  70.                     }
  71.  
  72.                     //ако магнита е паднал директно върху магнето мен той пак си се телепортва
  73.                     //само че понеже не си сменя позицията тя се инкрементира
  74.                     if (magnetoManRow == rowOfMagnet &&
  75.                         magnetoManCol == colOfMagnet)
  76.                     {
  77.                         cage[magnetoManRow, magnetoManCol]++;
  78.                     }
  79.  
  80.                     //слагаме на вече предишната позиция на магнето мен сумата
  81.                     cage[magnetoManRow, magnetoManCol] = valueToPlace;
  82.  
  83.                     //сменяме позицията на магнето мен понеже се е телепортирал
  84.                     magnetoManRow = rowOfMagnet;
  85.                     magnetoManCol = colOfMagnet;
  86.                 }
  87.                 else
  88.                 {
  89.                     cage[magnetoManRow, magnetoManCol]++;
  90.                 }
  91.             }
  92.  
  93.             StringBuilder result = new StringBuilder();
  94.             for (int row = 0; row < cage.GetLength(0); row++)
  95.             {
  96.                 for (int col = 0; col < cage.GetLength(1); col++)
  97.                 {
  98.                     result.Append(cage[row, col]);
  99.  
  100.                     if (col + 1 != cage.GetLength(1))
  101.                     {
  102.                         result.Append(" ");
  103.                     }
  104.                 }
  105.  
  106.                 result.AppendLine();
  107.             }
  108.  
  109.             Console.Write(result);
  110.         }
  111.  
  112.         private static bool CellIsValid(int rowOfMagnet, int colOfMagnet)
  113.         {
  114.             return rowOfMagnet >= 0 && rowOfMagnet < cage.GetLength(0) &&
  115.                    colOfMagnet >= 0 && colOfMagnet < cage.GetLength(1);
  116.         }
  117.  
  118.         private static int[] SplitStringToIntArray(string toSplit)
  119.         {
  120.             return toSplit.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray();
  121.         }
  122.     }
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement