MiroslavKisov

AnonymousThreat

Nov 12th, 2017
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.72 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.AnonymousThreat
  8. {
  9.     public class StartUp
  10.     {
  11.         public static void Main()
  12.         {
  13.             List<string> input = Console.ReadLine()
  14.                 .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
  15.                 .ToList();
  16.             StringBuilder sb = new StringBuilder();
  17.             while (true)
  18.             {
  19.                 string command = Console.ReadLine();
  20.                 if (command == "3:1")
  21.                 {
  22.                     break;
  23.                 }
  24.                 else
  25.                 {
  26.                     var commandArgs = command.Split(' ');
  27.  
  28.                     if (command.Contains("merge"))
  29.                     {
  30.                         int startIndex = int.Parse(commandArgs[1]);
  31.                         int endIndex = int.Parse(commandArgs[2]);
  32.                         MergeStrings(input, sb, startIndex, endIndex);
  33.                     }
  34.                     else if (command.Contains("divide"))
  35.                     {
  36.                         int index = int.Parse(commandArgs[1]);
  37.                         int partitions = int.Parse(commandArgs[2]);
  38.                         Divide(index, partitions, input, sb);
  39.                     }
  40.                 }
  41.             }
  42.             Console.WriteLine(string.Join(" ", input));
  43.         }
  44.  
  45.         private static void Divide(int index, int partitions, List<string> input, StringBuilder sb)
  46.         {
  47.             if (partitions > input[index].Length)
  48.             {
  49.                 partitions = input[index].Length;
  50.             }
  51.             if (partitions == 0 || partitions == 1)
  52.             {
  53.                 return;
  54.             }
  55.             int singlePartLength = input[index].Length / partitions;
  56.             List<char> temp = input[index].ToCharArray().ToList();
  57.             List<string> reversed = new List<string>();
  58.             input.RemoveAt(index);
  59.             for (int i = 0; i < partitions - 1; i++)
  60.             {
  61.                 for (int j = 0, k = 0; j < singlePartLength; j++)
  62.                 {
  63.                     sb.Append(temp[k].ToString());
  64.                     temp.Remove(temp[k]);
  65.                 }
  66.                 reversed.Add(sb.ToString());
  67.                 sb.Append(" ");
  68.                 sb.Clear();
  69.             }
  70.             sb.Append(string.Join("", temp));
  71.             reversed.Add(sb.ToString());
  72.             reversed.Reverse();
  73.             for (int i = 0; i < reversed.Count; i++)
  74.             {
  75.                 input.Insert(index, reversed[i]);
  76.             }
  77.             sb.Clear();
  78.         }
  79.  
  80.         private static void MergeStrings(List<string> input, StringBuilder sb, int startIndex, int endIndex)
  81.         {
  82.             if ((startIndex < 0 && endIndex <= 0) || (startIndex >= input.Count && endIndex >= input.Count))
  83.             {
  84.                 return;
  85.             }
  86.             else if (startIndex <= 0 && endIndex >= 0 && endIndex < input.Count)
  87.             {
  88.                 startIndex = 0;
  89.             }
  90.             else if (startIndex >= 0 && startIndex < input.Count && endIndex >= input.Count)
  91.             {
  92.                 endIndex = input.Count - 1;
  93.             }
  94.             else if (startIndex < 0 && endIndex >= input.Count)
  95.             {
  96.                 startIndex = 0;
  97.                 endIndex = input.Count - 1;
  98.             }
  99.             for (int i = startIndex; i <= endIndex; i++)
  100.             {
  101.                 sb.Append(input[i]);
  102.             }
  103.  
  104.             input.RemoveRange(startIndex, endIndex - startIndex + 1);
  105.             input.Insert(startIndex, sb.ToString());
  106.             sb.Clear();
  107.         }
  108.     }
  109. }
Advertisement
Add Comment
Please, Sign In to add comment