Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- namespace MagnetoMan
- {
- using System;
- using System.Linq;
- using System.Text;
- public class StartUp
- {
- private static int[,] cage;
- public static void Main()
- {
- //първо четем размерите на клетката
- int[] dimensionsOfTheCage = SplitStringToIntArray(Console.ReadLine());
- //променливи за размерите на клетката
- int rowsOfTheCage = dimensionsOfTheCage[0];
- int colsOfTheCage = dimensionsOfTheCage[1];
- //декларираме и инициализираме клетката
- cage = new int[rowsOfTheCage, colsOfTheCage];
- //четем началната позиция на мегнето мен
- int[] magnetoManPosition = SplitStringToIntArray(Console.ReadLine());
- int magnetoManRow = magnetoManPosition[0];
- int magnetoManCol = magnetoManPosition[1];
- //магнитите започват да падат в клетката
- string inputLine;
- while ((inputLine = Console.ReadLine()) != "Test Finished!")
- {
- //подават се по три параметъра (ред, колона, радиус ПО ДИАГОНАЛ!!!)
- int[] magnetInfo = SplitStringToIntArray(inputLine);
- int rowOfMagnet = magnetInfo[0];
- int colOfMagnet = magnetInfo[1];
- int diagonalRadiusOfMagnet = magnetInfo[2];
- //ако клетката върху която пада магнита нищо не се случва
- //евентуално може да се добави всеки път когато магнето мен не си сменя мястото
- //да увечичава стойноста на последната клетка върху която е стоял
- //като дори и това да е клетката върху която е в момента пак се увеличава
- if (!CellIsValid(rowOfMagnet, colOfMagnet))
- {
- continue;
- }
- else
- {
- cage[magnetoManRow, magnetoManCol]++;
- }
- //променливи за да разберем каква е абсолютната стойност на разликата между
- //магнето мен и магнита
- int rowDifference = Math.Abs(magnetoManRow - rowOfMagnet);
- int colDifference = Math.Abs(magnetoManCol - colOfMagnet);
- //проверяваме дали всъщост магнита е по диагонал защото ако не е не се телепортираме
- //магнита е по диагонал само ако разликите на колоните и редовете са еднакви
- //проверяваме дали всъщност магнето мен е в радиуса на магнита и ако и двете
- //условия са изпълнени чак тогава започва телепортацията
- if (rowDifference == colDifference &&
- diagonalRadiusOfMagnet >= rowDifference)
- {
- //проверяваме дали разстоянието между магнита и магнето мен е четно число
- //ако е четно число на клетката на която е бил магнето мен досега ще сложим сбора
- //на реда и колоната на магнето мен в противен случай ще сложим сбора на реда
- //и колоната на магнита
- int valueToPlace = rowOfMagnet + colOfMagnet;
- if (rowDifference % 2 == 0)
- {
- valueToPlace = magnetoManRow + magnetoManCol;
- }
- //слагаме на вече предишната позиция на магнето мен сумата
- cage[magnetoManRow, magnetoManCol] = valueToPlace;
- //сменяме позицията на магнето мен понеже се е телепортирал
- magnetoManRow = rowOfMagnet;
- magnetoManCol = colOfMagnet;
- }
- else
- {
- cage[magnetoManRow, magnetoManCol]++;
- }
- }
- StringBuilder result = new StringBuilder();
- for (int row = 0; row < cage.GetLength(0); row++)
- {
- for (int col = 0; col < cage.GetLength(1); col++)
- {
- result.Append(cage[row, col]);
- if (col + 1 != cage.GetLength(1))
- {
- result.Append(" ");
- }
- }
- result.AppendLine();
- }
- Console.Write(result);
- }
- private static bool CellIsValid(int rowOfMagnet, int colOfMagnet)
- {
- return rowOfMagnet >= 0 && rowOfMagnet < cage.GetLength(0) &&
- colOfMagnet >= 0 && colOfMagnet < cage.GetLength(1);
- }
- private static int[] SplitStringToIntArray(string toSplit)
- {
- return toSplit.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement