Advertisement
lPestl

Task133.cs

Oct 21st, 2018
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.57 KB | None | 0 0
  1. /*          02. Метод "Честный PacMan"          */
  2.  
  3. using System;
  4.  
  5. namespace Task133cs
  6. {
  7.     class Program
  8.     {
  9.         // Подсчет количества пройденное PacMan`ом, по честному как в задании
  10.         public static ulong CalcPacManPath(int width, int height, int row, int column)
  11.         {
  12.             // Инициализация динамический переменных
  13.             ulong count = 1 /* количество шагов (т.к. включительно - на стартовой позиции PacMan уже съел одну) */;
  14.             short direction = 0 /* направление движения (1 - вправо, 0 - вниз, -1 - влево) */;
  15.             int i = 1 /* текущий номер строки */; int j = 1 /* текущий номер столбца */;
  16.             // До тех пор пока мы не дочтигнем заданных координат
  17.             while (!((i == row) && (j == column)))
  18.             {
  19.                 // координату столбца меняем в зависимости от направления.
  20.                 // Если мы достигли правой границы, то направление меняется на "вниз" (или "влево", если предыдущее было "вниз"), иначе
  21.                 // Если мы достигли левой границы, то направление меняем на "вниз" (или "вправо", если предыдущее было "вниз").
  22.                 // Ну а коротко, потому что поигрался с инкрементами/декрементами и сокращением условий if
  23.                 j += j == width && j != 1 ? --direction : j == 1 && j != width ? ++direction : direction;
  24.                 // координату строки меняем только тогда, когда направление = "вниз"
  25.                 i += Convert.ToInt32(direction == 0);
  26.                 // у увеличеваем шаг
  27.                 count++;
  28.             }
  29.  
  30.             return count;
  31.         }
  32.  
  33.         // Tests
  34.         static void Main(string[] args)
  35.         {
  36.             int N = 3, M = 3, row = 1, column = 1;
  37.             Console.WriteLine($"N x M = {N} x {M};");
  38.             Console.WriteLine($"ROW x COLUMN = {row} x {column};");
  39.             Console.WriteLine($"Answer = {CalcPacManPath(N, M, row, column)}\n");
  40.  
  41.             N = 3; M = 3; row = 1; column = 2;
  42.             Console.WriteLine($"N x M = {N} x {M};");
  43.             Console.WriteLine($"ROW x COLUMN = {row} x {column};");
  44.             Console.WriteLine($"Answer = {CalcPacManPath(N, M, row, column)}\n");
  45.  
  46.             N = 3; M = 3; row = 1; column = 3;
  47.             Console.WriteLine($"N x M = {N} x {M};");
  48.             Console.WriteLine($"ROW x COLUMN = {row} x {column};");
  49.             Console.WriteLine($"Answer = {CalcPacManPath(N, M, row, column)}\n");
  50.  
  51.             N = 3; M = 3; row = 2; column = 3;
  52.             Console.WriteLine($"N x M = {N} x {M};");
  53.             Console.WriteLine($"ROW x COLUMN = {row} x {column};");
  54.             Console.WriteLine($"Answer = {CalcPacManPath(N, M, row, column)}\n");
  55.  
  56.             N = 3; M = 3; row = 2; column = 2;
  57.             Console.WriteLine($"N x M = {N} x {M};");
  58.             Console.WriteLine($"ROW x COLUMN = {row} x {column};");
  59.             Console.WriteLine($"Answer = {CalcPacManPath(N, M, row, column)}\n");
  60.  
  61.             // Test from task
  62.             N = 3; M = 3; row = 2; column = 1;
  63.             Console.WriteLine($"N x M = {N} x {M};");
  64.             Console.WriteLine($"ROW x COLUMN = {row} x {column};");
  65.             Console.WriteLine($"Answer = {CalcPacManPath(N, M, row, column)}\n");
  66.  
  67.             N = 3; M = 3; row = 3; column = 1;
  68.             Console.WriteLine($"N x M = {N} x {M};");
  69.             Console.WriteLine($"ROW x COLUMN = {row} x {column};");
  70.             Console.WriteLine($"Answer = {CalcPacManPath(N, M, row, column)}\n");
  71.  
  72.             N = 3; M = 3; row = 3; column = 2;
  73.             Console.WriteLine($"N x M = {N} x {M};");
  74.             Console.WriteLine($"ROW x COLUMN = {row} x {column};");
  75.             Console.WriteLine($"Answer = {CalcPacManPath(N, M, row, column)}\n");
  76.  
  77.             N = 3; M = 3; row = 3; column = 3;
  78.             Console.WriteLine($"N x M = {N} x {M};");
  79.             Console.WriteLine($"ROW x COLUMN = {row} x {column};");
  80.             Console.WriteLine($"Answer = {CalcPacManPath(N, M, row, column)}\n");
  81.  
  82.         }
  83.     }
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement