Advertisement
Guest User

Untitled

a guest
Jun 6th, 2018
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.52 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3. using System.Collections.Generic;
  4. using System.Text.RegularExpressions;
  5.  
  6. namespace Portal
  7. {
  8.     class Portal
  9.     {
  10.         struct EndPoint
  11.         {
  12.             public int Row;
  13.             public int Column;
  14.  
  15.             public EndPoint(int row = 0, int column = 0)
  16.             {
  17.                 Row = row;
  18.                 Column = column;
  19.             }
  20.         };
  21.  
  22.         static void Main(string[] args)
  23.         {
  24.             int matrixSize = int.Parse(Console.ReadLine());
  25.             List<List<char>> matrix = new List<List<char>>();
  26.             string patternMatrix = @"[SEO]";
  27.             Regex regexMatrix = new Regex(patternMatrix);
  28.             string patternLetter = @"[DURL]";
  29.             Regex regexLetter = new Regex(patternLetter);
  30.             bool isPath = true;
  31.  
  32.             int startRow = 0;
  33.             int startColumn = 0;
  34.  
  35.             List<EndPoint> endPoints = new List<EndPoint>();
  36.             //int endRow = -1;
  37.             //int endColumn = -1;
  38.  
  39.             for (int i = 0; i < matrixSize; i++)
  40.             {
  41.                 matrix.Add(new List<char>());
  42.                 matrix[i] = Console.ReadLine().ToList();
  43.                 if (matrix[i].Any(x => x == 'S'))
  44.                 {
  45.                     startRow = i;
  46.                     startColumn = matrix[i].IndexOf('S');
  47.                 }
  48.  
  49.                 var exits = Enumerable.Range(0, matrix[i].Count) .Where(x => matrix[i][x] == 'E') .ToList();
  50.                 foreach (var e in exits)
  51.                 {
  52.                     endPoints.Add(new EndPoint(i, e));
  53.                 }
  54.                 //if (matrix[i].Any(x => x == 'E'))
  55.                 //{
  56.                 //    endRow = i;
  57.                 //    endColumn = matrix[i].IndexOf('E');
  58.                 //}
  59.             }
  60.  
  61.             if (endPoints.Count == 0)
  62.             {
  63.                 Console.WriteLine($"Robot stuck at {startRow} {startColumn}. Experiment failed.");
  64.                 return;
  65.             }
  66.             else
  67.             {
  68.                 string directions = Console.ReadLine();
  69.                 int turns = 0;
  70.  
  71.                 foreach (char letter in directions)
  72.                 {
  73.                     if (regexLetter.IsMatch(letter.ToString()))
  74.                     {
  75.                         switch (letter)
  76.                         {
  77.                             case 'R':
  78.                                 while (true)
  79.                                 {
  80.                                     startColumn = (startColumn + 1) % matrix[startRow].Count;
  81.                                     if (regexMatrix.IsMatch(matrix[startRow][startColumn].ToString()))
  82.                                     {
  83.                                         break;
  84.                                     }else if (string.IsNullOrWhiteSpace(matrix[startRow][startColumn].ToString()))
  85.                                     {
  86.                                         continue;
  87.                                     }
  88.                                     else
  89.                                     {
  90.                                         isPath = false;
  91.                                         break;
  92.                                     }
  93.                                 }
  94.                                 break;
  95.  
  96.                             case 'L':
  97.                                 while (true)
  98.                                 {
  99.                                     startColumn = (startColumn + matrix[startRow].Count - 1) % matrix[startRow].Count;
  100.                                     if (regexMatrix.IsMatch(matrix[startRow][startColumn].ToString()))
  101.                                     {
  102.                                         break;
  103.                                     }
  104.                                     else if (string.IsNullOrWhiteSpace(matrix[startRow][startColumn].ToString()))
  105.                                     {
  106.                                         continue;
  107.                                     }
  108.                                     else
  109.                                     {
  110.                                         isPath = false;
  111.                                         break;
  112.                                     }
  113.                                 }
  114.                                 break;
  115.  
  116.                             case 'D':
  117.                                 while (true)
  118.                                 {
  119.                                     startRow = (startRow + 1) % matrixSize;
  120.                                     if (startColumn > matrix[startRow].Count - 1)
  121.                                     {
  122.                                         continue;
  123.                                     }
  124.                                     else if (regexMatrix.IsMatch(matrix[startRow][startColumn].ToString()))
  125.                                     {
  126.                                         break;
  127.                                     }
  128.                                     else if (string.IsNullOrWhiteSpace(matrix[startRow][startColumn].ToString()))
  129.                                     {
  130.                                         continue;
  131.                                     }
  132.                                     else
  133.                                     {
  134.                                         isPath = false;
  135.                                         break;
  136.                                     }
  137.                                 }
  138.                                 break;
  139.  
  140.                             case 'U':
  141.                                 while (true)
  142.                                 {
  143.                                     startRow = (startRow + matrixSize - 1) % matrixSize;
  144.  
  145.                                     if (startColumn > matrix[startRow].Count - 1)
  146.                                     {
  147.                                         continue;
  148.                                     }
  149.                                     else if (regexMatrix.IsMatch(matrix[startRow][startColumn].ToString()))
  150.                                     {
  151.                                         break;
  152.                                     }
  153.                                     else if (string.IsNullOrWhiteSpace(matrix[startRow][startColumn].ToString()))
  154.                                     {
  155.                                         continue;
  156.                                     }
  157.                                     else
  158.                                     {
  159.                                         isPath = false;
  160.                                         break;
  161.                                     }
  162.                                 }
  163.                                 break;
  164.                         }
  165.  
  166.  
  167.                         //Console.WriteLine();
  168.                         //Console.WriteLine(letter);
  169.                         //for (int i = 0; i < matrix.Count; i++)
  170.                         //{
  171.                         //    for (int j = 0; j < matrix[i].Count; j++)
  172.                         //    {
  173.                         //        if (i == startRow && j == startColumn)
  174.                         //        {
  175.                         //            Console.Write("#");
  176.                         //        }
  177.                         //        else
  178.                         //        {
  179.                         //            Console.Write(matrix[i][j]);
  180.                         //        }
  181.                         //    }
  182.                         //    Console.WriteLine();
  183.                         //}
  184.  
  185.  
  186.                         turns++;
  187.  
  188.                         if (!isPath)
  189.                         {
  190.                             Console.WriteLine($"Robot stuck at {startRow} {startColumn}. Experiment failed.");
  191.                             return;
  192.                         }
  193.  
  194.  
  195.                         foreach (var e in endPoints)
  196.                         {
  197.                             if (startRow == e.Row && startColumn == e.Column)
  198.                             {
  199.                                 Console.WriteLine($"Experiment successful. {turns} turns required.");
  200.                                 return;
  201.                             }
  202.                         }
  203.  
  204.                         //if (startRow == endRow && startColumn == endColumn)
  205.                         //{
  206.                         //    Console.WriteLine($"Experiment successful. {turns} turns required.");
  207.                         //    return;
  208.                         //}
  209.                     }
  210.                 }
  211.  
  212.                 Console.WriteLine($"Robot stuck at {startRow} {startColumn}. Experiment failed.");
  213.             }
  214.         }
  215.     }
  216. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement