MiroslavKisov

CommandInterpreter

Nov 5th, 2017
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.86 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace _02.CommandInterpreter
  8. {
  9.     public class StartUp
  10.     {
  11.         public static void Main()
  12.         {
  13.             var inputData = Console.ReadLine()
  14.                 .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
  15.                 .ToArray();
  16.             while (true)
  17.             {
  18.                 string command = Console.ReadLine();
  19.                 if (command == "end")
  20.                 {
  21.                     break;
  22.                 }
  23.                 if (command.Contains("reverse from"))
  24.                 {
  25.                     var reverseCommand = command
  26.                         .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
  27.                         .ToArray();
  28.                     Reverse(inputData, reverseCommand[2], reverseCommand[4]);
  29.                 }
  30.                 else if (command.Contains("rollLeft"))
  31.                 {
  32.                     var rollLeftCommand = command
  33.                         .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
  34.                         .ToArray();
  35.                     RollLeft(inputData, rollLeftCommand[1]);
  36.                 }
  37.                 else if (command.Contains("rollRight"))
  38.                 {
  39.                     var rollRightCommand = command
  40.                         .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
  41.                         .ToArray();
  42.                     RollRight(inputData, rollRightCommand[1]);
  43.                 }
  44.                 else if (command.Contains("sort from"))
  45.                 {
  46.                     var sortCommand = command
  47.                         .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
  48.                         .ToArray();
  49.                     SortInRange(inputData, sortCommand[2], sortCommand[4]);
  50.                 }
  51.             }
  52.             Console.WriteLine("[{0}]", string.Join(", ", inputData));
  53.         }
  54.  
  55.         private static string[] SortInRange(string[] inputData, string v1, string v2)
  56.         {
  57.             int start = int.Parse(v1);
  58.             int count = int.Parse(v2);
  59.             if (start < 0 || start >= inputData.Length || count < 0 || start + count > inputData.Length)
  60.             {
  61.                 Console.WriteLine("Invalid input parameters.");
  62.                 return inputData;
  63.             }
  64.             else
  65.             {
  66.                 var leftSide = inputData.Take(start).ToArray();
  67.                 var middleSide = inputData.Skip(start).Take(count).OrderBy(x => x).ToArray();
  68.                 var rightSide = inputData.Skip(start + count).Take(inputData.Length - (start + count)).ToArray();
  69.                 var sortedArr = new string[inputData.Length];
  70.                 leftSide.CopyTo(sortedArr, 0);
  71.                 middleSide.CopyTo(sortedArr, leftSide.Length);
  72.                 rightSide.CopyTo(sortedArr, middleSide.Length+leftSide.Length);
  73.                 sortedArr.CopyTo(inputData, 0);
  74.             }
  75.             return inputData;
  76.         }
  77.  
  78.         private static string[] RollRight(string[] inputData, string v)
  79.         {
  80.             int count = int.Parse(v);
  81.             if (count < 0)
  82.             {
  83.                 Console.WriteLine("Invalid input parameters.");
  84.                 return inputData;
  85.             }
  86.             else
  87.             {
  88.                 int range = 0;
  89.                 range= count % inputData.Length;
  90.                 if (range == 0)
  91.                 {
  92.                     return inputData;
  93.                 }
  94.                 string[] shifted = new string[inputData.Length];
  95.                 for (int j = 0; j < range; j++)
  96.                 {
  97.                     for (int i = 0; i < inputData.Length; i++)
  98.                     {
  99.                         shifted[(i + 1) % inputData.Length] = inputData[i];
  100.                     }
  101.                     shifted.CopyTo(inputData, 0);
  102.                 }
  103.                 shifted.CopyTo(inputData, 0);
  104.                 return inputData;
  105.             }
  106.         }
  107.  
  108.         private static string[] RollLeft(string[] inputData, string v)
  109.         {
  110.             int count = int.Parse(v);
  111.             if (count < 0)
  112.             {
  113.                 Console.WriteLine("Invalid input parameters.");
  114.                 return inputData;
  115.             }
  116.             else
  117.             {
  118.                 int range = 0;
  119.                 range = count % inputData.Length;
  120.                 if(range == 0)
  121.                 {
  122.                     return inputData;
  123.                 }
  124.                 string[] shifted = new string[inputData.Length];
  125.                 for (int j = 0; j < range; j++)
  126.                 {
  127.                     for (int i = 0; i < inputData.Length; i++)
  128.                     {
  129.                         shifted[i] = inputData[(i + 1) % inputData.Length];
  130.                     }
  131.                     shifted.CopyTo(inputData, 0);
  132.                 }
  133.                 shifted.CopyTo(inputData, 0);
  134.                 return inputData;
  135.             }
  136.         }
  137.  
  138.         private static string[] Reverse(string[] inputData, string v1, string v2)
  139.         {
  140.             int start = int.Parse(v1);
  141.             int count = int.Parse(v2);
  142.             if (start < 0 || start >= inputData.Length || count < 0 || start + count > inputData.Length)
  143.             {
  144.                 Console.WriteLine("Invalid input parameters.");
  145.                 return inputData;
  146.             }
  147.             else
  148.             {
  149.                 string swap = string.Empty;
  150.                 for (int i = 0; i < count / 2; i++)
  151.                 {
  152.                     swap = inputData[start + i];
  153.                     inputData[start + i] = inputData[start + count - i - 1];
  154.                     inputData[start + count - i - 1] = swap;
  155.                 }
  156.             }
  157.             return inputData;
  158.         }
  159.     }
  160. }
Advertisement
Add Comment
Please, Sign In to add comment